python嵌套函数

本文探讨了Python中函数作为可执行对象的基础概念,通过实例解析函数嵌套和作用域规则,并展示了如何返回内层函数和处理全局/局部变量。重点讲解了函数对象的返回、作用域在嵌套中的影响以及实际应用场景,如ord函数和自定义函数的组合使用。
摘要由CSDN通过智能技术生成

函数也是一个可执行对象

函数也是可执行对象这一点是理解python嵌套函数最基础的一点。 举个例子

def bar():
	print('i am bar ')

def foo(f):
	f()

bar()
foo(bar)
-----------
i am bar 
i am bar 

总结一下,就是说,函数也是一个对象。我们在定义一个函数的时候,他的参数可以引用任何一个对象。也就说明,可以引用一个函数了。
他的大体框架如下:

def opt_seq(func,seq):
	r = [func(i) for i in seq]
	return r
	##func 指的是可以使用的函数
print(opt_seq(ord,'python'))
-----------
[112, 121, 116, 104, 111, 110]

就如ord函数这样,可以直接在函数里对python进行取ascii码。那么证明了函数中嵌套python自带函数是可行的。那如果我们自己再嵌套一个自建函数呢?外面的函数被执行,里面的函数是不是也自动被执行呢?

def foo():
	def bar():
		print('i am bar')
	print('i am foo')

foo()
----------
i am foo

上面是一个简单的嵌套,也很容易就可以看出,嵌套函数是可行的(因为没有报错);但是为什么没写bar()呢?因为它报错了
在调用的时候错了
也就是我们在调用嵌套内层的函数时,发现并没有它。那在里面写了,我们想从外面得到这个函数,应该怎么办呢?

def foo():
	def bar():
		print('i am bar')
	return bar

a = foo()
a()
----------
i am bar

之前说了,这个bar()函数也是一个对象,那既然是一个对象,我们就把它return的方式来返回。返回到调用foo这个函数所在的位置,记住这个时候它作为对象已经替代了foo了。
那为什么直接引用bar()不行呢?这个时候就要讲到另外一个概念,作用域。

作用域

一个标识符的可见范围,这就是标识符的作用域。一般常说的是变量的作用域
全局作用域(global):在整个程序运行环境中都可见
局部作用域:在函数、类等内部可见;局部变量使用范围不能超过其所在的局部作用域

举个例子

a=1
def f2():
	print(a+1)
f2()
----------
2
****************************************
a=1
def f3():
	a = a + 1
	print(a)
f3()
----------
UnboundLocalError: local variable 'a' referenced before assignment

为什么第二种稍微修改就报错呢?
那是因为函数里的a只是f3里面的一个局部变量,而我们想要的a是外面的那个全局变量
这个时候我们用global来定义(多层嵌套共用内部的变量的话,用nonlocal),把里面的a变成全局变量,那就可以了

a=1
def f3():
	global a 
	a = a + 1
	print(a)
f3()
----------
2
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值