削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
28 行
== 整理作業中 ==
* [[Python/整理中]] (複素数、正規表現、HTTPクライアント、JSON、pass)
 
=== 内包表記とジェネレータ式 ===
Pythonには、シーケンスの内包表記とジェネレータ式があります。
;[https://paiza.io/projects/zcGKAf9f-uN9V7KQrpv4SQ?language=python3 内包表記とジェネレータ式]:<syntaxhighlight lang="python">
for label, expr in {"加算":"1 + 1",
"リスト内包表記":"[2 ** x for x in range(5)]",
"集合内包表記":"{2 ** x for x in range(5)}",
"辞書内包表記":"{x: 2 ** x for x in range(5)}",
"ジェネレータ式":"(2 ** x for x in range(5))",
"タプルコンストラクターにジェネレータ式を適用":"tuple(2 ** x for x in range(5))",
}.items() :
print(f'{label}:\n {expr}\n ⇒ {eval(expr)} : {type(eval(expr))}')
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
加算:
1 + 1
⇒ 2 : <class 'int'>
リスト内包表記:
[2 ** x for x in range(5)]
⇒ [1, 2, 4, 8, 16] : <class 'list'>
集合内包表記:
{2 ** x for x in range(5)}
⇒ {1, 2, 4, 8, 16} : <class 'set'>
辞書内包表記:
{x: 2 ** x for x in range(5)}
⇒ {0: 1, 1: 2, 2: 4, 3: 8, 4: 16} : <class 'dict'>
ジェネレータ式:
(2 ** x for x in range(5))
⇒ <generator object <genexpr> at 0x14ac1a9e56d0> : <class 'generator'>
タプルコンストラクターにジェネレータ式を適用:
tuple(2 ** x for x in range(5))
⇒ (1, 2, 4, 8, 16) : <class 'tuple'>
</syntaxhighlight>
: Pythonの式を表す文字列(Ex. "1 + 1")を要素としたタプルをループ変数exprで回しています。
: <code> print(f'{label}:\n {expr}\n ⇒ {eval(expr)} : {type(eval(expr))}')</code>は、
::<syntaxhighlight lang=text>
ラベル:
⇒ 式の評価結果 : 式の評価結果の型
</syntaxhighlight>を表示します。
: <code>(2 ** x for x in range(5))</code>は、タプル内包表記…ではなく、'''ジェネレータ式'''で未評価のシーケンス(generator)を返します(組込み関数のrange同様、この時点ではメモリーオブジェクトではありません)。
: タプルのコンストラクターにジェネレータ式を渡すと、タプルが返ります(タプルはイミュータブルですがメモリーオブジェクトです)。
 
=== 代入演算子 ===