通过多个函数python传递变量

时间:2018-04-05 19:27:34

标签: python function variables parameters

所以我试图创建一个提示用户选择的功能,并根据哪个选项对信息做些什么。

Optionone()基本上要求用户提供单个联系人的信息,每次填写此联系人时,它会在列表中创建一个完整的差异联系人列表。

在optionthree()中,我试图让用户询问他们想要显示的联系人。因此,一旦他们输入联系人姓名,代码就会显示整个列表,其中包含联系人的信息(姓名,地址,电话,电子邮件)。

我排除了与此问题无关的其他选项。

contact = []

def optionone():

    contactinfo = []

    name = str(input("Name: "))
    address = str(input("Address: "))
    phone = str(input("Phone: "))
    email = str(input("Email: "))

    contactinfo.append(name)
    contactinfo.append(address)
    contactinfo.append(phone)
    contactinfo.append(email)

    contact.append(contactinfo) 
    contactinfo = []

这是optionthree函数。

def optionthree(contactinfo):

    search = input("Name of contact: ")
    if search in contactinfo:
        print("This is what I'm trying to figure out")
    else:
        print("There is no contact with that name in your address book.")

    return contactinfo 

主菜单功能

def menu():

    option = int(input("""
        Menu Options:

        1. Add new contact
        2. Display address book
        3. Search for contact
        4. Modify contact
        5. Delete contact
        6. Exit 

        Choose an option: """))
    if option == 1:
        optionone()

    elif option == 3:
        info = optionthree(contactinfo)

main()

现在,当我在终端中运行它时,它告诉我在分配之前我引用变量 contactinfo 。参数的整个概念和通过函数传递变量对我来说非常混乱;这段代码有什么问题?

3 个答案:

答案 0 :(得分:0)

您在main函数中使用contactinfo,但未在main函数中定义它。我注意到你定义了一个全局变量" contact"。不确定它是否是同一个变量

答案 1 :(得分:0)

您似乎试图在为contactinfo分配任何值之前引用它。如果您需要在执行选项3之前执行选项1,那么您可能希望选项3首先检查contactinfo是否存在。如果它不存在,我建议将该行写成如下:

info = optionthree(optionone())

答案 2 :(得分:0)

在Stack Overflow,我们一次处理一个问题。在这种情况下,直接问题是未定义的变量。如果您仍然无法弄明白,请在单独的帖子中处理信息查询。

我要去除额外的信息以便说明。这是一个很好的编程技术:采取一些步骤。首先,我们要将名称​​仅添加到列表中并能够找到它。你已经几乎连接了所有东西。

要记住的基本原则是每个函数都有自己的"名称空间" (变量和值的目录)。函数通过参数列表和返回值相互通信。是的,也有全局变量。现在,不要使用它们。

option_one的目的是在信息列表中添加名称,并使更改可用于主程序。您忘记了最后一部分:您必须在完成后发回更新的列表:

def option_one(contact_list):

    name = str(input("Name: "))
    contact_list.append(name)
    print("OPT 1 contact_list", contact_list)    # trace what you do for debugging purposes.
    return contact_list

def menu():
    # Menu text omitted

    master_list = []

    if option == 1:
        master_list = option_one(master_list)
        print("MAIN ", master_list)

    elif option == 3:
        info = option_three(master_list)

menu()

制作您的主要节目"拥有"主列表 - 选项功能只是获取副本,执行他们的"事物",并返回更新列表(如果需要)。主程序必须初始化该列表master_list,并将其移交给每个选定的函数。

每个函数都有自己的小世界:它从调用程序获得的内容,它创建的局部变量,以及它完成后的回复。每个例程都可以通过它选择的 local 名称来调用该联系人列表;我已将其称为contact_list(正如您所做的那样,但使​​用" Pythonic"标点符号)。

输出:

        Choose an option: 1
Name: Mark
OPT 1 contact_list ['Mark']
MAIN  ['Mark']