Python 强化训练:第八篇

强化训练:第八篇

主题

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

JVM源码分析之synchronized1 字节码实现2 偏向锁

javap命令生成的字节码中包含 ** monitorenter ** 和 ** monitorexit **指令

10030
来自专栏Spring相关

Spring Boot 日志配置

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了...

19260
来自专栏闻道于事

JavaWeb(一)JSP原理,组成

JSP(Java sever pages):一种用于开发动态web页面(资源)的技术。 jsp页面是在服务器上运行的一个页面,一个jsp页面就是一个类。写jsp...

53280
来自专栏程序猿DD

Spring Cloud构建微服务架构:服务网关(过滤器)【Dalston版】

在前两篇文章:服务网关(基础)、服务网关(路由配置)中,我们了解了Spring Cloud Zuul作为网关所具备的最基本功能:路由。本文我们将具体介绍一下Sp...

31750
来自专栏互联网技术栈

使用Hystrix实现自动降级与依赖隔离[微服务]

目前对于一些非核心操作,如增减库存后保存操作日志 发送异步消息时(具体业务流程),一旦出现MQ服务异常时,会导致接口响应超时,因此可以考虑对非核心操作引入服务降...

14420
来自专栏开源优测

[接口测试 - 基础篇] 12 还是要掌握python日志管理模块的

python logging模块介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的...

38380
来自专栏F_Alex

SpringCloud-微服务网关ZUUL(六)

18950
来自专栏烂笔头

Pycharm创建virtualenv方法

目录[-] Python的版本众多,在加上适用不同版本的Python Package。这导致在同时进行几个项目时,对库的依赖存在很大的问题。这个时候就牵涉...

51050
来自专栏Java架构

十年java架构师分享:我是这样手写Spring的

人见人爱的 Spring 已然不仅仅只是一个框架了。如今,Spring 已然成为了一个生态。但深入了解 Spring 的却寥寥无几。这里,我带大家一起来看看,我...

24530
来自专栏Petrichor的专栏

论.idea文件夹是干嘛的

python为什么每次创建的文件目录下都含 .idea/文件夹?该文件夹又是用来干嘛的?

1.5K30

扫码关注云+社区

领取腾讯云代金券