Python 读书笔记(容易误解的知识点)-Part 1
if __name__ == '__main__'是啥意思?
Python 属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。
if __name__ == '__main__' 就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。
__name__ 是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。
如果一个.py文件(模块)被直接运行时,则其没有包结构,其__name__值为__main__,即模块名为__main__。
可以简单测试一下其输出:
print(__name__)
直接运行,输出结果为:__main__
if __name__ == '__main__'表示啥意思呢?如果模块是被直接运行的,则该代码块被运行,如果模块是被导入的,则代码块不被运行。
Python中传参数args=(i,) 为什么要加上逗号?
Python中传参数的是时候如果直接传args = (i),那么解释器会觉得你是传了一个数字而不是元组。只有args = (i,)这样传才会默认为传进一个元组。这是格式要求。
看下面这段操作演示,只有当b元组中只有一个元素的时候,需要逗号来转换为元组类型。
如下是一段演示代码:
Python的from import和import的区别?
import Module # 引入模块
from Module import Class # 引入模块中的类、函数或者变量
from Module import * # 引入模块中的所有公开成员
再进一步解释一下:
第一个:引入的模块会自动生成一个对象(以模块命名,或者通过as 更改别名),然后就可以通过这个对象获取该模块里面的类、函数或者变量等等。
第二个:引入模块中的Class成员,调用时就可以省略模块名。
第三个:就是引入模块中所有公开的成员。
如下面的实例代码:
from datetime import datetime
print(datetime.now())
import datetime as dt
print(dt.datetime.now())
第一部分是:引入datetime 模块中的datetime类,然后就可以直接通过 datetime 类调用 now() 方法了。
第二部分是:引入 datetime模块,并命名为dt,这个模块中有一个类datetime,在这个类中有一个方法now()。
可以进一步查看源码。在datetime.py 文件中,找到了 datetime 这个类,同时在这个类中找到了 now() 方法。
调用过程是:模块datetime -> 类datetime -> 方法now()
now() 方法:
最后补充一点:
import xx.xx.xx,最后的一个xx可以是package或者module,但绝对不能是函数或者类的名字。
比如,import datetime.datetime就是不对的。