python--导入包、模块、循环导入
文章目录
- 包
- 模块
- 循环导入
包中除了模块,还有__init__,其内含有__all__
模块中除了文件,还有__init__,其内含有__all__,但用法不同
包
1 如果一个文件夹中有__init__,就说明他是个包,如果没有__init__,就说明他是个文件夹而已。是包就可以在引入包后直接使用__init__的一切。
2 如果__init__.py中有个__all__ = [“包中的模块”,“包中的文模块1”.。],就可以from 包 import *(模块),然后就可以直接用模块名.函数了。未在__all__中的模块不可食用,如果没有__all__,就都不可以使用
import 包名
# 默认会run包中的__init__,默认会加载其中的任何东西到内存,如函数,可以直接用包名.函数名,包中的其他文件都是需要再导入的,__init__中的不需要,可以直接导入。
# 如:
# package
#..__init__.py # 把只要引入包就需要导入的一些内容放进来
#....def money
#..package_name.py
#....def setname
#..package_color.py
#....def setcolor
# 使用时,
import package # 直接引入包就可以使用其中的函数、变量等,略去了再引入文件的过程
package.money()
from pakcage.package_name import setname # 需要引入函数、变量等才可使用
package.setname()
from pakcage.package_color import setcolor
自己的理解,应该类似类,如果创建一个类对象,这个类对象默认含有init中的属性
模块
from 模块 import *
模块的__init__中如果有__all__,则__all__中有的文件才能使用,如果没有__all__,那么模块中的所有文件都可以用
循环导入
问题:A模块导入B,B模块导入A
解决方式:
避免循环调用出现的死循环,2步
1 把被调用的那个模块 引入本模块的语句 写到被调用的地方,让其保证在本模块中可以被正常调用(在(1)被调用)
2 然后把本模块要被执行的函数写到main里面,方便本模块的函数被调用时,多次输出
# python循环导入1.py
from python循环导入2 import func
def task1():print("******task1")def task2():print("**********task2")func() # ...(1)if __name__ == '__main__':task1()task2()# 循环调用时,不在main函数里进行调用容易多次调用,因为其他循环过来以后这边要执行两次"""最终输出:******task1**********task2*********func******task1*******func1"""
# python循环导入2.py
def func():print("*********func")from python循环导入1 import task1# 把这句话挪到里面,先保证func被使用时,能被导入task1()print("*******func1")
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
