2016年12月9日金曜日

Tips的な何か

この記事はAdventCalendar2016 9日目の記事です(嘘). skyです.3回目です.何回登場するんだろうね. 今回は課題チェックで3年生のPythonを見ててこんな風に書けるよって思ったことでも書いていきます. 3系中心のお話です. ## 出力を改行させない 出力を改行させたくない時はendを使います. ```python print("hoge", end="") print("fuga") print("foo") ``` 実行すると ``` hogehuga foo ``` となります. ## リストを1つの文字列にしたい ["2016", "12", "09"]というリストを連結して2016-12-09としたい時とか ```python l = ["2016", "12", "09"] print("-".join(l)) ``` 実行すると ``` 2016-12-09 ``` こんな感じ ## リストの中身と数を出したい ["a", "b", "c"]というリストで順番も欲しい時 count変数を用意してインクリメントしたいけど使わなくても出来る ```python l = ["a", "b", "c"] for i, v in enumerate(l): print(i+1, v) ``` こんな感じ ``` 1 a 2 b 3 c ``` ## パディングする n桁の数字にしたい時とか(上の例で001とかにしたい時) ```python l = ["a", "b", "c"] for i, v in enumerate(l): print(str(i+1).zfill(3), v) ``` 今回は3桁にしてみる. ``` 001 a 002 b 003 c ``` ## 文字列を整形する 文字列連結でも良いけどformat関数を使うと綺麗になったりする ```python h = 01 m = 12 s = 30 time = "{hour}:{minutes}:{second}".format(hour=h, minutes=m, second=s) print(time) ``` ``` 01:12:30 ``` {}で囲まれた部分は順番, 出現回数は問わずに使うことが出来る ## 引数のデフォルト値 引数には予めデフォルト値を設定しておくことが出来る ```python def hoge(a=100): print(a) hoge(5) hoge() ``` 2つ目の関数は引数がないが実行出来る ``` 5 100 ``` ## 可変長引数 その1 引数にはいくつでも引数を取ることの出来る可変長引数がある ```python def hoge(*args): print(args) print(sum(args)) hoge(1,2,3) ``` hoge関数にはいくつでも引数を渡すことが出来る 実行するとこんな感じ ``` (1, 2, 3) 6 ``` タプルで引数が渡されていることがわかる ## 可変長引数 その2 可変長引数は便利だがキーワード引数を使って引数が渡された時に何が渡されたかを知りたくなることがあると思う そんな時は引数を**argsとする ```python def hoge(**args): print(args) print(args.get("a", None)) print(args.get("b", None)) print(args.get("c", None)) hoge(a=1,b=2) ``` get関数を使うことでデフォルト値を設定することが出来る ``` {'b': 2, 'a': 1} 1 2 None ``` cは今回ないので第2引数の値に定義されているのがわかる ## リストの中身の型を変更したい ["1", "2", "3"]を全てint型にしたい時とか ```python l = ["1", "2", "3"] m1 = map(int, l) # or m2 = [int(x) for x in l] ``` 前者はmap関数を使用した場合 スッキリ書けるが3系からmap型になるためリスト型としてスライスとかしようとするとエラーが起きる. リストとして使いたい時は ```python m1 = list(map(int, l)) ``` とする必要がある. 後者はリスト内包表記といってPython独自の文法 リストとして使えるのでこっちの方が場合によっては便利かもしれない 以下と同じ意味 ```python tmp = [] for i in l: tmp.append(int(i)) ``` パフォーマンス面と可読性の面からリスト内包表記に慣れた方が良いです. 内包表記の中に内包表記書き出すと黒魔術化していくので適宜にしましょう. ~~需要あるならワンライナーネタも書きたいとは思うけど多分ない.~~ ## まとめ reduceとかfilterとかも調べてみると良いと思います. 組み込み関数には便利なものが多数あるのでドキュメントに一度は目を通しましょう.

0 件のコメント:

コメントを投稿