一. 包
,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。
因此if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在if __name__ == 'main':
下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。
1. __name__=='__main__':
def aa(): print("111111") cc=10000 def lo(): print("222222222222222222222") print(__name__) # __main__ # 当我们执行这个模块的时候 __name__=='__main__' # 当我我们去执行其他模块 在其他模块中引用这个模块的时候 __name__=="模块名字" if __name__=='__main__': lo() aa() print(cc) # 222222222222222222222 # 111111 # 10000
2. module from.....import ... from.....import *
这是module.py文件 # 一个.py就是一个模块 def sayGood(): print("my name is veary good") def sayNice(): print("my name is veary good") def sayHandsome(): print("my name is veary good") t1=1000000000000000
这是执行文件aa.py """ 方法一 import module # 自定义模块 后面不加.py后缀 # 注意 一个模块只会引入一次 不管你执行了 多次 import 防止模块多次引入 # 使用模块中的内容: # 格式: 模块名 函数名/变量 module.sayHandsome() # my name is veary good module.sayGood() # my name is veary good module.sayNice() # my name is veary good print(module.t1) # 1000000000000000 # 引用函数模块 sayHandsome() sayGood() sayNice() """
""" 方法二 from.......import*语句 # 作用:把一个模块中所有的内容导入 当前命名空间 # from module import *#最好不要过多使用 sayGood() """ # 方法三 # from.......import语句 # 作用:从模块中导入一个指定的部分到当前命名空间 # 格式: from module import name[,[name2]] # 意思从modul这个模块里导入那个功能模块 from module import sayGood ,sayNice,sayHandsome # 程序内容的函数可以将模块中的同名函数覆盖 # def sayGood(): # print("*********************") sayGood() # my name is veary good sayNice() # my name is veary good sayHandsome() #my name is veary good
3. __init__.py
思考: 如果不同的人编写的模块同名怎么办
解决: 为了解决模块命名的冲突 引入了按目录来组织模块的方法 这个模块称为包
特点: 引入了包以后 只要顶层的包不与其他人发生冲突 那么模块都不会与别人的发生冲突
Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py
用于标识当前文件夹是一个包。
考虑一个在 package_runoob 目录下的 runoob1.py
a目录下的aa.py
执行文件
# runoob2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下: import a.aa import a.xi a.aa.sayGood() # 333333333333333333333333333330000000 a.xi.bb() b.aa.aa() # 111111111111111111111111111111111111111
4. 相对路径包 这种不能在包里面使用 只能在外面使用
目录结构
api cmd db 目录下 文件
包1.py执行
5. 绝对路径包 优点可以随意移动包 对应的 dir2目录包
api api cmd db log 目录下 文件
包2.py 执行文件