函式的巢狀與global和nonlacal

2022-07-31 02:54:14 字數 2618 閱讀 8756

目錄只要遇見了()就是函式的呼叫. 如果沒有()就不是函式的呼叫

函式的執行順序

def fun1():   

print(111)

def fun2():

print(222)

fun1()

fun2()

print(111)

def fun2():   

print(222)

def fun3():

print(666)

print(444)

fun3()

print(888)

print(33)

fun2()

print(555)

# 函式中套函式

def func():

a = 1

def foo():

b = 2

print(b) # 2

print(a) # 1

def f1():

print(b) # 2

return f1()

return foo()

print(func())

------------------------------------

# 函式巢狀呼叫

def func():

a = 1

foo()

print(a)

def foo():

b = 2

print(b)

func()

-------------------------------------

# 函式巢狀引數的傳遞

def func(a):

foo(a) #10

def foo(e):

b(e) # return 10

def b(c):

print(c)

return 10

print(func(5))

-------------------------------------

# 函式巢狀返回值的傳遞

def func(a):

foo(a) #10

return 10

def foo(e):

b(e)

return 10

def b(c):

print(c)

return 10

print(func(5))

首先我們寫這樣乙個**, 首先在全域性宣告乙個變量, 然後再區域性呼叫這個變量, 並改變這 個變量的值

a = 100

def func():

global a # 加了個global表示不再區域性建立這個變量了. 而是直接使用全域性的a

a = 28

print(a)

func()

print(a)

global表示. 不再使用區域性作用域中的內容了. 而改用全域性作用域中的變量

在函式內部修改全域性的變數,如果全域性中不存在就建立乙個變數

lst = ["麻花藤", "劉嘉玲", "詹姆斯"]

def func():

# 對於可變資料型別可以直接進⾏訪問

print(lst)

func()

print(lst)

nonlocal 只修改上一層變數,如果上一層中沒有變數就往上找一層,只會找到函式的最外層,不會找到全域性進行修改

a = 10

def func1():

a = 20

def func2():

nonlocal a

a = 30

print(a)

func2()

print(a)

func1()

結果:加了nonlocal

3030

不加nonlocal

3020

再看, 如果巢狀了很多層, 會是一種什麼效果:

a = 1

def fun_1():

a = 2

def fun_2():

nonlocal a

a = 3

def fun_3():

a = 4

print(a)

print(a)

fun_3()

print(a)

print(a)

fun_2()

print(a)

print(a)

fun_1()

print(a)

這樣的程式如果能分析明白. 那麼作用域, global, nonlocal就沒問題了

函式中的global和nonlocal

區域性作用域對全域性作用域的變數 此變數只能是不可變的資料型別 只能進行引用,而不能進行改變,只要改變就會報錯,但是有些時候,我們程式中會遇到區域性作用域去改變全域性作用域的一些變數的需求,這怎麼做呢?這就得用到關鍵字global global第乙個功能 在區域性作用域中可以更改全域性作用域的變數。...

php中global與 GLOBAL的用法及區別

php中global 與 globals 差別 原本覺得global和 globals除了寫法不一樣覺得,其他都一樣,可是在實際利用中發現2者的差別還是很大的 先看下面的例子 php 例子1 function test global function test globals var1 5 var2...

函式物件與巢狀

函式物件的四種用法 def func func 函式的記憶體位址 print from func def bar print from bar f bar f from bardef bar print from bar func bar def bar print from bar def foo...