在python中函数可以嵌套定义吗,python嵌套语句
本文主要介绍python中的函数嵌套和嵌套调用方法,具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。
00-1010嵌套函数和嵌套调用函数嵌套调用函数在函数中定义函数。要在函数中调用函数,可以引用外部变量并尝试修改它们。关于如何修改外部变量的值的说明。
目录
函数嵌套和嵌套调用
函数的嵌套:函数中也有函数。它分为外部功能和内部功能。
嵌套函数服务于函数内部,比如减少代码重复。如果你想调用一个函数,你应该使用函数名,内部函数也是如此。如果在没有函数名的情况下调用内部函数,内部函数将永远不会被执行。
内函数的调用
如何在函数外调用内部函数?首先,不能直接调用内层函数,需要先执行外层函数的代码块。
定义函数1():
打印(“这是一个外部函数”)
定义函数2():
打印(“这是一个固有函数”)
函数2()
Python不执行外层函数内部的代码块就找不到内层函数,所以没有定义名字‘func2’,也没有定义函数func 2()。
调用内部函数有几种方法。
1.在外部函数内部调用内部函数,也就是用函数名调用。
定义函数1():
打印(“这是一个外部函数”)
定义函数2():
打印(“这是一个固有函数”)
Func2() #函数名调用内部函数
func1()
这样,调用外部函数也会执行内部函数的代码块。
2.可以用return调用内部函数
在使用return之前,需要说明一下:我们都是使用函数名()来调用函数,单独使用函数名就可以得到函数的内存地址;(在函数名后面加括号告诉python参数对不对,然后执行函数的代码块。)
“返回函数名()”调用内部函数def func1():
打印(“这是一个外部函数”)
定义函数2():
打印(“这是一个固有函数”)
返回函数2()
func1()
该函数没有返回值,即返回值为none。Return func2()和 func2()具有相同的效果。
定义函数1():
打印(“这是一个外部函数”)
定义函数2():
打印(“这是一个固有函数”)
返回函数2()
M=func1() #调用func1(),调用func2的方法
Print(m) #m是无
外层函数里面的‘返回函数名’也可以调用内层函数,但是调用外层函数的时候要加一个括号def func1():
打印(“这是一个外部函数”)
定义函数2():
打印(“这是一个固有函数”)
返回功能2
m=func1()
打印(m)
#
#执行结果是
这是一个外部函数。
0x0000000002EB6620处的函数func1.locals.func2
正如您在上面看到的,使用函数名可以获得函数的地址。我们可以用一个变量指向这个地址,相当于创建了一个指向函数地址的变量。因为只有函数名不能调用函数的方法,所以调用外层函数时要用双括号。
定义函数1():
打印(“这是一个外部函数”)
定义函数2():
打印(“这是一个固有函数”)
返回功能2
Func1()() ##执行Func1()将返回func2
然后再func2()
# m = func1()
# m()
我们可以用func1()返回一个函数func2,再加一个括号调用内函数的方法。
小结:想要调用内函数,首先要调用外函数,即执行外函数的代码块,才有内函数调用的环境。在外函数内部,可以用函数名调用内函数。也可以用return调用内函数,如果return是函数本身的地址,调用外函数时会用到双括号,先调用func1()得到func2然后再func2()。如果return func2(),那么和func2()是一样的,都是告诉python调用内函数。
变量的作用范围
外函数里面的变量和内函数里面的变量是有区别的,作用范围不一样。内函数也可以使用外函数的变量,但是如果想要在内部函数修改外部函数变量的值,就要使用关键字nonlocal
def func1():b = 2
def func2():
nonlocal b
b = b - 1
func2()
print(b)
函数的嵌套调用
在一个函数里面调用别的函数
def print1():print("这是第一个函数")
def print2():
print("这是定义的第二个函数")
print1() #在print2()中调用print1()
print2()
函数中定义函数
在函数内部定义的函数要在函数内部调用
def paint():print("paint")
def paintA():
print("paintA")
paintA()
paint()
//输出如下:
//paint
//paintA
在函数外部调用函数的结果如下
paintA //试图在函数外部调用paintA()
//以下是报错信息
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-15-1a59d6e3eeb5> in <module>()
5 paintA()
6 paint()
----> 7 paintANameError: name 'paintA' is not defined
函数内的函数可以引用外部变量
但是不可以对其进行修改
a=6def FuncX(x):
def FuncY(y):
return a*y
// return x*y,这里也可以写这条语句进行测试,因为对于FuncY()来说,x也算外部变量,我这里主要是为了突出外部变量这个概念
return FuncY
FuncX(5)(6)//把5赋给x,6赋给y
//输出结果如下:
36
试图对外部变量进行修改
a=6def FuncX(x):
def FuncY(y):
#global a 加上这条语句即可修改a的值
a=a*y
return a #试图修改 a 的值
#return a=a*y Python不允许返回赋值表达式,并不是因为修改a的原因,这里更新一下
#更新时间 2019.1.4
return FuncY
FuncX(5)(6)
//报错信息
UnboundLocalError: local variable a referenced before assignment
函数怎么修改外部变量的值的说明
对于全局变量的修改,如果全局变量是int或者str,那么如果想要在函数中对函数变量进行修改,则需要先在函数内,声明其为global或nonlocal,在进行修改, 如果是list或者dict则可以直接修改
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。