对Python的质疑

对Python的质疑,python,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]

我有个问题。为了更好地理解,这里有我的部分代码:

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()函数中重复使用它

谢谢你的帮助


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

请查看python文档,了解如何编写带参数的函数:

理想情况下,您应该组织一个很好的类结构,而不是到处使用globals,我认为这很混乱。这是一个很好的迹象,当所有函数最终都需要共享某种状态时,您确实应该使用一个类,并且您认为可能需要开始定义大量全局变量:

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 

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

您可以重用任何您想要的东西,只需将它存储在两个函数都可见的地方。您可以创建一个类并将信息放在字段中,也可以从函数返回信息,并在调用另一个函数时将其传递。全局变量的样式不好,但这也是可行的。

为了保留“user”的内容(最好将其命名为“user\u input”或类似的名称),一种方法是返回“user”的内容以及在client()中返回的任何内容,可能是元组,然后将其作为参数传递给clientpersonalinfo(),即clientpersonalinfo(用户)。另一种方法是在层次结构中将“user”放在更高的位置,以便user存在于调用client()和clientpersonalinfo()的函数中,然后将其作为参数传递给这两个函数。

如果我正确理解您的问题,然后我认为最好的方法是将输入调用从第一个函数中取出,并更改两个函数的函数定义,以将用户作为参数。代码将类似于:

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这样的名称。最后,您应该使用原始输入,而不是一般的输入。input函数评估用户输入的内容,这意味着用户可以调用通常不是您想要的代码。raw_输入函数返回一个字符串,其中包含用户输入的内容

请写一个标题来描述你的问题。你需要告诉我们你的代码是关于什么的。此外,A、B、C在Python中不是有效的变量名(从技术上讲,它们是有效的,但没有人这样命名)。看到所有这些任意的A、B、C变量,我真的很恼火,必须扫描整个代码才能记住上下文。在全局范围内声明
user
。i、 我认为,由于用户没有提到
client()
的确切功能,因此返回
user
并不合适。也许,他可以在全局范围内声明。@Surya:这是一个假设,因为在他的问题中没有足够的上下文来知道任何一种方式。您还可以建议他编写一个类并将
user
存储为成员属性。所以,我们不同意
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)