2012-03-31 10 views
-2

私は質問があります。ここでは、より良く理解するために私のコードの一部を持っている:Pythonの疑問

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"という名前が定義されていないというエラーが表示されます。

私は最初にclients()で使用したユーザー入力を思い出して、それを私のclientpersonalinfo()関数で再利用できるかどうかを知りたいと思います。

ありがとうございます!

私を助けたすべての人に感謝します!どうもありがとう! :)

+6

実際に質問を記述するタイトルを記入してください。 – agf

+2

あなたのコードが何であるかをもっと教えてください。また、A、B、CはPythonでは有効な変数名ではありません(技術的にはそれらはありますが、そのような名前はありません)。 – georg

+0

これは、これらの任意のA、B、C変数をすべて見るために私を本当に悩ましくし、コンテキストを覚えておくためにコード全体をスキャンする必要があります。 – jdi

答えて

2

引数を持つ関数を作成する方法についてはPythonのドキュメントを確認してください:http://docs.python.org/tutorial/controlflow.html#defining-functions

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

def myFunction2(user): 
    print user 

user = myFunction1() 
myFunction2(user) 

理想的には、代わりに私が厄介だと思うどのどこでもグローバルを使用しての、素敵なクラス構造を整理します。そのあなたが本当にあなたのすべての機能は、状態のいくつかの種類を共有する必要が終わると、あなたがグローバルのトンの定義を開始する必要があるかもしれないと思うときに、クラスを使用する必要があります良い兆候:

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

@ Suurya:いずれかの方法を知ることが彼の質問に十分な文脈がないので、仮定。あなたは、クラスを作成し、メンバ属性として 'user'を保存するべきであることを示唆しているかもしれません。だから、我々は同意しない – jdi

0

任意のものを再利用することができます。両方のファンクションに表示できる場所に保存するだけで済みます。クラスを作成して情報をフィールドに入れることもできますし、関数から関数を戻して他の関数を呼び出すこともできます。グローバル変数は悪いスタイルですが、それも実行可能です。

0

"user"(これは "user_input"などと呼ばれる)の内容を保持するには、client()で返す他のものと一緒に "user"のコンテンツを返します(clientpersonalinfo())を引数として渡します。つまり、clientpersonalinfo(user)です。もう1つの方法は、階層内で「ユーザー」を上位にするためのコードを入れ、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関数は、ユーザーが入力した内容を含む文字列を返します。