python学习中包的生成和调用(idle和pycharm)

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倒是没问题。


参考:

点击打开链接

点击打开链接

猜你喜欢

转载自blog.csdn.net/augustmoore/article/details/80729673