2012-03-31 2 views
-2

질문이 있습니다. 다음은 더 나은 이해를 위해 내 코드의 일부를 가지고 :파이썬에 대한 의문점

def client(): 
    A=[] 
    B = open("clientes.txt", "r") 
    user = input("To begin, enter your ID number: ") 
    for line in B: 
     C = line.split("$") 
     A.append(C) 
    for i in range (len(A)): 
     if A[i][0]==user: 

를하고 내가 다른 기능을 가지고, 여기있다 :

def clientpersonalinfo(): 
    A=[] 
    B=[] 
    C = open("accounts.txt", "r") 
    D = open("clients.txt", "r") 
    for line in C: 
     E=line.split("$") 
     A.append(E) 
    for line in D: 
     F=line.split("$") 
     B.append(F) 
    for i in range (len(A)): 
     ***if user==A[i][1]:*** 

내가 다시 할 수있는 어떤 방법이 있는지 질문은 첫 번째 입력을 사용하십시오. 내가 이것을 실행하면 "user"라는 이름이 정의되어 있지 않다는 오류가 발생합니다.

그래서 처음 client()에서 사용한 사용자 입력을 불러 와서 내 clientpersonalinfo() 함수에서 다시 사용할 수 있는지 알고 싶습니다.

도움 주셔서 감사합니다.

나를 도와 주신 모든 분들께 감사드립니다. 고마워요! :)

+6

실제로 질문을 설명하는 제목을 적어주십시오. – agf

+2

코드에 대해 더 자세히 알려줘야합니다.또한 A, B, C는 파이썬에서 유효한 변수 이름이 아닙니다. (기술적으로는 그렇지만 아무도 그런 식으로 이름을 지정하지 않습니다). – georg

+0

정말 임의로 A, B, C 변수를 볼 수 있으며, 전체 코드를 스캔하여 컨텍스트를 기억해야합니다. – jdi

답변

2

인수 함수를 작성하는 방법에 대한 파이썬 문서를 검토하십시오 :

def myFunction1(): 
    user = "foo" 
    return user 

def myFunction2(user): 
    print user 

user = myFunction1() 
myFunction2(user) 

http://docs.python.org/tutorial/controlflow.html#defining-functions가 이상적으로 대신 내가 지저분하다고 생각되는 모든 곳에서 전역을 사용하는 멋진 클래스 구조를 구성 할 것입니다. 그 당신이 정말로 당신의 모든 기능 상태의 일종을 공유 할 필요가 결국 당신은 당신이 전역의 톤을 정의를 시작해야 할 수 있습니다 생각하면 클래스를 사용해야 좋은 징조 :

class Client(object): 

    def __init__(self): 
     self.userId = None 

    def getClient(self): 
     self.userId = raw_input("To begin, enter your ID number: ") 

    def parseClientInfo(self): 
     # do something with self.userId 
     print self.userId 

    def clientPersonalInfo(self): 
     # do something with self.userId 
     print self.userId 

있다는 점 유의 하시길 바랍니다 이 클래스는 정말 간단한 예제입니다.

+0

사용자가 정확히'client()'가 무엇을 언급하지 않았기 때문에'user'를 반환하는 것이 적절하지 않다고 생각합니다. 아마도 그는 전 세계적 범위에서 선언 할 수 있습니다. – Surya

+0

@ 수리아 : 어느 쪽인지 아는 그의 질문에 충분한 문맥이 없기 때문에 가정합니다. 클래스를 작성하고 'user'를 멤버 속성으로 저장해야한다고 제안 할 수도 있습니다. 그래서, 우리는 동의하지 않는다. – jdi

0

원하는대로 재사용 할 수 있습니다. 두 기능 모두에 표시되는 어딘가에 저장하면됩니다. 클래스를 만들고 정보를 필드에 넣거나 함수에서 반환하고 다른 함수를 호출 할 때 전달할 수 있습니다. 전역 변수는 나쁜 스타일이지만 그게 가능합니다.

0

"user"(더 나은 "user_input"또는 더 나은 것) 내용을 유지하려면 한 가지 방법은 "user"의 내용을 client()에서 반환하는 다른 것과 함께 반환하는 것입니다. 튜플에 넣은 다음 clientpersonalinfo()에 인수 (예 : clientpersonalinfo (user))를 전달합니다. 또 다른 방법은 계층 구조에서 "사용자"를 더 높이기위한 코드를 두어 client()와 clientpersonalinfo()를 호출하는 함수에 사용자가 있고 두 함수 모두에 인수로 전달하는 것입니다.

0

질문을 올바르게 이해했다면 가장 좋은 방법은 첫 번째 함수에서 입력 호출을 가져 와서 두 함수의 함수 정의를 변경하여 사용자를 인수로 가져 오는 것입니다. 코드는 다음과 같이 보일 것입니다 :

def client(user): 
    clients = [] 
    with open("clientes.txt",'r') as f: 
     for client in f: 
      clients.append(client.split('$')) 
    for client in clients: 
     if client[0] == user: 
      ... 

user = raw_input("To begin, enter your ID number: ") 
client(user) 

그리고 다른 하나는 유사합니다. 사물을 다루는 방법에는 몇 가지 변화가 있습니다. 예를 들어 파일을 여는 것보다 더 나은 문제를 처리하기 때문에 "열린 상태"양식을 사용하는 것이 좋습니다. 또한 이름이 당신이하고있는 것과 관련이 있도록 변수 이름을 지정하면 코드를 읽기 쉽게 만들 수 있으므로 A와 같은 이름은 사용하지 마십시오. 마지막으로, 일반적으로 입력 대신 raw_input을 사용해야합니다. 입력 함수는 사용자가 입력 한 내용을 평가합니다. 즉, 사용자가 일반적으로 원하지 않는 코드를 호출 할 수 있습니다. raw_input 함수는 사용자가 입력 한 내용이 들어있는 문자열을 반환합니다.

관련 문제