python 3 基础之包

Posted 属于自己的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 3 基础之包相关的知识,希望对你有一定的参考价值。

包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。

简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包

1、包中的__init__.py

  __init__.py控制着包的导入行为

  创建包后,包里自动生成一个__init__.py在python3中没有意义,删掉也没问题

  在python2 中是有作用的,若在python2中不定义一个__init__.py会导致其他模块不能使用该包中的模块

  1.1、可以在__init__.py文件里添加内容,当导入此包中的模块时,__init__.py文件代码就会执行

  1.2、若包里没有__init__.py文件,则其他模块导入此包(说的是只导入包,不是模块,即在其他包的模块文件中只导入包名(不导模块名也可以使用模块))时:

    python2导入失败;python3可以成功导入,但是使用包中模块时会报错

    接下来可以在包里创建一个__init__.py文件,创建后:python2导入成功,但模块不能使用;python3可以成功导入,但模块不能使用(__init__.py在python3中没有意义,删掉也没问题)

    第三步,若要使用包中的模块,python2中需要在__init__.py文件里写入导入的模块名:import 模块名;python3中用python2的方式不能解决问题,需要这样:from . import 模块名(.点表示的是当前路径)

2、使用包里的模块

  包里的模块导入:import 包名.模块名 as 别名

  包名:package_test,包里文件:__init__.py(空) 、test_1.py

  test_1.py内容

def func():
    print(测试包 test_1)

在另外的包有个test.py模块,在此模块调用package_test/test_1.py

import package_test.test_1 as test
test.func()

==============================================
运行结果:
测试包 test_1

3、__all__

  在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import *时导入的模块

  __all__也属于模块中的变量,如果一个模块用了__all__ = [‘变量1‘,‘变量2‘.....],且另外一个模块导入该模块的方式是:from 包名 import *
  那么只有在__all__的列表中的字符串(变量)才可以在其他模块使用

  例:

  test.py

# 条件 其他模块必须是通过from 模块名 import * 方式导入的模块
__all__ = ["name",add2num]

name = "加法运算"

def add2num(a, b):
    return a + b

def delnum(a,b):
    return a - b

  ceshi.py

from test import *
# 可以正常调用
print(name)
print(add2num(33,8))

# 调用delnum函数失败
f = delnum(33,2)
print(f)

======================================
报错信息:NameError: name ‘test‘ is not defined

 

以上是关于python 3 基础之包的主要内容,如果未能解决你的问题,请参考以下文章

Go语言基础之包的概念

Go语言基础之包

Go语言基础之包

Go语言基础之包

10.Go语言基础之包

go语言基础之包和自定义包与main包