文章目录
1、 Package
文件夹下有“__init__.py”就是Package。否则就是普通文件夹
如下图:
2、__ init__.py的作用
package被调用时,会道先运行__ init__.py文件下的程序
例:
__ init__.py的代码:
print("来自__ init__.py")
bin.py的代码:
import year
print("bin.py通常作为python的入口文件")
运行bin.py
输出:
来自__ init__.py
bin.py通常作为python的入口文件
注:bin.py运行时选运行了__ init__.py下的代码
3、模块的导入
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行
3.1、同Package下
例一:
bin.py的代码:
#bin.py
import year
print(year.getYear())
year.py的代码:
#year.py
def getYear():
return 2019
运行bin.py输出:
2019
注:这种导入方法,调用year.py文件下的getYear函数时,必须year.getYear
若想省去文件名year,bin.py改以用以下方法调用
#bin.py
from year import getYear
print(getYear()) #就不用再year.getYear()了
也可以
#bin.py
from year import * #表示导入year.py文件下所有函数
print(getYear()) #就不用再year.getYear()了
3.2 不同Package下模块的导入
例一:
bin.py的代码:
from year.month.day.day import getDay
print(getDay())
day.py的代码:
def getDay():
return 25
运行bin.py输出:
25
3.3、import怎样找到对应的文件
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
当使用import语句的时候,Python解释器是怎样找到对应的文件的呢?
import sys
print(sys.path)
import是根据sys.path打印出来的路径依次找的
3.4、动态模块的导入
- t.py
def test():
print("test")
- bin.py
module_t=__import__("module.t")#返回最顶层模块,这里返回module
print(module_t)
module_t.t.test() #调用t.py下的test函数
输出:
<module ‘module’ (namespace)>
test
3.5、用importlib动态模块导入
- bin.py
import importlib
module_t=importlib.import_module("module.t")#返回module.t
print(module_t)
module_t.test()
输出:
<module ‘module.t’ from ‘G:\Program Test\Python\运态模块导入\module\t.py’>
test
4、__ name__
- __name__如果是在入口文件中,值为main
- __name__如果是在被调用文件中,值为该文件的文件名
例:
bin.py的代码:
import year
print(year.getYear())
year.py中的代码:
print("year.py中的__name__:%s" %__name__)
def getYear():
return 2019
4.1、__ name__在入口文件中运行
year.py作为入口文件直接运行,输出:
year.py中的__name__:main
注:__name_是在入口文件中的所以值为main
4.2、__ name__在被调用文件中运行
year.py被bin.py调用,输出:
year.py中的__name__:year
2019
注:__name_是在被调用文件中的所以值为被调用文件的文件名,year
4.3、__ name__的用法
if __name__=="main":
print("该文件若是入口文件则__name__值为main")
else:
print("该文件若是被其他文件调用,__name__为该文件的文件名")
注:程序中加上
if __name__=="main"
如果该文件是入口文件,则其下的程序会被执行 如果该文件是被调用文件,则其下的程序不会被执行