小甲鱼第51讲:《__name__="__main__"、搜索路径和包》课后练习题

时间:2024-01-17 12:55:02

测试题:

0. __name__属性指的是在调用该模块的时候调用的函数名称,方便在模块的被调用的时候,模块内部被调用的函数不会被运行。

1. 当模块作为主程序运行的时候,__name__属性的值是“__main__”,当该模块被调用导入到另一个模块的时候,"__name__"属性值为模块名称。

2. 通过sys模块的path变量显示搜索路径:

 import sys
sys.path

3. 将相关模块文件的路径加入到搜索路径中,例如:

 import sys
sys.path.append("*****") # *****表示模块坐在路径

但是这里小甲鱼推荐把包最好都存放在python的安装路径里面的sitepackages文件夹内,顺便说一下,安装包的时候,比如numpy直接在官网下载wheel源代码文件然后存入sitepackages文件夹内就可以直接调用numpy这个包里面的所有模块和函数了,再次感谢开源的好处。

4. urllib属于包,request属于包里面的模块

5. 包其实就是在普通文件夹内添加了文件“__init__.py”的模块文件,文件夹内拥有模块,此时文件夹就是一个包了,所以文件夹是否是包的最大区别就是是否拥有“__init__.py”模块。其中这个__init__.py文件就是一个初始化文件,可以为空,也可以写入一些初始化的代码。

动动手:

0. 修改以下程序:

 # a.py
import b def x():
print('x') b.y() # b.py
import a def y():
print('y') a.x() 执行 b.py 引发下边异常:
>>>
Traceback (most recent call last):
File "/Users/FishC/Desktop/b.py", line 1, in <module>
import a
File "/Users/FishC/Desktop/a.py", line 1, in <module>
import b
File "/Users/FishC/Desktop/b.py", line 6, in <module>
a.x()
AttributeError: 'module' object has no attribute 'x'

最好的方式,是单独建立一个模块,用来调用a和b模块,因为a与b两个模块不会被互相调用,否则因为任何一个模块的不完整而报错:

 # test.py

 import a
import b
a.x()
b.y()

还有一个方式,如果不想建立一个单独的模块,可以这样(程序就不会报错了):

 # a.py
# import b def x():
print('x')
 # b.py
import a def y():
print('y') if __name__ == "__main__":
a.x()