怀疑Python

时间:2012-03-31 17:30:58

标签: 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”。

所以我想知道我是否可以回忆起我在客户端()中首次使用的用户输入,并在我的clientpersonalinfo()函数中重用它。

感谢您的帮助!!

感谢所有帮助过我的人!非常感谢! :)

4 个答案:

答案 0 :(得分: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 

请注意,这个课程是一个非常简单的例子。

答案 1 :(得分:0)

你可以重复使用你想要的任何东西,你只需将它存储在两个功能都可见的地方。您可以创建一个类并将信息放在一个字段中,或者您可以从函数返回它并在调用另一个函数时将其传递给它。全局变量是糟糕的风格,但这也是可行的。

答案 2 :(得分:0)

要保留“user”的内容(更好地命名为“user_input”或其他一些内容),一种方法是返回“user”的内容以及您在client()中返回的其他内容,也许是一个元组,然后将它作为参数传递给clientpersonalinfo(),即clientpersonalinfo(用户)。另一种方法是在层次结构中放置用于获得“user”的代码,以便用户存在于调用client()和clientpersonalinfo()的函数中,然后将其作为参数传递给两个函数。

答案 3 :(得分: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)

而另一个则类似。处理事情的方式有很多变化。建议使用“with open”形式,因为它比仅打开文件更好地处理问题。另外,命名变量以使名称与您正在执行的操作相关,这使得代码更易于阅读,因此请避免使用类似A的名称。最后,您应该使用raw_input而不是输入。输入函数评估用户输入的内容,这意味着用户可以调用一些通常不是您想要的代码。 raw_input函数返回一个字符串,其中包含用户放入的内容。