1.包其实就是文件夹
2.调用是用一个python文件调用其它的python文件
3.调用可以是不同包中调用
4.要调用一个包,必须在包的目录下有__init__.py文件
5.其他包调用也需要__init__.py。因此在每个包地下都要有一个__init__.py来初始化。
在pycharm中
实例
在pycharm中创建project
并且在venv文件夹下创建包package1,然后在package1目录下创建exer11.py文件,假设输入:
# -*- coding:utf-8 -*- #exer11.py def t1(): print("this is t1") def t3(x,y): return x+y
同理创建__init__.py:
# -*- coding:utf-8 -*- #__init__.py if __name__=='__main__': print("作为主函数运行") else: print("initalized")
如图:
在venv目录下创建了package2,__init__,test。打算用test来调用package1和package2中的函数:
# -*- coding:utf-8 -*- #__init__ if __name__=='__main__': print("运行") else: print("chushihua")
# -*- coding:utf-8 -*- #exer21.py def t2(): print("this is t2")
在和venv下创建的__init__和test:
# -*- coding:utf-8 -*- from venv.test import * #import venv.package2 #import venv.package1 print("外部的初始化")
在pycharm下运行__init__:
能运行,但是有两个外部初始化,不懂
# -*- coding:utf-8 -*- #test.py from package1.exer11 import t1 from package1.exer11 import t3 t1() print(t3(1,2)) #虽然没有直接调用__init__.py,但是他还是自然而然地调用了__init__.py运行test.py即得到:
在idle 中实现:
实例:
建立文件夹project,再在project中创建package1,package2两个子文件夹。并且分别在这两个子文件夹下创建__init__和ex1,ex2。并在project 下创建test 和__init__:
package1:
# -*- coding:utf-8 -*- #ex1 def t1(): print("this is t1(),hello")
# -*- coding:utf-8 -*- #init if __name__=="__main__": print("run init1.py") else: print("init1 不成立")
package2:
# -*- coding:utf-8 -*- import time def t2(): print(time.asctime(time.localtime(time.time())))
# -*- coding:utf-8 -*- #init if __name__=="__main__": print("run init2.py") else: print("init2 不成立")
外部和package同级的init和test:
如果这样写不需要init函数(虽然是这样,但是我还是选择加上):
# -*- coding:utf-8 -*- from package1.ex1 import t1 #从package1中的ex1中调用t1函数 from package2.ex2 import t2 t1() t2()
from project.test import * #引入porject 下的模块 import project.package1 #引入project下的子包 import project.package2 #引入同级模块需要用from--import-- #引入子包用import,必须要加'.'表面层级关系 if __name__=='__main__': print("运行外部初始化") else: print("初始化不成立")
运行__init__,出现问题,截图:
直接用test倒是没问题。