2.0 __init__py及包

  1. Directory

新建2个目录,a目录中有个test.py,b目录中有个run.py,现在需要在run.py中调用test.py里的方法

#a/test.py
import random


def random_sex():
    num = random.randint(1, 2)
    if num == 1:
        return '男'
    else:
        return '女'

#b/run.py
from a.test import random_sex
print(random_sex())

在pycharm中右键运行,执行成功

使用python命令运行

python b/run.py

运行失败,提示找不到模块

输出sys.path

print(sys.path)

#output
['D:\\workspace\\pycharm\\py_tools\\_case', 'C:\\Users\\javain\\.pyenv\\pyenv-win\\ver
sions\\3.9.5\\python39.zip', 'C:\\Users\\javain\\.pyenv\\pyenv-win\\versions\\3.9.5\\D
LLs', 'C:\\Users\\javain\\.pyenv\\pyenv-win\\versions\\3.9.5\\lib', 'C:\\Users\\javain
\\.pyenv\\pyenv-win\\versions\\3.9.5', 'D:\\workspace\\pycharm\\py_tools\\venv', 'D:\\
workspace\\pycharm\\py_tools\\venv\\lib\\site-packages']

当前项目的目录并没有添加在sys.path中

#b/run.py
import sys
sys.path.append(r'.')
from a.test import random_sex
random_sex()

执行python b/run.py,运行成功

注:如果py文件在根目录的话

from test import random_sex即可
  1. Python Package

每个python package都会有一个__init__.py文件

__init__.py的作用主要用来批量导入和简化导包

示例

#a/test1.py
def h():
    print('hello')
#a/test.py
import random
def random_sex():
    num = random.randint(1, 2)
    if num == 1:
        return '男'
    else:
        return '女'

如果a/__init__.py中为空的话,那么b/run.py文件使用这个包就必须按照如下方式使用

导入整个文件
from a import test
from a import test1
或者导入文件中的方法
from a.test import random_sex
from a.test1 import h 

如果a/__init__.py不为空的话,且内容如下

from a.test import random_sex
from a.test1 import h
import os

那么b/run.py中就应按如下方式使用

import a
a.random_sex()
a.h()
print(a.os.getcwd())

或者

from a import *
test.random_sex()
test.h()
print(os.getcwd())

如果__init__.py中有__all__参数的话

__all__ = ['h','random_sex','os']

则b/run.py中应按如下方式使用

import a
a.random_sex()
a.h()
print(a.os.getcwd())

如果要使用from的形式的话,需要按如下方式使用

from a import *
random_sex()
h()

从上述实验上来看,没有太大的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值