ある程度、他の言語を経験したことがある場合、新しい言語のチュートリアルは流し読みしても問題ないことが多いです。 かくいう自分もPythonチュートリアルをちゃんと読んでこなかったので、改めて精読してみました。
実際に読んでみると、結構気づきがあったので紹介しようと思います。 「こんなん知ってるわ」なものや「こんなん使わん」なものも多いかと思いますが、復習と思って書いています。
Python チュートリアル を参考にしています。
形式ばらない Python の紹介
https://docs.python.org/ja/3/tutorial/introduction.html
冪乗
pow
だけでなく **
で冪乗ができる。
2**3 >> 8 pow(2,3) >> 8
対話モード
対話モードでは、最後に表示された結果は変数 _ に代入されます。このことを利用すると、Python を電卓として使うときに、計算を連続して行う作業が多少楽になります。
tax = 12.5 / 100 price = 100.50 price * tax >> 12.5625 # `_` には price*tax が代入されている price + _ >> 113.0625
immutable/mutable
- 文字列は immutable
- リストは mutable
チュートリアルでは組み込みデータ型ごとにまとめた情報はない
- 用語集には用語の意味が記載されている
(イミュータブル) 固定の値を持ったオブジェクトです。イミュータブルなオブジェクトには、数値、文字列、およびタプルなどがあります。これらのオブジェクトは値を変えられません。 immutable
(ミュータブル) ミュータブルなオブジェクトは、 id() を変えることなく値を変更できます。 mutable
参考
その他の制御フローツール
https://docs.python.org/ja/3/tutorial/controlflow.html
break
- else は for に属する
for n in range(2, 10): for x in range(2, n): if n % x == 0: print(n, 'equals', x, '*', n//x) break else: # loop fell through without finding a factor print(n, 'is a prime number')
関数
デフォルト値
foo(hoge=1)
のように設定する値- 関数のデフォルト値は 一度しか 評価されない
- リストや辞書のような変更可能な (mutable) オブジェクトの時にはその影響がでる
- FAQ でも言及されている なぜオブジェクト間でデフォルト値が共有されるのですか? - プログラミング FAQ
def foo(k,v, mydict={}): mydict[k] = v print(mydict) foo(1,2) >> {1: 2} foo(2,3) >> {1: 2, 2: 3} foo(1, 4) >> {1: 4, 2: 3}
mutableな型で影響させないためにはデフォルト値を None
に設定する
def foo(k,v, my_dict=None): if my_dict is None: my_dict = {} my_dict[k] = v print(mydict)
キーワード専用引数
*
を前に置くと、その後ろの引数はキーワードでしか受け取ることができない。これをキーワード専用引数と呼ぶ
def func(a, *, b): print(a,b) # NG func(1,2) >> TypeError f1(1,b=2) >> 1 2
- 可変引数のあとの引数はキーワード専用引数
sep=
の部分
def concat(*args, sep="/"): return sep.join(args) concat("earth", "mars", "venus") >> 'earth/mars/venus' concat("earth", "mars", "venus", sep=".") >> 'earth.mars.venus'
引数のunpack
- リストは
*args
、 辞書は**args
でアンパックし渡すことができる
def func(a,b): print(a,b) func(*[1,2]) >> 1 2 func(**{"a":1, "b":2}) >> 1 2 # NG func([1,2]) >> TypeError: func() missing 1 required positional argument: 'b'
ラムダ式
lambda a,b: a+b
のように、ラムダ式は 名前のない小さな関数 を生成できる- 小さな関数とラムダ式 - 関数型プログラミング HOWTO
データ構造
https://docs.python.org/ja/3/tutorial/datastructures.html
スタック・キュー
Pythonにはスタック (stack) やキュー (queue) という名前のデータ構造はないが、リストや deque
によって実現できる。
- last-in, first-out
list
のappend
とpop
を使う
- first-in, first-out
- collectionsのdeque で
append
とpopleft
を使う
タプル
- 丸括弧をつけなくてもタプル扱い(unpackの逆)
singleton = 'hello',
浮動小数点
https://docs.python.org/ja/3/tutorial/floatingpoint.html
- 不正確さに対応する
float.as_integer_ratio()
で有理数によって表現できるdecimal
を使う
- なんで浮動小数点数の計算はこんなに不正確なんですか? - プログラミング FAQ