2012-01-17 3 views
1

AFAIK, Python은 선언 시간에 한 번만 함수의 기본값을 평가합니다. 그래서 같은 수를 인수없이 호출 할 때마다 인쇄합니다 다음과 같은 기능을 printRandom함수 호출시 기본 재평가를 강제 실행합니다.

import random 
def printRandom(randomNumber = random.randint(0, 10)): 
    print randomNumber 

를 호출. 수동으로하지 않고 각 함수 호출시 기본값 randomNumber을 강제로 다시 계산할 수 있습니까?

import random 
def printRandom(randomNumber): 
    if not randomNumber: 
     randomNumber = random.randint(0, 10) 
    print randomNumber 

답변

6

번호가 기본 인자가 설정들이 실행될 때, 함수가 정의 될 때이다 : 아래는 내가 "수동"을 의미하는 것입니다. 다시 실행하기를 원하면 함수를 다시 정의해야합니다.

표준 관용구, 당신은 사용해야 하나,

import random 
def print_random(random_number=None): 
    if random_number is None: 
     random_number = 4 # chosen by fair dice roll. 
          # guaranteed to be random. 
    print random_number 

None (싱글)의 사용 및 개체의 정체성에 대한 is 테스트입니다. 부울 거짓으로 평가되는 값이 많기 때문에 을 사용하면 안됩니다. 특히 0입니다.

다른 많은 방법이 있습니다. 일 수 있지만 규칙을 따르지 않아도됩니다.

+0

감사! 'random_number == None'과'random_number is None'의 차이점은 무엇입니까? – Randomblue

+0

그는 이미 그의 답변에서 이렇게 말했다 :'is'는 object _identity_에 대한 테스트이고'=='는 _equality_에 대해 두 개의 오브젝트를 검사합니다. '1.0은 1 == False'이고'(1.0 == 1) == True'입니다. – Gandaro

+0

그건 [일반적인 질문] (http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python) : p. 간단히 말해서,'=='는 객체가 같은 의미인지 (즉 같은 데이터를 보유하고 있는지)를 테스트하고, 객체가 같은지 여부를 테스트합니다. 'None'과 비교할 때'is'를 사용해야합니다. 이것은 당신이 그렇게해야하는 몇 안되는 경우 중 하나입니다 : p. – katrielalex

3

사용 None :

def printRandom(randomNumber=None): 
    if randomNumber is None: 
     randomNumber = random.randint(0, 10) 
    print randomNumber 
2

나는 최선의 방법은 난수에 대한 기본값으로 None을 정의하는 것입니다 생각합니다.

def printRandom(randomNumber=None): 
    if randomNumber is None: 
     print random.randint(0, 10) 
    else: 
     print randomNumber 
관련 문제