Day17 函式的返回值與巢狀函式

2021-09-10 23:09:16 字數 4108 閱讀 7663

1.什麼是返回值

def add(x, y):

print(x, y) #輸出:10 20

return x + y # 返回值, return以後的語句將不會再執行

print(x)

print(y)

add(10,20)

def add(x, y):

print(x, y) # 輸出:1 2

return x + y # 函式體內,碰到return語句,函式執行完畢,之後的語句將不會再執行

return x - y # 不會再次執行

add(1,2)

2.函式的隱式返回和顯示返回

3.函式多值返回

def get_data(x,y,z):

return x + 1, y + 1, z + 1

print(get_data(1,2,3)) # 得到的是乙個元組(2, 3, 4)

def get_data(x,y,z):

return [x + 1, y + 1, z + 1]

print(get_data(1,2,3)) # 得到的是乙個列表[2, 3, 4]

4.什麼是巢狀函式
def outer_function():

# 內部函式

def inner_function():

print("inner_function") # 輸出:inner_function

print("outer_function") # 輸出:outer_function

# 內部呼叫

inner_function()

outer_function()

# 注意:inner_function函式只能在outer_function函式內部呼叫,無法再outer_function函式外部被呼叫

5.函式作用域
def add(x, y):

z = 100

print(x, y , z) #輸出:1 2 100

add(1,2)

print(z) #報錯:nameerror: name 'z' is not defined

z = 100

def add(x, y):

print(x, y, z)# 輸出:1 2 100

add(1, 2)

print(z) # 輸出:100

6.函式的閉包
# 例1

x=5def add():

y = x + 1

print(y) #輸出:6

add()

# 例2

x=5def add():

x = x + 1 # 報錯:local variable 'x' referenced before assignment

add()

# 報錯原因分析:

# 在例1中,函式內部引用的x為函式外部的x, 因此x的值為5

# 在例2中,函式內部重新定義了x的值,那麼整個函式內部都會使用這個內部x,

# 因此在運算x + 1的時候,x還沒有完成定義就被引用了,這裡的x引用的一定是內部正在定義的 x,不是函式外部的 x=5這個x;

# 例3:

x=5def add():

print(x) # 這裡的x引用的是x = 1的x,但是執行print(x)時,x還沒有被定義,所以報錯:local variable 'x' referenced before assignment

x = 1

add()

# 例4:

def outer_function():

x = 100

def inner_function():

print(x) # 內部函式引用了外部函式的自由變數 輸出:100

return inner_function

ret = outer_function()

ret()

7.關鍵字
x=1

def add():

global x # 使用global關鍵字,指定x的引用全域性的x變數

x = x + 1

print(x) #輸出:2

add()

x = 100

def foo():

global x # x被宣告了全域性變數

x = 10

x += 1

print(x) # x的值為11

foo()

print(x) # 輸出x的值為:11,原本這裡應該引用的是全域性變數x = 100 的,因此global關鍵字汙染了全域性變數 x

def outer_function():

x = 100

def inner_function():

x = x + 1 # 這樣會報錯,函式內部重新定義了x的值,但是還沒有完成定義就被引用了

print(x)

return inner_function

ret = outer_function()

ret()

def outer_function():

x = 1

def inner_function():

nonlocal x # 使用nonlocal關鍵字宣告x 為外層函式的x的值

x = x + 1 #所以這裡使用的x 是外層函式的x

print(x) #輸出:2

return inner_function

ret = outer_function()

ret()

8.函式預設值的作用域
def add(lst = ):

print(lst)

add() # 輸出:['hello']

print('id={}'.format(id(add))) # 函式物件的id值不變,呼叫的是同乙個函式 id=1837000

add() # 輸出['hello', 'hello']

print('id={}'.format(id(add))) # 函式物件的id值不變,呼叫的是同乙個函式 id=1837000

# 檢視函式的位置引數的預設值

print(add.__defaults__) #輸出:(['hello', 'hello'],)

# 檢視函式的關鍵字引數的預設值

print(add.__kwdefaults__) #輸出:none

def add(lst = ):

lst = lst[:]

print(lst)

add() # 輸出:['hello']

add() # 輸出:['hello']

def add(lst=none):

if lst is none:

lst =

print(lst)

add() # 輸出:[1]

print(add.__defaults__) # 輸出: (none,)

add([1, 2, 3]) # 輸出: [1, 2, 3, 1]

print(add.__defaults__) # 輸出:(none,)

add([4, 5, 6]) # 輸出:[4, 5, 6, 1]

print(add.__defaults__) # 輸出:(none,)

9.函式銷毀
def add():

print('add')

del add

add()

參考:俠課島(9xkd.com)python同學計畫

then 返回值的深層巢狀

在promise.then 裡面不停地return乙個新的promise,巢狀再巢狀,就這樣不知不覺給自己出了個題目,暈暈,覺得挺好玩地 感興趣地可以看一下 let p2 newpromise resolve,reject then value then r then r err error rea...

day10 函式的返回值

返回值就是從函式內部傳遞到函式外部的資料 預設情況下函式內部產生的新資料,在函式外部不能使用 1 python中每個函式都有返回值,返回值是什麼就看執行函式體的時候遇到的return關鍵字後面的資料是什麼 如果沒有遇到return,返回值就是none 希望作為返回值的資料在函式結束的時候放在retu...

主函式的返回值返回給誰 主函式返回值

responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...