Python

perl使いのpythonメモ - formatって便利ですね。

More than 1 year has passed since last update.


  • pythonであれ?とおもったことをメモしときます。


%で変数展開


  • perlでのsprintfにあたるのは、pythonでは%で実現できます。お手軽でいいですね。

>>> u"%s,%02d" % ('ABC',2)

'ABC,02'


formatというのもありました。


{添字}で展開できるようです。

>>> "{0},{1}".format('ABC',2)

'ABC,2'


%02dみたいなフォーマット指定もできるみたい。

>>> "{0},{1:02d}".format('ABC',2)

'ABC,02'


リストの展開であれ?


  • 直接記入じゃなくて変数を入れてみます。

>>> a = ['a','b','c']

>>> a
['a', 'b', 'c']
>>> "{0}_{1}_{2}".format(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range


  • あれ?怒られちゃいました。

  • 変数のaのところを*aって書くようです。

>>> "{0}_{1}_{2}".format(*a)

'a_b_c'
>>> "{0}_{1}_{2}".format(*['a','b','c'])
'a_b_c'
>>> "{0}_{1}_{2}".format(*('t','u','p'))
't_u_p'


辞書型との組み合わせが便利!


  • まぁここまでなら、そうだよねって程度ですよね。

  • でも辞書型との組み合わせが便利です、これだけでテンプレートモジュール使ってるみたい。

  • 変数は*を2つの、**dと書けばいいようですね。

>>> d={"name":"John","age":25}

>>> d
{'name': 'John', 'age': 25}
>>> "call me '{name}' , I'm {age}".format(**d)
"call me 'John' , I'm 25"


  • The 簡単!


辞書型とformatの組み合わせの例


  • 今時はJSONみたいに辞書と配列くらいしかないので応用範囲も広いですね。


rss.py

# -*- coding: utf-8 -*-

import feedparser

qiita_dic = feedparser.parse('http://qiita.com/tags/python/feed.atom')

for entry in qiita_dic.entries:
print(u"{title}\t{link}\t{published}\t{author}".format(**entry))



  • 実行結果です、1行でできるのがいいですね!

sh-3.2$ python rss.py

TensFlowの環境設定メモ http://qiita.com/s_nakamura/items/b502fb29b3f6321a0403 2016-10-10T16:09:52+09:00 s_nakamura
機械学習の理論を理解せずに tensorflow で オセロ AI を作ってみた 〜その1〜 http://qiita.com/sasaco/items/3b0b8565d6aa2a640caf 2016-10-10T15:28:54+09:00 sasaco
[自分用メモ] Pythonのシーケンス型・マッピング型 http://qiita.com/RyoMa_0923/items/a714eb5dce24e9463c00 2016-10-10T13:16:19+09:00 RyoMa_0923
Pythonのコーディング規約PEP8を要約してみる(2) http://qiita.com/sartan123/items/a74010b06f47792e7660 2016-10-10T11:55:54+09:00 sartan123
StackStorm : st2sdkでpackを開発する http://qiita.com/unchemist/items/10046264d29fb7c7334b 2016-10-10T03:08:35+09:00 unchemist
Ubuntu で 窓替えのような機能を実装する http://qiita.com/fx-kirin/items/f41aaaeef9a5886cf87f 2016-10-10T00:50:32+09:00 fx-kirin
〜〜〜


perlだと...


  • こんな感じかな〜、formatと比べると直感的じゃないですね...

sh-3.2$ perl -le '{my %d = ("name"=>"John","age"=>25);print sprintf("call me %s , Im %d",map {$d{$_}} ("name","age"))}'

call me John , Im 25