python闭包详解
(一)了解python装饰器之前我们可以先了解什么闭包
闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。简单的来说就是如果在一个函数中,定义了另外一个函数,并且那个函数使用了外部函数的变量,且外面那个函数返回了里面那个函数的引用,那么称里面的那个函数为闭包。
例如:
def bibao(name):
print('haha')
def say_hello():
print("hello my name is %s" %name)
return say_hello
a = bibao("lufei")
a()
得出来的结果为:haha hello my name is lufei
(二)利用python闭包知识进行加,减,乘,除计算
def calculator(option):
if option ==1:
def add(x,y):
return x+y
return add
elif option ==2:
def minus(x,y):
return x-y
return minus
elif option ==3:
def multiply(x,y):
return x*y
return multiply
elif option ==4:
def divide(x,y):
return x/y
return divide
else:
print("输入方式有误")
return None
add = calculator(1)
ret=add(2,5)
print(ret)
(三)Python中关键字global与nonlocal的区别
第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)
下面是python关键字global的例子
num=[1,2,3,4,5]
def add():
global num
num.append(6)
print(num)
add()
下面是python关键字nonlocal的例子
def bibao(name):
def say_hello():
nonlocal name
name +='ai'
print("hello my name is %s" %name)
return say_hello
a = bibao('xiao')
a()
bibao('xiao12')()