Python的包,模块及作用域

简单写写~

工程的组织结构

包 》模块 》类 》函数,变量

包与模块

包从物理意义上来说就是文件夹(文件夹下面需要包含__init__.py)

模块就是.py文件

导入模块

相对应的目录结构~就不贴图了

1
2
3
4
5
6
# python文件夹下demo.py文件
# 模块的内置属性(这个是只对外导出提供A,B)
__all__=['A','B']
A = 1
B = 2
C = 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# import python.dome as ti
# print(ti.A)

# from python.dome import A
# print(A)

# from python import dome
# print(dome.A)

from python.dome import *
print(A)
print(B)
print(C)

# 一行无法写下代码的方式~ 不过一行最好不要超过 80个字符
# from python.dome import A,\
# B
# print(B)

# from python.dome import (A,
# B)
# print(B)

__init__.py的使用

每个包文件夹下都有一个__init__.py文件

__init__.py文件

1
2
3
4
5
6
7
8
9
10
11
# 导入包时的必定的首次执行
# a = 'This __init__.py file'
# print(a)

# 控制可以导出的模块
#__all__=['dome1']

# 初始化包
import sys
import datetime
import io

使用文件

1
2
3
4
5
6
7
8
9
10
# 导包必定执行 __init__.py
# import python __init__.py

# 利用__init__.py进行导出包限制
# from python import *
# print(dome1.E)

# 利用__init__.py初始化导包
import python
print(python.sys.path)

包和模块的常见错误

包和模块是不会被重复导入

避免循环导入

导入模块的时候,所导入的模块会执行一遍代码

模块的内置变量

双下划线变量,系统内置

1
2
3
# 打印当前模块的所有变量
infos = dir()
print(infos)

常用的系统内置变量

__name__ 非入口文件:包名+模块名 入口文件:__main__

__package__ 非入口文件:包名 入口文件:无

__doc__ 模块的文档说明

__file__ 入口文件:磁盘上的绝对路径 非入口文件:当前文件名

1
2
3
4
5
6
7
8
9
10
11
# 入口文件
print('name:' + __name__)
print('package:' + (__package__ or '当前模块不属于任何包'))
print('doc:' + (__doc__ or '当前模块无文档注释' ) )
print('file:' + __file__)

>>>
name:__main__
package:当前模块不属于任何包
doc:当前模块无文档注释
file:f:/Python学习/PythonProject/Python3/demo11.py
1
2
3
4
5
6
7
8
9
# 非入口文件
# demo1.py
"""
我是注释
"""
print('name:' + __name__)
print('package:' + (__package__ or '当前模块不属于任何包'))
print('doc:' + (__doc__ or '当前模块无文档注释' ) )
print('file:' + __file__)
1
2
3
4
5
6
7
8
9
10
# 非入口文件
import python.dome1

>>>
name:python.dome1
package:python
doc:
我是注释

file:f:\Python学习\PythonProject\Python3\python\dome1.py

相对导入

相对导入(子模块引入时可用 . .. …) 入口文件不能使用

绝对导入

绝对导入(以入口文件为顶级目录)

变量的作用域

1
2
3
4
a = 2
def temp():
a = 1
print(a)

for循环不算单独的作用域

1
2
3
4
5
6
7
b = {1,2,3}
def temp2(b):
for c in b:
print(c)
d = 4
print(d)
temp2(b)

global使变量升级为全局变量

1
2
3
4
5
def temp3():
global a
a = 1
temp3()
print(a)