Python 中的 if __name__ == '__main__' 该如何理解

这个问题来自于知乎用户的提问,当时看到这个问题,我只是做了下简单的回答。后来我发现,对于很多人来说,更准确的说应该是大部分的 Python 初学者,对这个问题理解的不是很深刻。所以这里我来做下总结,并试图把这个问题说明白。 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。同样,Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。 ...

阅读更多

Python 模块收集

工具 six Python 2 和 3 的兼容库,用于编写 Python2 和 3 兼容的代码 attrs Attributes Without Boilerplate assertpy assert 语句的替代品 affirm 用于更好的替换 assert 语句 decorator 简化 decorator 的使用难度而开发的模块 isort 可自动对 Python 的 import 语句进行排序和分段。可将大量的 import 结构转成非常适合阅读的排版 fuzzyfinder 10 行代码写的模糊查询 interruptingcow 一个 watchdog,用于中断长时间运行的...

阅读更多

现在的一切便是最好的

一直有写博客的习惯。还在学校的时候,经常会查一些资料,过了一段时间需要再用的时候,发现找不到了。后来学会了用浏览器的收藏夹,最后又发现收藏的网址越来越多,也越来越乱,而且很多网址最后几乎都没再去打开过。于是,才打算自己写博客。最开始的目的只是想做个备份,把别人的文章复制过来粘贴上,文末标上原文链接。 每个人对同一个问题的看法,或者描述都会有不一样。所以,后来我发现对于同一个问题很多别人写的博客文章都值得参考,但总不能一一把它们都 copy 过来吧,这样未免有些麻烦。嗯,我打算进行一下归纳和总结,不在直接复制了。这样一来,对于一个问题,我会先查阅很多资料,然后梳理思路,思考,最后按照...

阅读更多

Git 多平台换行符问题(LF or CRLF)

自从工作以后,基本上没有接触过 Windows 系统,偶尔使用 Windows 也是因为要写文档,Linux 下勉强可以用 WPS Office,但是格式与同事的不兼容,也算是迫不得已。而对我自己来说,大部分的文档都用 Mardown 来搞定。在很长一段时间里,我是很鄙视 Windows 的。 使用 Windows 系统时的诸多体验是让人讨厌的。感觉其大部分软件都很笨重,软件装得多了,磁盘就不够用了。不喜欢安装一个软件时捆绑安装一大堆无用的软件。不喜欢一些软件时不时的广告弹窗。 一些人说,玩 Linux 大部分时间都花在了折腾上,是的,的确是这样。首先是,Linux 的桌面不尽如人意...

阅读更多

Python 如何处理模块和包有相同名字的情况

在编程开发中,个人觉得,只要按照规范去做,很少会出问题。刚开始学习一门技术时,的确会遇到很多的坑。踩的坑多了,这是好事,会学到更多东西,也会越来越觉得按照规范做的重要性,规范的制定就是用来规避问题的。有时候确实应该听听有经验人的建议,不要一意孤行。这好像不是本文的重点,其实我重点是想表达,尽量按规范做事,这样会少走很多弯路。 我现在使用的主力编程语言是 Python,在接触 Python 至今,我感觉我踩的坑还是极少的,基本上没有遇到什么奇怪的问题。实际上,这并不是一件好事,不踩坑,很多躺在暗处的知识点你不会了解,所以也很难成长。幸好,有一些会踩坑的同事。 一同事问我,在 Pytho...

阅读更多

一个命令行 Python 工具 -- Pythonpy

Pythonpy 是一个可以在命令行直接执行简单 Python 表达式的工具。 安装: pip install pythonpy 使用: $ py --help usage: py [-x] [-l] [-c PRE_CMD] [-C POST_CMD] [-V] [-h] [expression] positional arguments: expression e.g. py '2 ** 32' Options: -x treat each row of stdin as x -l treat list...

阅读更多

Python 模块简介 -- collections

Python 的内置数据数据类型包括 str, int, list, tuple, set, dict 等,有时候这些数据类型可能满足不了我们的需求。不过标准库的 collections 模块在这些内置数据类型的基础上,提供了几个额外的数据类型: 类型 说明 备注 namedtuple 命名元组,使用名字访问元素 New in version 2.6. deque 双端队列,可以快速的从头/尾两端添加或删除元素 New in version 2.4. Counter 计数器,用于对某项数据进行计数 New in version 2.7. OrderedDict 有...

阅读更多

Python 内层名字空间访问外层名字空间中的变量

某天,一位新来的同事问我,在 Python 的函数中,怎么定义一个像 C 语言中的 static 变量。就像这样: void foo(void) { static int a = 0; ... } 已经抛弃 C 好长时间了,现在工作和业余都在使用 Python,也习惯用 Python 去思考。被问到这个问题时,我一时还真不知道怎么回答,因为在使用 Python 的这么长时间里,我还真没有遇到过这样的需求。当然,Python 自身也不直接支持类似的语法,所以也不会这样去思考。 实际上,他是想要在函数中保持一个变量的状态。经过短暂的思考,我回答他,你可以定义一个全局变量...

阅读更多