1
import re

r = re.compile("#{([^}]*)}")

def I(string):
    def eval_str_match(m):
        return str(eval(m.group(1)))
    return r.sub(eval_str_match,string)

*pythonの味/スタイル/標準に加えて

それを一文字のメソッドと呼ぶより良い簡潔な方法はありますか?
正規表現が見逃す可能性のあるものはありますか?
strの代わりにreprを使用する必要がありますか?
evalは危険な場合があることは知っていますが、理由がわかりません

I("#{some_func()}\n")

それより悪い

"%s\n" % str(some_func())
4

2 に答える 2

2

何を達成しようとしているのか正確にはわかりませんが、これは機能しますか?

I = '{}\n'.format
I(some_func())

また

def I(func):
    return "%x\n" % func()
I(some_func())

コメントの例を使用して、

I([x*2 for x in [1,2,3]])

正常に動作します(ただし、出力をどのように表示したいかはわかりません)。

I(''.join((self.name, ' has ', self.number_of_children)))

しかし、あなたは本当にやるべきです

'{} has {}'.format(self.name, self.number_of_children)

これはまだ1行です。

于 2011-08-17T05:20:06.293 に答える