标签:img ecs port 封装 pre set wrapper image 图片
一、作用域
Python 的作用域分四种情况:
L:local,局部作用域,即函数中定义的变量;
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:globa,全局变量,就是模块级别定义的变量;
B:built-in,系统固定模块里面的变量,比如int, bytearray等。
搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域
实例:
def out():
name = ‘Ami‘
def inner():
name = ‘Amily‘
print(name)
inner()
print(name)
out()
#内嵌函数作用域由内而外查找
输出结果:
可以看到内嵌函数可以访问外部函数定义的作用域中的变量,事实上内嵌函数解析名称时首先检查局部作用域,
然后从最内层调用函数的作用域开始,搜索所有调用函数的作用域,它们包含非局部但也非全局的命名。
二、装饰器
装饰器的本质还是一个函数,在不改变函数调用方式的情况下,对函数进行额外功能的封装
装饰一个函数,给它加一个其他功能
常见实例:给函数加上时间
import time
import random
def cal_time(func):#定义一个计时器,传入一个函数,并返回另一个附加了计时功能的方法
def wrapper(*args, **kwargs):#定义一个内嵌的包装函数,给传入的函数加上计时功能的包装
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print("%s running time: %s secs." % (func.__name__, t2 - t1))
return result
return wrapper # 将包装后的函数返回
@cal_time #@cal_time == cal_time(bin_search)
def bin_search(data_set, val):
low = 0
high = len(data_set) - 1
while low <= high:
mid = (low+high)//2
if data_set[mid] == val:
return mid
elif data_set[mid] < val:
low = mid + 1
else:
high = mid - 1
return
函数调用:
data = list(range(100000000))
print(bin_search(data, 173320))
标签:img ecs port 封装 pre set wrapper image 图片
原文地址:https://www.cnblogs.com/chendai21/p/8863624.html