oracle leg函数,032-函数的嵌套与LEGB原则
函數(shù)的嵌套
函數(shù)也是可以嵌套的。
也就是可以在一個(gè)函數(shù)內(nèi)部定義和運(yùn)行另一個(gè)函數(shù)。舉個(gè)例子:
>>> def funa():
print('funa()正在被調(diào)用')
def funb():
print('funb()正在被調(diào)用')
funb()
>>> funa()
funa()正在被調(diào)用
funb()正在被調(diào)用
在上述舉例中,我們先定義了一個(gè)函數(shù)funa(),定義的內(nèi)容包括幾個(gè)部分:
打印'funa()正在被調(diào)用'
定義funb()函數(shù)
2.1 funb()的內(nèi)容是打印'funb()正在被調(diào)用'
運(yùn)行funb()函數(shù)
因此,最終執(zhí)行的結(jié)果是:
funa()正在被調(diào)用——對(duì)應(yīng)1
funb()正在被調(diào)用——對(duì)應(yīng)3
注意:在嵌套函數(shù)中,內(nèi)部變量可以引用外部變量,但外部變量不能引用內(nèi)部變量。這就好比國(guó)家的法律在河南省好使,河南省的法規(guī)在洛陽(yáng)市也好使,但洛陽(yáng)市的條例在鄭州就不管用,在北京更不管用。
>>> def funa():
x = 88
def funb():
print(x)
funb()
>>> funa()
88 # 內(nèi)部函數(shù)funb()引用了外部函數(shù)funa()定義的變量x
>>> def funa():
print(y)
def funb():
y = 66
funb()
>>> funa()
Traceback (most recent call last):
File "", line 1, in
funa()
File "", line 2, in funa
print(y)
NameError: name 'y' is not defined # 當(dāng)外部函數(shù)funa()嘗試調(diào)用內(nèi)部函數(shù)funb()的變量y時(shí),系統(tǒng)報(bào)錯(cuò),提示y這個(gè)變量未被定義。
LEGB原則
先看示例:
x = 66
print('x在global中的值是:',x,',id是:',id(x))
def funa():
x = 88
print('x在外層函數(shù)中的值是:',x,',id是:',id(x))
def funb():
x = 99
print('x在內(nèi)層函數(shù)中的值是:',x,',id是:',id(x))
funb()
funa()
----------執(zhí)行結(jié)果如下----------
x在global中的值是: 66 ,id是: 2960384610704
x在外層函數(shù)中的值是: 88 ,id是: 2960384611408
x在內(nèi)層函數(shù)中的值是: 99 ,id是: 2960384611760
我自認(rèn)為我這個(gè)距離比教科書(shū)上的舉例更優(yōu)雅,更完整。(^_^)
總結(jié)
以上是生活随笔為你收集整理的oracle leg函数,032-函数的嵌套与LEGB原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 喝红豆薏米出汗正常吗,注意事项有哪些
- 下一篇: 打什么针可以减肥不反弹