python draw函数怎么使用 drawline函数用法python_作用域


我们可以将函数视为“一等公民”

函数可以赋值给变量
函数可以作为函数的参数
函数可以作为函数的返回值

高阶函数的用法:(filter、map以及它们的替代品)items1 = list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10))))items2 = [x ** 2 for x in range(1, 10) if x % 2]

闭包和作用域问题:
Python搜索变量的LEGB顺序(Local --> Embedded --> Global --> Built-in)
global和nonlocal关键字的作用:
global:声明或定义全局变量(要么直接使用现有的全局作用域的变量,要么定义一个变量放到全局作用域)。
nonlocal:声明使用嵌套作用域的变量(嵌套作用域必须存在该变量,否则报错)。
装饰器函数(使用装饰器和取消装饰器)
例子:输出函数执行时间的装饰器

def record_time(func):"""自定义装饰函数的装饰器"""@wraps(func)def wrapper(*args, **kwargs):start = time()result = func(*args, **kwargs)print(f'{func.__name__}: {time() - start}秒')return resultreturn wrapper如果装饰器不希望跟print函数耦合,可以编写带参数的装饰器。from functools import wrapsfrom time import timedef record(output):"""自定义带参数的装饰器"""def decorate(func):@wraps(func)def wrapper(*args, **kwargs):start = time()result = func(*args, **kwargs)output(func.__name__, time() - start)return resultreturn wrapperreturn decoratefrom functools import wrapsfrom time import timeclass Record():"""自定义装饰器类(通过__call__魔术方法使得对象可以当成函数调用)"""def __init__(self, output):self.output = outputdef __call__(self, func):@wraps(func)def wrapper(*args, **kwargs):start = time()result = func(*args, **kwargs)self.output(func.__name__, time() - start)return resultreturn wrapper说明:由于对带装饰功能的函数添加了@wraps装饰器,可以通过func.__wrapped__方式获得被装饰之前的函数或类来取消装饰器的作用。
例子:用装饰器来实现单例模式。

from functools import wrapsdef singleton(cls):"""装饰类的装饰器"""instances = {}@wraps(cls)def wrapper(*args, **kwargs):if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return wrapper@singletonclass President():"""总统(单例类)"""pass说明:上面的代码中用到了闭包(closure),不知道你是否已经意识到了。还没有一个小问题就是,上面的代码并没有实现线程安全的单例,如果要实现线程安全的单例应该怎么做呢?from functools import wrapsfrom threading import Lockdef singleton(cls):"""线程安全的单例装饰器"""instances = {}locker = Lock()@wraps(cls)def wrapper(*args, **kwargs):if cls not in instances:with locker:if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return wrapper

以上就是本次分享的全部内容了,不知大家对小编讲述的Python函数使用方法感觉怎么样?