Python学習の高度な特性
3857 ワード
ブログへようこそ
Python学習ディレクトリ MacでPython 3 を使用 Python学習のデータ型 Python学習の関数 Python学習の高度な特性 Python学習の関数式プログラミング Python学習のモジュール Python学習のオブジェクト向けプログラミング Python学習のオブジェクト向け高度プログラミング Python学習のエラーデバッグとテスト Python学習のIOプログラミング Python学習のプロセスとスレッド Python学習の正則 Python学習の常用モジュール Python学習のネットワークプログラミング 練習コード
Pythonのデータ型、文、関数をマスターすれば、基本的に多くの役に立つプログラムを書くことができます.例えば、
リストの上位半分の要素を取り、ループで実現することもできます.
しかしPythonでは、コードは多ければ多いほど良いのではなく、少なければ少ないほど良いのです.コードは複雑であればあるほど良いのではなく、簡単であればあるほど良いのです.この考えに基づいて、Pythonで非常に有用な高度な特性を紹介し、1行のコードで実現できる機能は、決して5行のコードを書かない.コードが少ないほど開発効率が高いことを常に覚えておいてください.
スライス(Slice)
collectionsモジュールのIterableタイプによりオブジェクトが反復可能オブジェクトであるか否かを判定する Pythonに内蔵されたenumerate関数はリストをインデックス-要素ペアにすることができ、forループでインデックスと要素自体を同時に反復することができます.
生成[1 x 1,2 x 2,3 x 3,...,10 x 10] リスト生成式(list comprehensions)は、上記のlist をループの代わりに1行の文で生成することができる.
ジェネレータ
リスト生成式の[]を() に変更関数定義にyieldキーワードが含まれている場合、この関数は通常の関数ではなくgenerator です.
generatorと関数の実行プロセスは違います.関数は順番に実行され、return文または最後の行の関数文に遭遇すると返されます.generatorの関数となり、next()を呼び出すたびに実行され、yield文が返され、再実行されると前回返されたyield文から実行が続行されます.関数をgeneratorに変更すると、next()で次の戻り値を取得するのではなく、forループを直接使用して反復します.
反復器
Python学習ディレクトリ
Pythonのデータ型、文、関数をマスターすれば、基本的に多くの役に立つプログラムを書くことができます.例えば、
1, 3, 5, 7, ..., 99
のリストを構築し、ループによって実現することができる.L = []
n = 1
while n <= 99:
L.append(n)
n = n + 2
リストの上位半分の要素を取り、ループで実現することもできます.
しかしPythonでは、コードは多ければ多いほど良いのではなく、少なければ少ないほど良いのです.コードは複雑であればあるほど良いのではなく、簡単であればあるほど良いのです.この考えに基づいて、Pythonで非常に有用な高度な特性を紹介し、1行のコードで実現できる機能は、決して5行のコードを書かない.コードが少ないほど開発効率が高いことを常に覚えておいてください.
スライス(Slice) L = list(range(100))
L[:10]
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(0, 1, 2, 3, 4, 5)[:3]
>>> (0, 1, 2)
'ABCDEFG'[:3]
>>> 'ABC'
多くのプログラミング言語では、文字列に対して多くの様々な切り取り関数(例えばsubstring)が提供され、その目的は文字列をスライスすることである.Pythonには文字列に対する切り取り関数はなく,スライス1操作で済むので,非常に簡単である.
反復
L = list(range(100))
L[:10]
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(0, 1, 2, 3, 4, 5)[:3]
>>> (0, 1, 2)
'ABCDEFG'[:3]
>>> 'ABC'
from collections import Iterable
isinstance('abc', Iterable) # str
>>> True
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
>>>
0 A
1 B
2 C
リスト生成
list(range(1, 11))
L = []
for x in range(1, 11):
L.append(x * x)
[x * x for x in range(1, 11)]
ジェネレータ
generatorはアルゴリズムを保存し、next(g)を呼び出すたびにgの次の要素の値を計算し、最後の要素まで計算し、より多くの要素がない場合、StopIterationのエラーを投げ出す.同様にforループループも使用できます
g = (x * x for x in range(10))
for n in g:
print(n)
>>>
0
1
4
9
16
25
36
49
64
81
generatorと関数の実行プロセスは違います.関数は順番に実行され、return文または最後の行の関数文に遭遇すると返されます.generatorの関数となり、next()を呼び出すたびに実行され、yield文が返され、再実行されると前回返されたyield文から実行が続行されます.関数をgeneratorに変更すると、next()で次の戻り値を取得するのではなく、forループを直接使用して反復します.
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
f = fib(6)
反復器
forサイクルに直接作用できるデータ型は、リスト、tuple、dict、set、strなどの集合データ型である.1つはgeneratorであり、ジェネレータとyield付きgenerator functionを含む.
これらのforループに直接作用するオブジェクトは、反復可能なオブジェクト:Iterableと総称されます.isinstance()を使用して、オブジェクトがIterableオブジェクトであるかどうかを判断できます.ジェネレータはforループだけでなくnext()関数によって呼び出され、次の値を返し、最後にStopIterationエラーが投げ出されて次の値を返すことができなくなるまで返すことができます.next()関数によって呼び出され、次の値を繰り返し返すオブジェクトを反復器:Iteratorと呼びます.isinstance()を使用して、オブジェクトがIteratorオブジェクトであるかどうかを判断できます.リスト、dict、strなどの集合データ型はIterableですが、Iteratorではありませんが、iter()関数でIteratorオブジェクトを取得できます.pythonのforループは本質的にnext()関数を絶えず呼び出すことによって実現される.for x in [1, 2, 3, 4, 5]:
pass
完全に同等:# Iterator :
it = iter([1, 2, 3, 4, 5])
# :
while True:
try:
# :
x = next(it)
except StopIteration:
# StopIteration
break
小結:PythonのIteratorオブジェクトはデータストリームを表しています.このデータストリームは秩序あるシーケンスと見なしていますが、シーケンスの長さを事前に知ることはできません.next()関数で次のデータをオンデマンドで計算するしかありません.そのため、Iteratorの計算は不活性で、次のデータを返す必要がある場合にのみ計算されます.Iteratorは、全体の自然数など、無限大のデータストリームを表すこともできる.リストを使用すると、自然数全体を格納することは永遠に不可能です.
上一篇:Python学习の関数式プログラミング
for x in [1, 2, 3, 4, 5]:
pass
# Iterator :
it = iter([1, 2, 3, 4, 5])
# :
while True:
try:
# :
x = next(it)
except StopIteration:
# StopIteration
break