20 求和函数求和:
In [181]: a = [1,4,2,3,1]In [182]: sum(a)Out[182]: 11In [185]: sum(a,10) #求和的初始值为10Out[185]: 21
21 nonlocal用于内嵌函数中关键词nonlocal常用于函数嵌套中,声明变量i为非局部变量;如果不声明,i+=1表明i为函数wrapper内的局部变量,因为在i+=1引用(reference)时,i未被声明,所以会报unreferenced variable的错误 。
def excepter(f):i = 0t1 = time.time()def wrapper():try:f()except Exception as e:nonlocal ii += 1print(f'{e.args[0]}: {i}')t2 = time.time()if i == n:print(f'spending time:{round(t2-t1,2)}')return wrapper
22 global 声明全局变量先回答为什么要有global,一个变量被多个函数引用,想让全局变量被所有函数共享 。有的伙伴可能会想这还不简单,这样写:
i = 5def f():print(i)def g():print(i)passf()g()
f和g两个函数都能共享变量i,程序没有报错,所以他们依然不明白为什么要用global.
但是,如果我想要有个函数对i递增,这样:
def h():i += 1h()
此时执行程序,bang, 出错了!抛出异常:UnboundLocalError,原来编译器在解释i+=1时会把i解析为函数h()内的局部变量,很显然在此函数内,编译器找不到对变量i的定义,所以会报错 。
global就是为解决此问题而被提出,在函数h内,显式地告诉编译器i为全局变量,然后编译器会在函数外面寻找i的定义,执行完i+=1后,i还为全局变量,值加1:
i = 0def h():global ii += 1h()print(i)
23 交换两元素def swap(a, b):return b, aprint(swap(1, 0))# (0,1)
24 操作函数对象In [31]: def f():...:print('i'm f')...:In [32]: def g():...:print('i'm g')...:In [33]: [f,g][1]()i'm g
创建函数对象的list,根据想要调用的index,方便统一调用 。
25 生成逆序序列list(range(10,-1,-1)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
第三个参数为负时,表示从第一个参数开始递减,终止到第二个参数(不包括此边界)
26 函数的五类参数使用例子python五类参数:位置参数,关键字参数,默认参数,可变位置或关键字参数的使用 。
def f(a,*b,c=10,**d):print(f'a:{a},b:{b},c:{c},d:{d}')
推荐阅读
- 充电的次数决定了充电电池的寿命
- 网络面试题你只要知道这12题就够了
- 脚上得了灰指甲怎么办?
- 唐 武则天?武则天都做了一些什么事
- 宋江怒杀阎婆惜后发生了什么?宋江杀了阎婆惜后来怎样了
- AMD|要完美取代Zen 3了!AMD Zen 4全部性能偷跑:整体暴增37%
- 10年慢性尿道炎治好了
- 凤庆滇红茶简介,凤庆滇红茶时间放长了好喝吗
- 老人尿床是怎么回事啊
- SpaceX|被赞“银河系最好Wi-Fi”:地球上开通马斯克星链服务的地方更多了