重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数
from random import random
def printNumber(num=random()):
print num
for i in range(10):
printNumber()
10個の乱数を見たいのですが、10個の乱数はすべて同じです!
重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数
from random import random
def printNumber(num=random()):
print num
for i in range(10):
printNumber()
10個の乱数を見たいのですが、10個の乱数はすべて同じです!
デフォルトの引数は、関数のコンパイル時に一度だけ実行されるためです。
ドキュメントから:
関数定義が実行されると、デフォルトのパラメータ値が評価されます。これは、関数が定義されるときに式が一度評価され、同じ「事前に計算された」値が各呼び出しに使用されることを意味します。T
次のようなことを試すことができます:
In [10]: def printNumber(num=None):
return num if num is not None else random()
....:
In [12]: printNumber()
Out[12]: 0.9620725546432438
In [13]: printNumber()
Out[13]: 0.8188258892156928
In [15]: printNumber(10)
Out[15]: 10
関数のインスタンス化で実行されるため...関数呼び出しではありません
正しい(より)方法は
def printNumber(num=None):
if num == None:
num = random()
print num