import
语法:
import 模块名
import 模块名 as 别名
作用:将某模块整体导入到当前模块中 使用:模块名.成员
from import
语法:from 模块名 import 成员名 [as 别名1]
作用:将模块内的一个或多个成员导入到当前模块的作用域中。 from import *
模块变量
_all_变量:定义可导出成员,仅对from xx import *语句有效。
_doc_变量:文档字符串。
_file_变量:模块对应的文件路径名。
_name_变量:模块自身名字,可以判断是否为主模块。
当此模块作为主模块(第一个运行的模块)运行时,_name_绑定'_main_',不是主模块,而是被其它模块导入时,存储模块名。
在模块导入时,模块的所有语句会执行。
如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。
将模块以文件夹的形式进行分组管理。
让一些相关的模块组织在一起,使逻辑结构更加清晰。
import 包名 [as 包别名] 需要设置__all__
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 成员名 [as 属性新名]
# 导入包内的所有子包和模块
from 包名 import *
from 包名.模块名 import *
sys.path 提供的路径
是包内必须存在的文件
会在包加载时被自动调用
记录from 包 import * 语句需要导入的模块
案例:
my_ project /
main.py
common/
_init_.py
double_list_helper.py
list_helper.py
skill_system/
_init_.py
skill_deployer.py
skill_manager.py
练习:
要求:在所有的调用过程中,要包含函数、类、实例方法、静态方法。
14:45
-- 名称异常(NameError):变量未定义。
-- 类型异常(TypeError):不同类型数据进行运算。
-- 索引异常(IndexError):超出索引范围。
-- 属性异常(AttributeError):对象没有对应名称的属性。
-- 键异常(KeyError):没有对应名称的键。
-- 为实现异常(NotImplementedError):尚未实现的方法。
-- 异常基类Exception。
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
处理语句1
except 错误类型2 [as 变量2]:
处理语句2
except Exception [as 变量3]:
不是以上错误类型的处理语句
else:
未发生异常的语句
finally:
无论是否发生异常的语句
as 子句是用于绑定错误对象的变量,可以省略
except子句可以有一个或多个,用来捕获某种类型的错误。
else子句最多只能有一个。
finally子句最多只能有一个,如果没有except子句,必须存在。
如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。
class 类名Error(Exception):
def _init_(self,参数):
super()._init_(参数)
self.数据 = 参数
try:
….
raise 自定义异常类名(参数)
….
except 定义异常类 as 变量名:
变量名.数据
每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。例如:循环获取容器中的元素。
-- 创建:
class 可迭代对象名称:
def _iter_(self):
return 迭代器
-- 使用:
for 变量名 in 可迭代对象:
语句
迭代器 = 可迭代对象._iter_()
while True:
try:
print(迭代器._next_())
except StopIteration:
break
class 迭代器类名:
def _init_(self, 聚合对象):
self.聚合对象= 聚合对象
def _next_(self):
if 没有元素:
raise StopIteration
return 聚合对象元素
-- 聚合对象通常是容器对象。
4. 作用:使用者只需通过一种方式,便可简洁明了的获取聚合对象中各个元素,而又无需了解其内部结构。
-- 创建:
def 函数名():
…
yield 数据
…
-- 调用:
for 变量名 in 函数名():
语句
-- 调用生成器函数将返回一个生成器对象,不执行函数体。
-- yield翻译为”产生”或”生成”
-- 将yield关键字以前的代码放在next方法中。
-- 将yield关键字后面的数据作为next方法的返回值。
for 变量 in enumerate(可迭代对象):
语句
for 索引, 元素in enumerate(可迭代对象):
语句
for item in zip(可迭代对象1, 可迭代对象2….):
语句
1. 定义:用一系列函数解决问题。
-- 函数可以赋值给变量,赋值后变量绑定函数。
-- 允许将函数作为参数传入另一个函数。
-- 允许函数返回一个函数。
2. 高阶函数:将函数作为参数或返回值的函数。
将核心逻辑传入方法体,使该方法的适用性更广,体现了面向对象的开闭原则。
随时创建和销毁,减少程序耦合度。
-- 定义:
变量 = lambda 形参: 方法体
-- 调用:
变量(实参)
-- 形参没有可以不填
-- 方法体只能有一条语句,且不支持赋值语句。
逻辑连续,当内部函数被调用时,不脱离当前的逻辑。
-- 必须有一个内嵌函数。
-- 内嵌函数必须引用外部函数中变量。
-- 外部函数返回值必须是内嵌函数。
-- 定义:
def 外部函数名(参数):
外部变量
def 内部函数名(参数):
使用外部变量
return 内部函数名
-- 调用:
变量 = 外部函数名(参数)
变量(参数)
def 函数装饰器名称(func):
def 内嵌函数(*args, **kwargs):
需要添加的新功能
return func(*args, **kwargs)
return wrapper
@ 函数装饰器名称
def 原函数名称(参数):
函数体
原函数(参数)
原函数名称 = 函数装饰器名称(原函数名称)
一个函数可以被多个装饰器修饰,执行顺序为从近到远。
本文作者:赵耀伟
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!