任意のプログラミング言語の高度な機能のみを見つけるために、多くの経験を通じて通常です。たとえば、複雑なプロジェクトを書き込み、stackoverflowの上の質問に対する答えを見つけるています。そして、あなたは突然、あなたが知っていることはありませんPythonの関数を使用して非常にエレガントなソリューションを、発見しました!
学習のこの方法はとても興味深いものです:探求することで、時折何かを見つけます。
以下は5高度な機能はPythonの種類、並びにそれらの使用方法があります。
ラムダ関数
それは実際に名前を機能していないことを匿名手段 - ラムダ関数は、比較的小さな無名関数です。
Pythonの関数は、通常、デフa_function_name(は)スタイルを定義するために使用しますが、ラムダ関数のために、我々はそれを名前を付けていませんでした。関数ラムダ関数が完全に定義された関数せずに、いくつかの簡単な表現や操作を行うことがあるためです。
ラムダ関数は、引数の数が、一つだけの式を使用することができます。
X =ラムダ、B:* Bの
印刷(X(5、6))#プリント30
X =ラムダ* 3 + 3
プリント(X(3))#プリント12
それどのようにシンプルな見て!私たちは、全体の機能を定義することなく、いくつかの簡単な数学演算を行いました。これは、これらの機能がクリーンでシンプルなプログラミング言語作り、パイソンの多くの機能の一つです。
地図機能
地図()関数は、組み込みのPython、このようなリストや辞書などのデータ構造内の様々な要素に適用することができる機能です。この計算のために、それは非常にきれいで読みやすい実装です。
DEF square_it_func(A):
リターンA * A
X =マップ(square_it_func、[1 ,. 4 ,. 7。])
(X)#印刷する印刷[1、16、49]
DEF multiplier_func(A、B):
リターンA * B
X地図=(multiplier_func、[1 ,. 4 ,. 7]、[2 ,. 5 ,. 8])
プリント(X)#プリント上記参照例[2、20は56です]!我々は、単一の機能または複数のリストに適用することができます。実際には、あなたは、入力されたマップ機能として長い間、それが動作しているとあなたは互換性があるとして配列要素を任意のPythonの関数を使用することができます。
フィルタ機能
内蔵の機能を備えたフィルタは、配列構造(リスト、タプル、辞書)にそれがされます、関数、マップ機能と非常に似ています。主な違いは、フィルタは()のみアプリケーション機能がTrueの要素を返す返されるということです。
詳細については、次の例を参照してください。
#我々番号
番号= [1、2、3、4、5、6、7、8、9、10、11、12、13、14、15]
#関数その奇数である全ての番号アウトフィルタ
デフfilter_odd_numbers(NUM ):
もしNUM%2 == 0:
リターン真
他:
戻り偽
filtered_numbers =フィルタ(filter_odd_numbers、数)
プリント(filtered_numbers)
#filtered_numbers = [2、4、6、8、10、12、14]
だけでなく、私たちは、各リスト要素のためにTrueまたはFalseを評価したか、フィルタ()関数は、真の要素のためにのみリターンマッチを保証します。この2つのステップのリストを構築するために発現およびプロセシングリターンをチェックするのは非常に簡単。
Itertoolsモジュール
ツールモジュールは、反復が設定されている処理のPython Itertoolsあります。反復子は、データの型は(タプル、および辞書のリストを含む)のためのループで用いてもよいです。
利用機能Itertoolsモジュールを使用すると、通常の関数と理解し、複雑なリストの複数行を必要とする多くのイテレータ操作を実行することができます。Itertools魔法について、次の例を考えてみます。
itertoolsインポートから*
#簡単にタプルのリストに二つのリストの結合
:I izipに([1、2、3]、[A、B、C])のための
印刷I
#(1)
#(B、2 )
#(C、3)
#count()関数が戻ることをinterator
#は永遠に、連続した整数を生成します。この
#1はあなたのリストに次のインデックスを追加するための素晴らしいです
読みやすさと利便性のための#要素
izip(数(1)、[ボブ、エミリー、ジョー])でのiについて:
印刷I
#(1、ボブ)
#(2、エミリー)
#(3、ジョー)
#dropwhile()関数が返すイテレータその戻り
#特定の後に来る入力のすべての要素
#条件が最初に偽となります。
DEF(X)をcheck_for_drop:
印刷検査:Xの
リターン(X> 5)
dropwhileにおけるiについて(should_drop、[2、4、6、8、10、12]):
印刷結果は:私は
#確認:2
#チェックを:4
#結果:6
#結果:8
#結果:10
#結果:12
#GROUPBY()関数は、房の検索のために大きい
類似同じであるか、または有してイテレータ要素の#
#特性
=ソート([1、2 、1、3、2、1、2、3、4、5])
:キー、GROUPBYの値()のための
プリント(キー、値)、終了=)
#(1、[1、1、1])
#(2、[2,2]、[2])
#(3、[3,3])#(4、[4])
#(5、[5])
ファンクションジェネレータ
ジェネレータ関数は、forループ文でも使用することができることをイテレータと同様の機能です。これは、大幅にコードを簡素化し、ループのためのシンプルに比べて、それは多くのメモリを節約できます。
例えば、我々はすべての番号1-1000をしたい、この計算を実行するためにforループを使用する方法をお見せするために、このコードブロックの最初の部分を追加しています。
リストが小さい場合など、1000行、必要なコンピュータメモリ大丈夫。しかし、巨大な長いリストならば、そのような10億浮動小数点数として、この問題が表示されます。、forループメモリ・リストの数が多い、これを使用しますが、誰もがそう多くの事を格納するための無制限のRAMを持っています。範囲()関数でPythonはとても乾燥して、メモリ内のリストを構築します。
コードは、合計そのデジタルPythonの生成関数の第二の部分の使用を示します。一度格納するメモリ1内に素子を作成し、必要な場合のみにするジェネレータ機能。このあなたが10億浮動小数点数を作成したい場合は、メモリに一度に1を置くことができることを意味します!Pythonの2.xのはxrange()関数は、リストを構築するために発電機を使用することです。
これらの例は示して:あなたは、広い範囲のリストを生成したい場合は、ジェネレータ関数を使用する必要があります。あなたは、このようなモバイルコンピューティングデバイスまたはエッジの使用として、メモリが限られている場合は、この方法を使用することは特に重要です。
それはループまたは範囲のPythonの2.xの機能のために使用するのが最適です、あなたは反復回数を一覧表示したい場合には、であり、メモリ上に置くのに十分に小さいです。ジェネレータ関数とxrangeの機能を使用すると、値の彼らの新しいリストを訪問するたびに生成され、Pythonの2.xのレンジ機能は、静的リストで、整数で迅速なアクセスのためにメモリに配置されているので。
#(1)loopvのための使用
数=リスト()
の範囲内のiについて(1000):
numbers.append(i + 1)の
合計= SUM(番号)
#(2)発電機の使用
デフgenerate_numbersを(N):
NUM、番号= 1、[]
NUM <Nつつ:
numbers.append(NUM)
NUM + = 1
戻り番号は
= SUM(generate_numbers(1000))合計
はxrange VS#(3)範囲()()
の合計= SUM(範囲(1,000 + 1))
の合計= SUM(xrangeの(+ 1 1000))