在Python工程中任何一个py文件都是一个模块,Python项目也建议以模块的形式进行开发,这样就可以为了方便开发和后续的维护。
import 模块名(文件名),就可以使用这个文件中的全局变量、函数、类
#myModules.py def func(): print("func in file myModules.py") class Dog(): pass num = 10 # main.py import myModules print(myModules.Dog) myModules.func() print(myModules.num) 结果: <class 'myModules.Dog'> func in file myModules.py 10注意:这个模块名和变量的命名规则一样,使用中文不报错但最好不要用。
from 模块名 import * :这种导入方式的效果跟第一种一样,是把一个模块中全部能导入的东西导入,但是在使用上就不一样了。依旧用上面的模块为例。
# main.py from myModules import * print(Dog) func() print(num) 结果: <class 'myModules.Dog'> func in file myModules.py 10from 模块名 import 全局变量名/类名/函数:这种导入方式相对来说比较灵活,你需要用什么就导入什么。但是这种形式也有一个弊端就是如果其他模块中也有同名的全局变量、函数定义、类定义的时候就分不清你使用的是哪一个了。默认是后一个模块中的覆盖前一个模块中同名的定义。
在以上myModules.py文件中添加行输出:print(__name__),得到的程序如下:
#myModules.py def func(): print("func in file myModules.py") class Dog(): pass num = 10 print(__name__)然后右键运行main.py文件可以看到输出是:myModules,就是这个模块的名字。但是如果直接右键运行myModule.py,得到的输出是:__main__。
这个例子主要说明了如果一个文件是以模块的形式载入另一个文件执行的,那么__name__就是模块名;如果一个文件是主动执行的那么__name__就是__main__。
作用:把要进行主动执行的代码都放在if __name__ == "__main__": 语句块中,可以防止这个文件在作为模块导入的时候执行多余的不必要代码。
使用PyCharm开发,在创建一个项目后,在项目中再创建的的文件夹就是包,包主要是来进行目录整合的。
在Python3项目中的子文件夹就是包,只要在导入包下面的模块的时候加上包名就能 正常导入模块。但是在Python2中,一个普通的文件夹中的模块要想能被导入需要手动建一个__init__.py文件。
# module1.py def func(): print("in package module1") # module2.py def func(): print("in package module2") import package.module1 import package.module2 # main.py if __name__ == "__main__": print("in main.py!use package.module1 and package.module2") package.module1.func() package.module2.func() 结果: in main.py!use package.module1 and package.module2 in package module1 in package module2