不能在Python的另一个函数中使用函数的变量

时间:2018-02-05 15:29:52

标签: python function scope

我有一个非常简单的问题,但我无法理解它。

我试图让用户输入所需的网站名称,然后使用它来决定在另一个功能中使用该名称的全名。这是该功能的基础知识。

def website():
    x = input("Enter url:")
    global url
    if 'Google' in x:
        url = ("www.google.com")
    else:
        "Try again!"
        website()

这只有在我有全局网址的情况下才有效。否则,它会中断。在main函数中,它尝试立即使用来自website()的输出url,但返回:

NameError: name 'url' is not defined

如果全球网址不在那里。下一个函数按字面打印前一个函数的结果。它会做得更多但是因为我甚至无法进行印刷,但我还没到达那个阶段。

2 个答案:

答案 0 :(得分:0)

您可以通过从函数返回变量来传递变量。如:

def foo():
    url="google.com"
    return url  #this will send the variable URL to wherever it was called from
def bar(url):
    print url

bar(foo())  #this calls the function `bar()` 

函数bar()接受我们称为url的变量(这不需要与函数foo()中的变量相同,但它可以是)。然后在括号内部调用foo(),它返回url中的数据。

答案 1 :(得分:0)

我不明白也不知道你有没有尝试过,但我会尽力猜测:

def website():
    x = input("Enter url:")
    if 'Google' in x:
        url = ("www.google.com")
        return url
    else:
        print("Try again!")
        return website()

if __name__ == '__main__':
    url = website()
    print(url)

但请注意,如果调用次数超过1024次(在默认实现中),此递归调用可能会使您遇到麻烦(堆栈溢出)。

更好

def website():
    while True:
        x = input("Enter url:")
        if 'Google' in x:
            url = ("www.google.com")
            return url
        print("Try again!")

人们可能会发现使用无限循环很难看,但它优于递归调用。