欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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")

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

如图:

在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__:

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

能运行,但是有两个外部初始化,不懂

# -*- 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即得到:
python学习中包的生成和调用(idle和pycharm)


在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__,出现问题,截图:

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


直接用test倒是没问题。


参考:

点击打开链接

点击打开链接