Python模块和包

一、Python模块

Python 提供了强大的模块支持,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。通过这些强大的模块可以极大地提高开发者的开发效率。

1、什么是模块

模块(Modules),可以理解为是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个文件中,其后缀名是.py。并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突。

可以用一句话总结:模块就是 Python 程序。

模块不仅可以提高代码的可维护性,还可以提高代码的可重用性。

2、import用法

使用 Python 源文件,只需在另一个源文件里执行 import 语句。当 Python解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

2.1 import 模块名 as 别名

基本语法如下:

import 模块名1 [as 别名1], 模块名2 [as 别名2],…

该方式会导入指定模块中的所有成员(包括变量、函数、类等)。不仅如此,当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。

示例代码如下:

# 导入sys、os两个模块,并为sys指定别名s

# import sys as s, os
import os
import sys as s

# 使用模块别名作为前缀来访问模块中的成员
print(s.argv[0])
print(os.sep)

在这里插入图片描述

2.2 from 模块名 import 成员名 as 别名

基本语法如下:

from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…

该方式只会导入模块中指定的成员,而不是全部成员。同时,当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。

示例代码如下:

# 导入sys模块的argv,winver成员
from sys import argv, winver

# 使用导入成员的语法,直接使用成员名访问
print(argv[0])
print(winver)

2.3 from 模块名 import * 语句

基本语法如下:

from 模块名 import *

该方式把一个模块的所有内容全都导入到当前的命名空间也。但此方式不推荐使用。

# 导入sys 棋块内的所有成员
from sys import *

# 使用导入成员的语法,直接使用成员的别名访问
print(argv[0])
print(winver)

3、自定义模块

Python 模块就是 Python 程序,我们把代码编写在一个文件中,其后缀名是.py。就搞定了。

我们创建 MyMod1.py 文件,在里面放置了变量、函数以及一个类,该文件就可以作为一个模板。

示例代码如下:

"""
MyMod1 模块中包含以下内容:
name 变量:初始值为None
age变量:初始值为 0
函数:包括 speak() 和 say() 
Class1类:包含 name 和 age 属性和 say() 方法。
"""

# 变量
name = None
age = 0

# 函数
def speak():
    print("%s 说: 我 %d 岁。" % (name, age))

def say():
    print("人生苦短,我学Python!")

# 类
class Class1:
    name = "赵云"
    age = 0

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say(self):
        print("%s 说: 我 %d 岁。" % (self.name, self.age))


# 测试代码
say()
speak()
print("---------")
obj = Class1("赵子龙", 18)
obj.say()
print("---------")
say()
speak()

在这里插入图片描述

自定义模块编写说明文档:

为自定义模块添加说明文档,和函数或类的添加方法相同,即只需在模块开头的位置定义一个字符串即可。
可以通过模板的 __doc__ 属性,来访问模板的说明文档。

在 test.py 文件中,查看 MyMod1的文档。

import MyMod1

print(MyMod1.__doc__)

在这里插入图片描述

4、__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行

说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。

在 MyMod1.py 模块中添加下面代码:

if __name__ == '__main__':
   print('程序自身在运行')
   speak()
else:
   print('我来自另一模块')

在这里插入图片描述
执行 test.py 文件:

在这里插入图片描述

5、__all__变量

模块提供的 __all__ 变量,该变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称。即其他文件只能导入该变量指定的成员,未指定的成员是无法导入的。

注意__all__ 变量仅限于在其它文件中以“from 模块名 import *”的方式引入。否则该变量是无效的。

在 MyMod1.py 模块中添加下面代码:

__all__ = ["speak", "Class1"]

执行 test.py 文件:

在这里插入图片描述

二、包

1、创建包

包是一个包含多个模块的文件夹,它的本质依然是模块,只不过在该文件夹下存在一个名为“init.py” 的文件。

注意:

  • 每个包的目录下都必须建立一个 __init__.py 的模块,可以是一个空模块,可以写一些初始化代码,其作用就是告诉 Python 要将该目录当成包来处理。

在 dir4的文件夹中,新建一个__init__.py的模块。那么 dir4就是一个包了(使用IDEA 创建包的话,会自动创创建该文件)。

在这里插入图片描述

2、包的导入

包其实本质上还是模块,因此导入模块的语法同样也适用于导入包。

2.1 import 包名[.模块名 [as 别名]]

import 包名[.模块名 [as 别名]]

在使用模块中的成员(变量、函数、类)时,需添加“包名.模块名”为前缀。

import dir4.MyMod1

dir4.MyMod1.say()

2.2 from 包名 import 模块名 [as 别名]

from 包名 import 模块名 [as 别名]

在使用其成员时不需要带包名前缀,但需要带模块名前缀。

from dir4 import MyMod1

MyMod1.say()

2.3 from 包名.模块名 import 成员名 [as 别名]

from 包名.模块名 import 成员名 [as 别名]

此语法格式用于向程序中导入“包.模块”中的指定成员(变量、函数或类)。通过该方式导入的变量(函数、类),在使用时可以直接使用变量名(函数名、类名)调用。

from dir4.MyMod1 import Class1

obj = Class1("赵子龙", 18)
obj.say()

3、__file__ 属性

通过 __file__ 属性查找该模块(或包)文件所在的绝对路径(输出它的 init.py 文件的存储路径)。

import dir4.MyMod1

print(dir4.__file__) # D:\JQWS\PythonWS\demo1\dir4\__init__.py

三、其他函数

1、dir() 函数

dir() 函数:用来列出某个类或者某个模块中的全部内容,包括变量、方法、函数和类等。

import dir4.MyMod1


print(dir(dir4.MyMod1))
# ['Class1', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'age', 'name', 'say', 'speak']

# print(dir(str))

2、help() 函数

help() 函数:用来查看某个函数或者模块的帮助文档。

print(help(str.lower))

在这里插入图片描述

– 求知若饥,虚心若愚。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值