函数作用域和装饰器
1,函数作用域
global:能在函数里修改全局变量的值
a = 100 # 全局变量
def func1():
global a # 修改全局变量
a = 200
print(a)
func1()
print(a)
输出a为200
nonlocal:让嵌套函数能够修改嵌套函数之外的值
def func2():
b = 100
def func3():
nonlocal b # 取b=100
b += b
return b
return fun3()
b = func2()
print(b)
输出200
2,递归
list1 = [[[[[['泥娃娃']]]]]]
print(list1[0][0][0][0][0][0])
输出泥娃娃
def tw(list1):
list1 = list1[0]
if list1[0] == '泥娃娃':
print('找到你啦,%s'% list1[0])
else:
tw(list1)
tw(list1 )
输出 找到你啦,泥娃娃
阶乘
def jiecheng(n):
if n>1:
return n*jiecheng(n-1)
else:
return 1
print(jiecheng(5))
3,闭包
闭包是函数里面嵌套函数,外层函数返回了内层函数的函数体
内部函数调用外部函数的变量,外函数返回内函数的引用
def func4():
def func5():
print('嵌套的函数')
return func5
a = func4() # a()=func5()
print(a)
加括号就是调用
def func6(x):
def func7():
return 'hello'+x
return func7
print(func6('world')())
4,装饰器
用于拓展原来函数功能的一种函数,特殊之处在于他的返回值也是一个函数
好处在于不用更改原函数代码的前提下给函数增加新的功能
def func8(func):
def func9():
print('开始语')
func()
print('结尾语')
return func9
@func8
def speak():
print('正文')
#a = func8(speak) # a=func9(),相当于@func8
speak()