0

作成中のプログラム全体でリストを使用したいと考えています。基本的には、さまざまな人に関する情報を含むタプルでいっぱいのリストであり、各人の情報 (名前、電話番号、住所など) がタプルとして格納されます。このリストは初期関数で定義しますが、これを対話関数や他の関数で使用する必要があります。

私の質問は、このリストをグローバル変数として定義せずに使用することは可能ですか?

def load_friends(filename):
    """imports filename as a list of tuples using the import command"""
    import csv
    with open(filename, 'Ur')as filename:
        friends_list = list(tuple(x) for x in csv.reader(filename, delimiter=','))

def add_friend(friend_info, friends_list):
    """appends the friend_info tupple to the list friends_list"""
    new_list = friends_list.append(friends_info)

def interact():
    """interaction function: accepts user input commands"""
    while True:
        command = raw_input('Command: ')  

また、使用入力を解析して関数を実行するコマンドがあることにも言及する必要があります。これはリストの使用に影響しますか?

4

4 に答える 4

0

はい。「友達のリスト」を引数として関数間でやり取りします。

load_friends()になるだろう

def load_friends(filename):
    import csv

    with open(filename, 'Ur') as f:
        return map(tuple, csv.reader(f, delimiter=","))

add_friend()は近いですが、既存のリストを適切に変更するため、への割り当てnew_listは不要です。list.append()

def add_friend(friend_info, friend_list):
    friend_list.append(friend_info)

で十分でしょう。

interact()にもfriends_list引数があります。

def interact(friends_list):
    #interaction stuff here...

次のように呼び出すことができます。

interact(load_friends("myfile.csv"))
于 2013-04-09T14:12:02.600 に答える
0

クラスはこの種のことに役立ち、使いやすいです。

class PersInfo:

    def setName(self, name):
        self._name = name

    def getName(self):
        return self._name

    def setNumber(self, number):
        self._phNumber = number

    def getNumber(self):
        return self._phNumber

    def setAddr(self, address):
        self._address = address

    def getAddr(self)
        return self._address

def main():
    # Read in data from your CSV Here

    infoList = ([])
    for person in person_list: # Assuming person is a tuple here
        foo = PersInfo()
        foo.setName(person[index1])
        foo.setNumber(person[index2])
        foo.setAddr(person[index3])
        infoList.append(foo)

    # To access the info...
    for person in infoList:
        print(person.getName())
        print(person.getNumber())
        print(person.getAddr())

最終的に、リストは「グローバル」なものになります。オブジェクトがインスタンス化されているmain()関数内にあります。PersInfoこれはあなたが望んでいた以上かもしれませんが、長い目で見れば、コードを整理して読みやすくするための良い方法です。

また、infoList私が作成した を作成している場所に直接作成することもできperson_listます。

于 2013-04-09T16:09:07.057 に答える
0

次のことができます。

# you can define the list here, it's global but doesn't require the keyword    
my_list_globally = []

def func1(the_list):
    pass

def func2(the_list):
    pass

def func3(the_list):
    pass

# you can use a hub function to pass the list into things that need it
def main():
    my_list = []
    func1(my_list)
    func2(my_list)
    func3(my_list)

if __name__ == "__main__":
    main()

あなたの質問の最後の部分はよくわかりませんが、これらの2つの方法のいずれかが必要になります。

于 2013-04-09T14:03:40.837 に答える