- 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