LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-10
  • 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
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1