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 读书笔记(容易误解的知识点)-Part 1

如下是一段演示代码:

Python 读书笔记(容易误解的知识点)-Part 1

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()

Python 读书笔记(容易误解的知识点)-Part 1

now() 方法:

Python 读书笔记(容易误解的知识点)-Part 1

最后补充一点:

import xx.xx.xx,最后的一个xx可以是package或者module,但绝对不能是函数或者类的名字。

比如,import datetime.datetime就是不对的。

相关推荐