關於返回函式

2021-07-24 18:02:17 字數 2872 閱讀 1131

def sum(*args):

def he():

s = 0

for i in args:

s = s + i

return s

return he # 返回sum函式內部的函式he(),和def he()的縮排相同

print sum(1,2,3,4)# 返回函式

print sum(123,3,3)()#返回求和的數值

閉包中盡量不要使用迴圈的變數或者後續中會發生變化的變數,如果使用則應該再建立乙個函式,把迴圈的變數繫結

如:

def sum():

l =

for i in range(3):

def f(j):

def g():

return j*j

return g

return l

a1,a2,a3 = sum()

print a1(),a2(),a3()

正確理解匿名函式即lambda 函式和返回函式
def f1(x,y):

return lambda m,n : m + n

s1 = f1(1,2)

s11 = f1() #由於f1(x,y)有x,y兩個引數,所以賦值時需要有兩個引數,在賦值階段即出錯

print s1 # 返回函式

print s1()# 錯誤是lambda 需要兩個引數,即f1(x,y)返回的函式同樣需要兩個引數

print s1(1,3) # 返回函式值4,此時使用(1,3)兩個引數進行計算,即使用lambda 的兩個引數

# 相當於f1(1,2)(1,3),前面的兩個引數是f1(x,y)的引數,後面的兩個引數是lambda的兩個引數。lambda後面的引數也可以改為x,y但是和f1中的

#x,y 是不同的,注意引數的為形參。
def f2():

return lambda x,y : x + y

s2 = f2()

s22 = f2(1,2) # 即 f2() 不需要引數,所以賦值時不能附帶引數

print s2 # 返回引數

print s2(1,3) #返回求和數值4

# 相當於f1(1,2)(1,3),前面的兩個引數是f1(x,y)的引數,後面的兩個引數是lambda的兩個引數。

# 和f1的不同之處在於f1需要兩個引數,而f2不需要引數。f1的兩個引數實際在計算中用不到。lambda後面的引數也可以改為x,y但是和f1中的# x,y 是不同的,注意引數的為形參。

f1和f2的等價形式為:
def 

f1(x,y):

def

g(m,n):

return

m +

nreturn g

def 

f2():

def

g(m,n):

return

m +

nreturn g

def f3(x,y):

return lambda : x + y

s3 = f3(1,2)

# s33 = f3() # f3(x,y)需要兩個引數,此語句在賦值時即出錯

print s3 # 返回函式

print s3(1,3) #由於lambda中沒有引數,即lambda 後面沒有跟變數,所以s3()後面不能跟引數

print s3()# 返回求和的數值3,此時使用的是f3的引數

#由於f3有引數,而lambda沒有引數,所以計算時使用的是f3的引數,即正確的賦值方式為f3(1,3)()

def 

f4():

return lambda : x + y

#這種情況下由於在lambda的定義中沒有引數,即lambda後面沒有跟變數,所以函式編寫錯誤,也不存在賦值的情況
f3 的等價函式為:
def 

f3(x,y):

def

g():

return x + y

return

gprint f(1,2)()

綜上所述,在f和lambda兩個函式中必須有乙個需要賦值變數,如果同時存在,則在計算的時候按照返回函式的引數進行計算;如果返回函式
沒有引數,在按照f所帶的引數帶入到lambda中進行計算,注意此時lambda函式後面表示式的變數要和f中的變數一致

python返回函式 python中返回函式

python的函式不但可以返回int str list dict等資料型別,還可以返回函式!例如,定義乙個函式 f 我們讓它返回乙個函式 g,可以這樣寫 deff print call f 定義函式g defg print call g 返回函式g return g 仔細觀察上面的函式定義,我們在函...

python 返回函式

返回函式 python的函式不但可以返回int str list dict等資料型別,還可以返回函式!例如,定義乙個函式 f 我們讓它返回乙個函式 g,可以這樣寫 deff print call f 定義函式g defg print call g 返回函式g return g仔細觀察上面的函式定義,...

python 返回函式

實現乙個可變引數的求和。通常情況下,求和的函式是這樣定義的 def calc sum args ax 0 for n in args ax ax n return ax但是,如果不需要立刻求和,而是在後面的 中,根據需要再計算怎麼辦?可以不返回求和的結果,而是返回求和的函式 def lazy sum...