Python 强化训练:第八篇

作者: 谢小路 | 来源:发表于2016-11-10 20:46 被阅读482次

    强化训练:第八篇

    主题

    1. requirements
    2. virtualenv 虚拟环境
    3. 回调函数
    4. 函数元数据:装饰器保存元数据

    1.

    想要解决的问题是:

    1. 如何在创建完整的项目中把所项目所需要的库整理出来?

    2. 对于某个项目需要的库又如何改进行一次性库的安装?

    pip freeze > requirements.txt # 以.txt文件将项目需要的库进行整理
    pip install -r requirements.txt  # 安装项目需要的库
    

    2.

    想要解决的问题是:如何搭建项目需要的独立虚拟环境?

    1. virtualenv
    2. 特性:
      1. 独立于已经安装的python版本进行虚拟环境的配置和库的安装
      2. 创建指定版本的python虚拟环境
    3. 需要安装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.

    函数元信息指的是函数对象拥有的信息值。

    1. name
    2. module
    3. 属性值
    4. 文档属性

    装饰器一般会被装饰函数的元信息重载为装饰函数的元信息。
    如何将函数的元信息进行不更改操作?

    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")
    
    

    相关文章

      网友评论

      • 4d07c27b729e:吐血了,你没放执行结果。关键是倒数第二个。dict不记得是啥了
        4d07c27b729e:@谢小路 也不是,主要是车上没办法做到。
        谢小路:@翟迪_xiao 下回的都带执行结果
        谢小路:@翟迪_xiao 可以copy代码试下呗。

      本文标题:Python 强化训练:第八篇

      本文链接:https://www.haomeiwen.com/subject/qkbxpttx.html