エイエイレトリック

なぐりがき

再訪Pythonチュートリアル

ある程度、他の言語を経験したことがある場合、新しい言語のチュートリアルは流し読みしても問題ないことが多いです。 かくいう自分も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')

関数

デフォルト値

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'

ラムダ式

データ構造

https://docs.python.org/ja/3/tutorial/datastructures.html

スタック・キュー

Pythonにはスタック (stack) やキュー (queue) という名前のデータ構造はないが、リストや deque によって実現できる。

リストをスタックとして使う

  • last-in, first-out
  • listappendpop を使う

リストをキューとして使う

  • first-in, first-out
  • collectionsのdequeappendpopleft を使う

タプル

  • 丸括弧をつけなくてもタプル扱い(unpackの逆)
  • singleton = 'hello',

浮動小数

https://docs.python.org/ja/3/tutorial/floatingpoint.html