2012-05-16 4 views
1

그래서 나는 다소 귀찮은되고있는 일부 코드를 다시 작성해야 :파이썬에서 Randomizer 함수/전역 변수 문제가 있습니까?

def func_A(): 

    x=[] 
    # the function picks random members of the local x and rearranges them, 
    # after giving x some initial value 
    return x 

가 지금은에 반복을 만들려 func_B 같은 각은 func_Bx 값을 사용하여 실행을 통해 interation에 대한 그 func_A 일을 생성합니다.

그러나 x을 전역 변수로 사용하지 않으려합니다.

첫 번째 생각은 func_Bx=func_A()의 첫 번째 줄을 만드는 것이지만 랜더 마이저를 두 번 실행하고 x의 값이 변경됩니다.

어떻게 (func_B에서 다음 반복까지) 및 글로벌 변수를 사용하지 않고 func_A 다시 랜덤를 실행하지 않고 func_B에서 생산 같은 x 것을 참조 할 수 있습니까?

+0

함수 사이에 'x'를 매개 변수로 사용하지 않고 사용 하시겠습니까? –

+0

예, 매개 변수로 전달하는 것이 확실한 해결책 인 것 같습니다. 그 이유는 무엇입니까? –

+0

'func_B'를 호출 할 때마다 새로운'x'를 원한다면 왜'func_B'의 외부에'x'를 생성해야합니까? 'func_B' 밖에서 뭔가하고 있니? – zigg

답변

1

사용 클래스

import random 
class Randomizer(): 
    def __init__(self): 
     # Generates a list of random values 
     self.x = [] 
     self.rng = 10 
     for i in range(1,self.rng+1): 
      self.x.append(random.random())    

     # Need to call once to make sure all vars defined 
     self.func_A() 

    # pick a random value from a list 
    def func_A(self): 
     self.recent = self.x[random.randint(0,self.rng-1)] 
     return self.recent 

    # Do something with random value picked by A 
    def func_B(self): 
     return self.recent*self.recent 

이 당신이 무엇을 의미하는지 생각? 내가 제공 한 정보가 새로운 기능에 X의 추상적 발생하는 것으로 생각할 수

>>> r = Randomizer() 
>>> r.func_A() 
0.91223345147715629 
>>> r.func_B() 
0.83216986999392528 
1

가장 단순한 방법입니다. 이런 식으로 뭔가 : 또 다른 옵션은 그 func_a 수

def gen_x(): 
    x = [] 
    # your code here 
    return x 

def func_a(x): 
    # your code here 
    return x 

def func_b(x): 
    # your code here 
    return x 


x = gen_x() 
func_a(x) 
func_b(x) 

은 X와 튜플하고 현재 func_a의 결과를 반환합니다. 그렇다면 func_a에서 생성 된 x를 func_b에 전달할 수 있습니다.

관련 문제