python 模块和包_python模块和包

一. 模块

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

模块能定义函数,类和变量,模块里也能包含可执行的代码。

二. 导入模块

1. 语法:

import模块名from 模块名 import功能名from 模块名 import *

import模块名 as 别名from 模块名 import 功能名 as 别名

注意:这里的import后面的模块名一定是模块的全名(全路径名):即 包名.模块名

2. 示例:

2.1 定义模块:

创建mymodule.py文件,并编写方法sum,定义变量name:

defsum(a, b):return a+b

name= 'mymodule'

2.2 导入模块:

在demo.py 文件中导入并使用sum方法

2.2.1 "import 模块名" 方式导入模块

importmymodule

c= mymodule.sum(1, 2)print(c) #3

说明:

1. 这种方法导入后,会导入模块中所有的内容

2. 功能调用方法:模块名.功能

2.2.2 "from 模块名 import 功能名" 方式导入模块

from mymodule importsum

c= sum(1, 2)print(c) #3

print(name) #NameError: name 'name' is not defined

说明:

1. 导入的时sum这个功能,因此调用时直接使用sum即可,不需要模块名. 的方式调用

2. mymodule模块中定义的其他功能没有导入,不可调用,如上面的name属性。

3. 也可在import后面使用逗号分隔导入多个功能如:

from mymodule importsum, name

c= sum(1, 2)print(c) #3

print(name) #mymodule

4. 如果需要导入模块所有功能,则import后面使用*号实现

from mymodule import *c= sum(1, 2)print(c) #3

print(name) #mymodule

2.2.3 给导入的模块或功能取别名

importmymodule as cal

c= cal.sum(1, 2)print(c) #3

from mymodule importsum as ss

c= ss(1, 2)print(c) #3

说明:取别名后,只能使用别名

三. 自定义模块

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。

创建一个.py的文件,并在文件中定义模块功能,即创建了一个模块,如上面的mymodule就是一个自定义的模块

3.1 模块中的__name__属性

__name__ 默认值为模块名,当前执行的.py文件的__name__的值自动被设置为"__main__"

importmymoduleprint(__name__) #__main__

print(mymodule.__name__) #mymodule

说明

1. 当前执行的文件,此属性值为"__main__",而导入的mymodul模块的此属性值为模块名:mymodule

2. 一般使用这一特点定义测试代码,如在mymodule 中定义测试代码:

defsum(a, b):return a+b

name= 'mymodule'

if __name__ == '__main__':print("测试代码")

3.  如果没有 if __name__ == '__main__': 这行代码,当通过import mymodule方式导入模块时,测试代码会执行,而使用了这个判断后,由于在别的模块导入后,mymodule模块的名称为mymodule,测试代码不会执行

四. 模块定位顺序

当导入一个模块,Python解析器对模块位置的搜索顺序是:

1. 当前目录

2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。

3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

- 注意

- 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用

- `使用from 模块名 import 功能`的时候,如果功能名字重复,调用到的是最后定义或导入的功能。

from mymodule importsumdefsum(a, b):return 100

print(sum(1, 2)) #100

defsum(a, b):return 100

from mymodule importsumprint(sum(1, 2)) #3

说明:

1.总规则:后定义的会覆盖先定义的

2.上面代码中后导入mymodule则sum使用的mymodule中的sum,否则使用的是当前文件的sum

3. import 模块名的时候,不用担心功能名称重复,因为是通过模块名.功能的方式调用。不过要注意模块名与其他变量名称重复

五. `__all__`

如果一个模块文件中有`__all__`变量,当使用`from xxx import *`导入时,只能导入这个列表中的元素。

在mymodule中添加`__all__`属性:

__all__ = ['sum'] #使用字符串,而不是变量

defsum(a, b):return a+b

name= 'mymodule'

导入所有功能并调用:

from mymodule import *

print(sum(1, 2)) #3

print(name) #NameError: name 'name' is not defined

说明:

1. __all__列表中使用字符串,而不是变量

2. 上面的name没有放在all列表中,因此导入全部功能后,不包括name

六. 包

1.包

包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为`__init__.py` 文件,那么这个文件夹就称之为包。

2.新建包

[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。

注意:新建包后,包内部会自动创建`__init__.py`文件,这个文件控制着包的导入行为。

新建包mypackage和包中的模块mymodule1

defprint_m():print("module1...")

3. 在demo.py中导入包中的模块

3.1 包名.模块名 方式导入

语法

import包名.模块名

包名.模块名.目标功能

示例:

importmypackage.mymodule1

mypackage.mymodule1.print_m()#module1...

3.2 from 包名 import * 导入包中的模块

这种方法导入模块,必须在`__init__.py`文件中添加`__all__ = []`,控制允许导入的模块列表。如果列表为空,则无法导入任何模块

示例:

不在__init__.py中添加__all__列表时:

from mypackage import *mymodule1.print_m()#NameError: name 'mymodule1' is not defined

添加__all__列表并指定可导入模块:

__all__ = ["mymodule1"]

再次执行:

from mypackage import *mymodule1.print_m()#module1...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

傲世少年

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值