一、导入模块的两种方式
1.直接使用import
1 import 模块名 2 3 #调用 4 模块名.方法名()
2.使用from…import…
1 from 模块名 import 方法名1,方法名2(from 模块名 import *) 2 3 #调用 4 方法名()
3.__name__:直接使用解释器调用模块时,值为__main__,在其他地方调用模块时, 会显示为模块名,通过这一特性可以更好的测试
def test1(object): print('1111') def test2(object): print('2222') if __name__ == '__main__': test1() test2()
4. 一个模块在导入后进行修改,修改后的内容是无法直接生效的,如果想要让修改后的内容生效,可以用下面的办法
from imp import * reload(模块名)
5.修改导入模块的默认路径
import sys print(sys.path) #会打印出模块加载的默认路径,是一个列表 sys.path.append('/home/itcast/xxx') sys.path.insert(0, '/home/itcast/xxx') #可以确保先搜索这个路径
5.模块的循环导入问题
(1)首先定义一个a模块和一个b模块,在a模块中想要调用b模块中的b函数,在b模块中想要调用a模块中的a函数,这样就会形成一个死循环,报错
from b import b def a(): print('----a----') b() a()
from a import a def b(): print('----b----') def c(): print('----c----') a() c()
(2)要谨防上面问题的发生,解决该问题应该写一个新的模块,在新的模块中调用
二、其他
1.__all__
__all__ = ["test1"]; def test1(): print("11111") def test2(): print("22222") #在模块中__all__后的部分添加模块中的方法名,如果在外部使用from ... import *时,只会导入__all__中的方法
2.让程序自动导入在下一级目录下的模块,可以在下一级目录创建一个名为__init__.py的文件(此时该目录称之为包),然后在__init__.py文件中输入__all__ = ['模块名']的内容(注:该方法只是在导入模块式使用from ... import *时生效,想直接使用模块见下条)
3.如果想直接使用该目录下的模块,需要在__init__.py文件中使用from . import 模块名进行导入
4.列表推导式
a = [x for x in range(4)] print(a) #结果为:[0, 1, 2, 3] a = [x for x in range(3, 4)] print(a) #结果为:[3] a = [x for x in range(3, 19, 2)] print(a) #结果为:[3, 5, 7, 9, 11, 13, 15, 17] a = [x for x in range(10) if x % 2 == 0] print(a) #结果为:[0, 2, 4, 6, 8] a = [x for x in range(3) for j in range(2)] print(a) #结果为:[0, 0, 1, 1, 2, 2] a = [(x, y) for x in range(3) for j in range(2)] print(a) #结果为:[(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
三、集合
1.集合的定义:a = {11, 22, 33}
2.集合的特点:集合会自动去重
3.集合和列表的相互转换:set() list() 利用集合会自动去重的特点,可以对列表进行去重