python变量作用域图解_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)()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值