python闭包详解

2020-03-01  本文已影响0人  阿飞666666

(一)了解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')()

上一篇 下一篇

猜你喜欢

热点阅读