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

测试题:

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


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


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

1 import sys
2 sys.path

 

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

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

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

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

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

动动手:

0. 修改以下程序:

 1 # a.py
 2 import b
 3 
 4 def x():
 5     print('x')
 6 
 7 b.y()
 8 
 9 # b.py
10 import a
11 
12 def y():
13     print('y')
14 
15 a.x()
16 
17 执行 b.py 引发下边异常:
18 >>> 
19 Traceback (most recent call last):
20   File "/Users/FishC/Desktop/b.py", line 1, in <module>
21     import a
22   File "/Users/FishC/Desktop/a.py", line 1, in <module>
23     import b
24   File "/Users/FishC/Desktop/b.py", line 6, in <module>
25     a.x()
26 AttributeError: 'module' object has no attribute 'x'

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

1 # test.py
2 
3 import a
4 import b
5 a.x()
6 b.y()

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

1 # a.py
2 # import b
3 
4 
5 def x():
6     print('x')
1 # b.py
2 import a
3 
4 
5 def y():
6     print('y')
7 
8 if __name__ == "__main__":
9     a.x()

 

posted @ 2015-11-16 09:59  wing1995  阅读(1381)  评论(0编辑  收藏  举报