Python 模块

Python模块是包含Python对象定义和代码的.py文件,用于组织代码。导入模块使用import或from...import语句。命名空间分为局部和全局,全局变量需用global声明。包是分层目录结构,__init__.py标识其为模块。__all__列表决定from...import*时导入哪些成员。
摘要由CSDN通过智能技术生成

目录

1.模块导入语言 

1.1 import 语句 

 1.2 from…import 语句​编辑

 2. 搜索路径

3.命名空间和作用域 

4.globals() 和 locals() 函数 

5.reload() 函数 

6.Python中的包 

 7.自定义模块及其调用

7.1 创建模块及__init__.py初始化文件

7.2 __init__.py的参数__all__

7.3 调用模块时使用相对路径或绝对路径的问题


该学习笔记以菜鸟教程为骨架展开。 

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。

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

1.模块导入语言 

1.1 import 语句 

 1.2 from…import 语句

 2. 搜索路径

3.命名空间和作用域 

        变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。

        一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。

        Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。因此,如果要给函数内的全局变量赋值,必须使用 global 语句。

global VarName 的表达式会告诉 Python, VarName 是一个全局变量,这样 Python 就不会在局部命名空间里寻找这个变量了。

例如,我们在全局命名空间里定义一个变量 Money。我们再在函数内给变量 Money 赋值,然后 Python 会假定 Money 是一个局部变量。然而,我们并没有在访问前声明一个局部变量 Money,结果就是会出现一个 UnboundLocalError 的错误。取消 global 语句前的注释符就能解决这个问题。

4.globals() 和 locals() 函数 

 

5.reload() 函数 

6.Python中的包 

包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。

考虑一个在 package_runoob 目录下的 runoob1.py、runoob2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下:

 

 7.自定义模块及其调用

7.1 创建模块及__init__.py初始化文件

在上一节中,菜鸟教程简单地告诉我们“模块,其实就是一个存在 __init__.py 文件的文件夹”,所以我们要定义一个模块,首先就是新建一个文件夹,然后再创建一个__init__.py文件。

提示:__init__.py文件是两个_下划线 

__init__.py文件的作用: 

当我们想要调用某个文件夹中的某个.py文件中的某个函数或类时,就需要__init__.py文件来告诉解释器,这文件夹是一个模块。如果没有添加,将无法导入这个模块(甚至不是一个模块)就会报错。创建了这个文件后,当导入这个文件夹中的模块时,都会先导入__init__.py中的内容及库。__init__.py文件也可以保持为空,这并不影响导入模块。

        也就是说,如果你仅仅只是编写一个python程序,那么这个__init__.py可有可无,但是你要是想写一个包想写一个模块,想让这个包在别的程序中可以调用,那么这个文件一定要有,里面可以空着什么都不写,但是一定要有。

7.2 __init__.py的参数__all__

__all__参数的作用是,当我们使用 from AAA import * 导入模块时,按正常的逻辑是可以导入AAA模块中的所有.py文件,但如果在__init__.py文件写入如下:(假设AAA文件夹下有一个Hello.py文件)

__all__=["Hello"]
# Hello 代表同文件夹中的Hello.py文件

那么我们在使用 from AAA import * 调用AAA文件夹(这个模块) 时,导入的就是除了Hello.py以外的所有.py文件。

        所以说,__init__.py文件中的__all__参数可以指定用户导入所有模块时,可以导入那些模块,不可以导入那些模块。

7.3 调用模块时使用相对路径或绝对路径的问题

相对路径与绝对路径问题看这篇文章 。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Top Secret

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值