1

重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数

from random import random

def printNumber(num=random()):
    print num

for i in range(10):
    printNumber()

10個の乱数を見たいのですが、10個の乱数はすべて同じです!

4

2 に答える 2

4

デフォルトの引数は、関数のコンパイル時に一度だけ実行されるためです。

ドキュメントから:

関数定義が実行されると、デフォルトのパラメータ値が評価されます。これは、関数が定義されるときに式が一度評価され、同じ「事前に計算された」値が各呼び出しに使用されることを意味します。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
于 2012-11-03T20:40:39.683 に答える
3

関数のインスタンス化で実行されるため...関数呼び出しではありません

正しい(より)方法は

def printNumber(num=None):
     if num == None:
         num = random()
         print num
于 2012-11-03T20:41:09.227 に答える