强化训练:第八篇
主题
- requirements
- virtualenv 虚拟环境
- 回调函数
- 函数元数据:装饰器保存元数据
1.
想要解决的问题是:
-
如何在创建完整的项目中把所项目所需要的库整理出来?
-
对于某个项目需要的库又如何改进行一次性库的安装?
pip freeze > requirements.txt # 以.txt文件将项目需要的库进行整理
pip install -r requirements.txt # 安装项目需要的库
2.
想要解决的问题是:如何搭建项目需要的独立虚拟环境?
- virtualenv
- 特性:
- 独立于已经安装的python版本进行虚拟环境的配置和库的安装
- 创建指定版本的python虚拟环境
- 需要安装virtualenv
virtualenv filename # 创建虚拟环境文件夹
cd filename
Script\activate # 激活虚拟环境
deactivate
3.
函数也是对象.
可以作为函数的参数进行传递.
回调函数一般用于处理等待后台任务完成后的回调。
def apply_async(func, args, *, callback): # *后是关键字参数
result = func(*args)
callback(result)
def print_result(result):
print("result: {0}".format(result))
def add(x, y):
return x + y
apply_async(add, (2, 3), callback=print_result)
def double(x):
return 2*x
def quaderuple(x):
return 4*x
def getOddnumber(k, *, callback, lastback):
return 1 + callback(k) + lastback(k)
def main():
k = 1
i = getOddnumber(k, callback=double, lastback=quaderuple)
print(i)
j = getOddnumber(k, callback=quaderuple, lastback=double)
print(j)
l = getOddnumber(k, callback=lambda x: x*8, lastback=double)
print(l)
main()
4.
函数元信息指的是函数对象拥有的信息值。
- name
- module
- 属性值
- 文档属性
装饰器一般会被装饰函数的元信息重载为装饰函数的元信息。
如何将函数的元信息进行不更改操作?
def func(a=1, b="name",c=[]):
"""func name"""
return (a, b)
print(func.__name__)
print(func.__doc__)
print(func.__module__)
print(func.__defaults__)
func.__defaults__[2].append(22)
print(func.__defaults__)
print(func.__dict__)
def func_one(a: int, b: int) -> int:
"""func_one name"""
c = 2
return lambda k: pow(a+b+c, k)
pass
print(func_one.__name__)
print(func_one.__module__)
print(func_one.__doc__)
print(func_one.__defaults__)
print(func_one.__dict__)
print(func_one.__closure__)
print(func_one.__annotations__)
from functools import update_wrapper, wraps, WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES
def func_name(func):
@wraps(func)
def wrapper(*args, **kwargs):
"""warpper doc"""
print("wrapper function")
func(*args, **kwargs)
#update_wrapper(wrapper, func)
return wrapper
@func_name
def example():
"""example doc"""
print("example function")
网友评论