python笔记--作用域高阶函数闭包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python笔记--作用域高阶函数闭包相关的知识,希望对你有一定的参考价值。
作用域
python中被赋值的变量的位置不同,限制了能访问到变量的范围也不同,换句话说就是“变量的作用域是由其在代码中的位置所决定的”。
1.LEGB规则
L(local):局部作用域,拿两层嵌套函数来说:内层函数定义的变量,其作用域就是局部作用域,只能由内层函数来使用,优先级最高。只有在调用内层函数时才会调用这种局部变量,所以是暂时存在的。 E(enclosing):嵌套作用域,拿两层嵌套函数来说:外层函数定义的变量,其作用域就是嵌套作用域。内外层函数都可以使用这种变量,常用于闭包。 G(globle):全局作用域,定义在函数之外的变量,模块中的函数都可以使用。 B(built-in):内置作用域,系统内置模块中的变量。
2.函数搜索变量范围的优先级是:局部作用域>嵌套作用域>全局作用域>内置作用域
简单举例说明:
#-*- coding:utf-8 -*- a=10 #全局作用域 def test1(): b=20 #嵌套作用域 def test2(): c=30 #局部作用域 return(b-c) print(test2()) test1()
高阶函数
函数作为参数传入的函数就是高阶函数。简单举例说明:
#-*- coding:utf-8 -*- import sys def my_print(): print("this is a test!") def my_confirm(f): confirm=input("是否继续yes/no:") if confirm == 'yes': f() else: print("即将退出!") sys.exit() my_confirm(my_print)
闭包
嵌套作用域的变量被内层函数调用就是闭包,简单举例说明:
#-*- coding:utf-8 -*- def size1(): a=10 #嵌套作用域的变量 def inner1(): if a>5: print("more!") else: print("less!") return inner1 #指向了inner1函数的内存地址 size1()() def size2(a=1): #变量作为外层函数参数传入 def inner2(): if a>5: print("more!") else: print("less!") return inner2 size2(20)()
以上是关于python笔记--作用域高阶函数闭包的主要内容,如果未能解决你的问题,请参考以下文章
Python函数作用域嵌套函数闭包函数高阶函数及装饰器的理解