1. 程式人生 > >Python_匿名函數_47

Python_匿名函數_47

log 簡單 mage .cn span 產生 copy func urn

匿名函數

Eva_J

匿名函數:為了解決那些功能很簡單的需求而設計的一句話函數

技術分享圖片
#這段代碼
def calc(n):
    return n**n
print(calc(10))
 
#換成匿名函數
calc = lambda n:n**n
print(calc(10))
技術分享圖片

技術分享圖片

技術分享圖片

上面是我們對calc這個匿名函數的分析,下面給出了一個關於匿名函數格式的說明

函數名 = lambda 參數 :返回值

#參數可以有多個,用逗號隔開
#匿名函數不管邏輯多復雜,只能寫一行,且邏輯執行結束後的內容就是返回值
#返回值和正常的函數一樣可以是任意數據類型

我們可以看出,匿名函數並不是真的不能有名字。

匿名函數的調用和正常的調用也沒有什麽分別。 就是 函數名(參數) 就可以了~~~

請把以下函數變成匿名函數
def add(x,y):
    return x+y

add = lambda x,y:x+y
print(add(1,2))

上面是匿名函數的函數用法。除此之外,匿名函數也不是浪得虛名,它真的可以匿名。在和其他功能函數合作的時候

l=[3,2,100,999,213,1111,31121,333]
print(max(l))


dic={k1:10,k2:100,k3:30} 
print(max(dic)) # k3 #默認取的是key的最大值 dic={k1:10,k2:100,k3:30} def func(key): return dic[key] print(max(dic,key=func)) #根據返回值判斷最大值,返回值最大的那個參數是結果 print(dic[max(dic,key=lambda k:dic[k])])

dic={‘k1‘:10,‘k2‘:100,‘k3‘:30}
def func(key):
return dic[key]
print(max(dic,key=func)) #根據返回值判斷最大值,返回值最大的那個參數是結果

dic={‘k1‘:10,‘k2‘:100,‘k3‘:30}
def func(key):

return max(key)
print(func(dic.values()))
res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
    print(i)

輸出
25
16
res = filter(lambda x:x>10,[5,8,11,9,15])
for i in res:
    print(i)

輸出
15

面試題:

1.下面程序的輸出結果是:
d = lambda p:p*2
t = lambda p:p*3
x = 2
x = d(x)
x = t(x)
x = d(x)
print x

2.現有兩元組((a),(b)),((c),(d)),請使用python中匿名函數生成列表[{a:c},{b:d}]

3.以下代碼的輸出是什麽?請給出答案並解釋。
def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
請修改multipliers的定義來產生期望的結果。

練習
max([1,2,3,4,5,-6,-7],key=abs)

ret = map(abs,[-1,2,-3,4])
for i in ret:
    print(i)

def func(x):
    return x**2
ret = map(func,[-1,2,-3,4])
for i in ret:
    print(i)

ret = map(lambda x:x**2,[-1,2,-3,4])


def func(x):
    return x>10

res = filter(func,[5,8,11,9,15])
for i in res:
    print(i)


# min max filter map sorted —— lambda

面試題:

1.下面程序的輸出結果是:
d = lambda p:p*2
t = lambda p:p*3
x = 2
x = d(x) 
x = t(x)
x = d(x)
print x #24

2.現有兩元組((a),(b)),((c),(d)),請使用python中匿名函數生成列表[{a:c},{b:d}]
ret = zip(((a),(b)),((c),(d)))
print(ret)
for i in ret:
    print(i)

ret = zip(((a), (b)), ((c), (d)))
def func(tup):
    return {tup[0]:tup[1]}
res = map(func, ret)
print(list(res))

ret = zip(((a), (b)), ((c), (d)))
ret = map(lambda t:{t[0]:t[1]},ret)
print(list(ret))

print(list(map(lambda t:{t[0]:t[1]},zip(((‘a‘), (‘b‘)), ((‘c‘), (‘d‘))))))



3.以下代碼的輸出是什麽?請給出答案並解釋。 def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) 請修改multipliers的定義來產生期望的結果。
def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])

def multipliers():
    return (lambda x:i*x for i in range(4))
print([m(2) for m in multipliers()])


# [6, 6, 6, 6]
# [0, 2, 4, 6]


Python_匿名函數_47