本篇讲述Python包、模块和函数和变量的引入,持续更新
写代码要注意高性能、封装性(可复用)和抽象

包和子包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
在文件夹下添加一个特殊文件init.py(也是一个模块,内容可以为空),可以让一个普通文件编程一个包。
init的模块名直接就叫seven(上级包名),当导入一个包或一个包里边的变量的时候,这个文件会自动被执行,可以进行一些初始化
init.py的作用,指定要导入的模块和库,然后每个模块里引入包,包默认执行init,就可以直接使用里边的方法和变量了
__all__ = ['c7']
模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块让你能够有逻辑地组织你的 Python 代码段,把相关的代码放到一个模块mysql.py
,可以让代码更易管理。
def mysql_connector(sql):
'''
mysql连接器
'''
db = pymysql.connect(
host="127.0.0.1",
user='dev',
password='@python',
database='demo',
port=3306
)
cursor = db.cursor()
limit = cursor.execute(sql)
db.close()
results = cursor.fetchmany(limit)
return results
命名空间和作用域
每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样
Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。所以要给函数内的全局变量赋值,必须使用 global 语句。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
money = 100
def add_money():
# 想改正代码就取消以下注释:
# global money
money += 1
print(money)
add_money()
print(money)
import 语句
导入一个模块,相当于导入的是一个文件夹,是个相对路径
。使用的时候,先导入再调用,采用模块.函数
import c7
print(c7.a)
as 别名,简化调用
import t.c7 as m
# 在调用模块中的函数时
print(m.a)
运行完执行生成一个缓存文件__pycache__
(Python生成的字节码文件)
导入t包c7下的所有变量和函数(比较冗余)
from … import 语句
from 语句让你从模块中导入一个指定的部分到当前命名空间中,比如变量和函数。
导入了一个模块中的一个函数,相当于导入的是一个文件夹中的文件,是个绝对路径
,使用时候直接用函数名或变量名
即可。
__all_ = ['a', 'c']
a = 2
c = 3
模块内置变量,all 可以指定*导入时所引入的变量
# \可以换行
from c9 import a,b\
c
print(a)
# 括号也可以
from c9 import (a,b,
c)
print(a)
from … import * 语句
把一个模块中所有函数都导入进来,相当于导入的是一个文件夹中所有文件,所有函数都是绝对路径
,使用时候直接用函数名或变量名
即可。
from t.c7 import *
print(a)
print(b)
注意事项
包和模块是不会被重复导入的,避免循环导入
p1 中引入p2模块,p2中引入P1,就属于直接循环引入,会报错
p1 引入p2模块中的变量,p2引入p3, p3引入p1,属于间接循环引入,同样报错
如果单个模块中没有问题,可以考虑是否是引入链有问题
p1中引入P2, 就会执行被导入的p2中的代码
网友评论