精巧なラムダ関数のPythonの使用法、お勧めのコレクション

精巧なラムダ関数のPythonの使用法、お勧めのコレクション

つまり、私たちは多くの場合、無名関数と言う、そこのPythonの関数の2種類、1つのDEF定義されている機能があり、もう一方はラムダ関数です。今日、私はそれを表現と呼ばれて、Pythonプログラミングの全員とラムダ関数に話をします。

1.なぜラムダ関数を使うのか?

最初の例を与える:各要素のリストが乗。

次のように最初のDEF定義された関数コードであります

def sq(x):
    return x*x

map(sq,[y for y in range(10)])

ラムダ関数と、コードを書くための

map(lambda x: x*x,[y for y in range(10)])

この単純な例から、我々はラムダ関数に続いて、第一の冗長コードを削減ラムダ関数を、関数の名前に名前を付けるために気にしない、ということを確認でき、すばやく機能、最終的には、ラムダ関数を実装することができますコードを読みやすく、プログラムはより簡潔になります。

上記のこの単純な例からは、ラムダの構文を見ることができる唯一の機能であり、次の形式:

lambda argument_list:expersion

Argument_list構文パラメータリスト、Pythonでその構造及び機能(関数)は、例えば、パラメータの同じリストであります

a,b
a=1,b=2
*args
**kwargs
a,b=1,*args
空
....

シンタックス式は、ニーズを新興のパラメータ式はargument_listで定義されているパラメータに関する式であり、式は、単一の行することができます。たとえば、次の有効な式の一部

1
None
a+b
sum(a)
1 if a >10 else 0
......

上記のラムダ関数の利点に加えて、私はいくつかの記事は、効率を改善しますラムダ関数と言う参照してください、それは何ではないでしょうか?私たちは、検証するためにコードを書きます

import time


# 测试的Def函数
def square1(n):
    return n ** 2


# 测试的Lambda函数
square2 = lambda n: n ** 2

print(time.time())

# 使用Def函数
i = 0
while i < 1000000000:
    square1(100)
    i += 1

print(time.time())

# 使用lambda函数
i = 0
while i < 1000000000:
    square2(100)
    i += 1

print(time.time())

1413272496.27
1413272703.05 (Def   函数:207s)
1413272904.49 (Lambda函数:201s)

上記から分かるように、時間が影響を受けていない2つの同様の効率のために必要。

2.lambad機能上の使用法はまた、匿名関数の利点について話しました、そして、それは最終的にそれが何に使用されていますか?

(1)直接変数に割り当てられ、その後、通常のように、その関数を呼び出します

c=lambda x,y,z:x*y*z
c(2,3,4)

24

もちろん、引数は関数の後に直接渡すことが可能

(lambda x:x**2)(3)
9

(2)以下に例示するいくつかの例Pythonのマップ、フィルタ、ソート、組み込み関数などの使用を減らす、に関連して他の関数に渡されるラムダパラメータの関数として。

fliter(lambda x:x%3==0,[1,2,3,4,5,6])

[3,6]


squares = map(lambda x:x**2,range(5)
print(lsit(squares))
[0,1,4,9,16]

タプルからなるリストを作成します。そのように機能し、の組み合わせを使用してソート:

a=[('b',3),('a',2),('d',4),('c',1)]

最初の要素はソート

sorted(a,key=lambda x:x[0])
[('a',2),('b',3),('c',1),('d',4)]

第二の選別素子によれば

sorted(a,key=lambda x:x[1])
[('c',1),('a',2),('b',3),('d',4)]

減らす機能と組み合わせて使用​​します

from functools import reduce
print(reduce(lambda a,b:'{},{}'.format(a,b),[1,2,3,4,5,6,7,8,9]))

1,2,3,4,5,6,7,8,9

(3)通常の関数ラムダにネストされた関数を入れ子になった、機能自体の戻り値として、ラムダ、

def increment(n):
    return lambda x:x+n

f=increment(4)
f(2)
6

(4)米国列は、デフォルト値を有し、またX =(ラムダ...)形式を使用することができます

x=(lambda x='Boo',y='Too',z='Z00':x+y+z)
print(x('Foo'))

'FooTooZoo'

(5)Tkinterではインラインコールバック関数を定義

import sys
from tkinter import Button,mainloop

x=Button(text='Press me',command=(lambda :sys.stdout.write('Hello,World\n')))
x.pack()
x.mainloop()

このコードは非常に興味深いものだった、少し友人がカザフスタンについての実行をコピー&ペーストすることができます願っています。(6)決定文字列は、文字で始まるかどうか

Names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach']
B_Name= filter(lambda x: x.startswith('B'),Names)
print(B_Name)

['Bob', 'Barbara']

(7)リストの二つの要素の和

a = [1,2,3,4]
b = [5,6,7,8]
print(list(map(lambda x,y:x+y, a,b)))

[6,8,10,12]

各単語列リクエストの長さ(8)

sentence = "Welcome To Beijing!"
words = sentence.split()
lengths  = map(lambda x:len(x),words)
print(list(lengths))
[7,2,8]

概要

ラムダ関数についてlambad機能の使用は、Pythonのコードを作ることにPythonより、よりコンパクトでパーティーをサポートするために、Pythonコミュニティで議論されている。反対は考えているPythonのラムダ関数の制限の多くは、ときにのみによってそれの最悪の部分式を構成しますが、プログラムは後でよりであまり明確に見えるのです。

おすすめ

転載: www.cnblogs.com/TMesh/p/11737933.html