0

Python では、リスト内の項目にアクセスしたときに、繰り返し文字列の書式設定操作を行うことは可能ですか?

例えば:

>>>from random import randint
>>>a = ["The random number is: {0}".format(randint(0,10))]
>>>print a[0]
The random number is: 3
>>>print a[0]
The random number is: 3

明らかに、ランダムな整数を取得し、文字列をフォーマットして、リストが最初に定義されたときにリストに保存しています。パフォーマンスはさておき、この動作をオーバーライドできるかどうかを知りたいです。

もし私がこの質問を見たら、「あなたは間違ったことをしている」と答えて、以下のような答えを提供するでしょう...

>>>a = ["The random number is: {0}"]
>>>print a[0].format(randint(0,10))

しかし、それはこの質問の解決策ではないと仮定しましょう。書式設定が定義され、リスト自体で行われることを本当に望んでいます(可能であれば)。

もう一つの例:

a = ["The some sweet string: {0}".format(someFunction),
     "Another {0} different string {1}".format(someFunctionTwo, someFunctionThree)]

someFunction* は、呼び出しごとに「ランダムな」結果を提供します。

私はそれが少しストレッチであることを知っており、すでに提供されている方法に頼らなければならないかもしれません(フィードバックに感謝します)が、試してみることにしました。

再度、感謝します。

4

2 に答える 2

4

これには関数を使用することをお勧めします。

In [1]: from random import randint

In [2]: def func():
   ...:     return "The random number is: {0}".format(randint(0,10))
   ...: 

In [3]: func()
Out[3]: 'The random number is: 7'

In [4]: func()
Out[4]: 'The random number is: 2'

In [5]: func()
Out[5]: 'The random number is: 3'
于 2012-10-22T19:19:40.753 に答える
3

クラスを作成してオーバーライドできます__str__

>>> from random import randint
>>> class Foo(object):
...     def __str__(self):
...        return "The random number is: {0}".format(randint(0,10))
... 
>>> a = [Foo()]
>>> print a[0]
The random number is: 8
>>> print a[0]
The random number is: 10
>>> print a[0]
The random number is: 5 

しかし、あなたは正しいです、私の最初の傾向はあなたがおそらくそれを間違っていると言うことです...


別のアイデアがあります-フォーマット文字列を含むリストを保持します。

a = ["The some sweet string: {func1}",
     "Another {func2} different string {func3}"]

for item in a:
   print item.format(func1=func1(),func2=func2(),func3=func3())

明らかにこれは効率的ではありませんが(必ずしも必要でないときに関数を呼び出すため...)、機能する可能性があります。

于 2012-10-22T19:20:32.137 に答える