python-程序结构

1 程序结构

1.1 模块 Module

1.1.1 定义

包含一系列数据、函数、类的文件,通常以.py结尾。

1.1.2 作用

让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰。 有利于多人合作开发。

1.1.3 导入

1.1.3.1 import

(1) 语法:
import 模块名
import 模块名 as 别名

(2) 作用:将模块整体导入到当前模块中

(3) 使用:模块名.成员

1.1.3.2 from import

(1) 语法:

from 模块名 import 成员名

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

(2) 作用:将模块内的成员导入到当前模块作用域中

(3) 使用:直接使用成员名

python 复制代码
	"""
module01.py
"""

def func01():
print("module01 - func01执行喽")


def func02():
print("module01 - func02执行喽")

# 导入方式1:import 模块名 # 使用:模块名 .成员
# 原理:创建变量名记录文件地址 ,使用时通过变量名访问文件中成员
 # 备注:"我过去"
# 适用性:适合面向过程(全局变量、函数)
import module01 7
module01.func01() 9
# 导入方式2.1:from 文件名 import 成员 11  # 使用:直接使用成员
 # 原理:将模块的成员加入到当前模块作用域中 13  # 备注:"你过来"
 # 注意:命名冲突
 # 适用性:适合面向对象(类) 16
 from module01 import func01 18
  def func01():
      print("demo01 - func01") 21
 func01() # 调用的是自己的func01 23

 # 导入方式2.2:from 文件名 import *
 from module01 import * 27
  func01()
 func02()

1.1.4 模块变量

__doc__变量:文档字符串。

name 变量:模块自身名字,可以判断是否为主模块。

当此模块作为主模块(第一个运行的模块)运行时, name绑定'main' ,不是主模块,而是被其它模块 导入时,存储模块名。

1.1.5 加载过程

在模块导入时,模块的所有语句会执行。

如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。

1.1.6 分类

(1) 内置模块(builtins),在解析器的内部可以直接使用。

(2) 标准库模块,安装Python时已安装且可直接使用。

(3) 第三方模块(通常为开源),需要自己安装。

(4) 用户自己编写的模块(可以作为其他人的第三方模块)

1.2 包package

1.2.1 定义

将模块以文件夹的形式进行分组管理。

1.2.2 作用

让一些相关的模块组织在一起,使逻辑结构更加清晰。

1.2.3 导入

1.2.3.1 import

(1) 语法: import 包
import 包 as 别名

(2) 作用:将包中__init__模块内整体导入到当前模块中

(3) 使用:包.成员

1.2.3.2 from import

(1) 语法:
from 包 import 成员
from 包 import 成员 as 别名

(2) 作用:将包中__init__模块内的成员导入到当前模块作用域中

(3) 使用:直接使用成员名

(4) 演示:

目录结构:

my_project/ main.py

package01/
init .py

module01.py

python 复制代码
	"""
package01/
module01.py
"""
def func01():
print("func01执行了")

def func02():
print("func02执行了")
python 复制代码
"""
main.py
"""
# 方式1:import 包 as 别名
import package01 as p

p.module01.func01() p.func02()

# 方式2:from 包 import 成员
from package01 import module01,func02

module01.func01() func02()
python 复制代码
"""
package01/
	 init    .py
"""
import package01.module01

from package01.module01 import func01
相关推荐
smj2302_796826521 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
阿正呀2 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
九转成圣2 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
SmartRadio2 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
2501_901200532 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
laowangpython2 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫2 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch2 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI2 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
Brendan_0012 小时前
JavaScript的Stomp.over
开发语言·javascript·ecmascript