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就是不对的。