python学习中包的生成和调用(idle和pycharm)
程序员文章站
2024-02-22 12:33:28
...
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倒是没问题。
参考:
下一篇: java实现租车系统