Python:在函数之间使用变量

Python:在函数之间使用变量,python,function,variables,python-2.7,Python,Function,Variables,Python 2.7,Python中有一些东西一直困扰着我(哈!)(我使用2.7)。这是因为当我运行此代码时,我得到了name错误:未定义全局名称“x”: def function1(): x = 1 return 0 def function2(): function1() print(x) return 0 function2() 这对我来说不是一个严重的问题,但我真的很好奇为什么这不打印1。这是有道理的,并且在我的脑海中流动。定义变量x的函数在调用之前定义,函数在p

Python中有一些东西一直困扰着我(哈!)(我使用2.7)。这是因为当我运行此代码时,我得到了
name错误:未定义全局名称“x”:

def function1():
    x = 1
    return 0

def function2():
    function1()
    print(x)
    return 0

function2()

这对我来说不是一个严重的问题,但我真的很好奇为什么这不打印1。这是有道理的,并且在我的脑海中流动。定义变量
x
的函数在调用之前定义,函数在
print(x)
之前调用。我真的不明白为什么这个代码不起作用。也许我对这件事的想法是有缺陷的。不管怎样,为什么代码不打印1?提前感谢您的帮助

在这两个函数中,使用
全局x
作为第一行。这将使您的代码正常工作。但是,无论如何,在函数之间传递变量不是一个好的实践。返回值并使用参数是一种很好的做法


如果您正在测试变量共享,那么您正在使用全局变量。因此,与javascript不同,您需要在尝试获取它之前使用
global x
,就像在php中一样(除非使用严格模式,否则在php中不会出现错误)。

x
范围仅在
function1()
内,这就是为什么您不能在
function2()内打印
x
,即使您正在调用
function1()
(当您从
function1()
返回时,
x
将被销毁)

是的,您的想法是有缺陷的。
function1
中定义的变量
x
是该函数的局部变量。它在其他任何地方都不存在。当您用一个函数调用另一个函数时,这并不意味着来自被调用函数的所有变量都被转储到调用函数中。仅传回返回值。如果要在第二个函数中使用
x
,应该从
function1
返回它。(即使这样,它也不会在
function2
中创建一个名为
x
的变量。它只会返回值,您可以在
function2
中指定该值,或者打印它,或者其他任何内容。)

因为
function1
范围内的变量
x
是本地变量,而
function2
没有“查看”这个变量

词法范围界定:我更改了标题,因为我意识到太晚了一点,它是相当误导。很抱歉谢谢你所有的好答案。也许你应该补充一点,你必须在function2()中打印function1()。老实说,在问这个问题之前,我对变量作用域不太了解。我认为它们可以被程序的所有部分使用,即使它们是在函数中定义的。无论如何,谢谢!Python名称空间的分层方法对于编写好的代码非常关键,并且在测试后信任它。这确实可以解决问题,但是全局变量通常不好使用,应该避免使用。