关于在Python中为变量赋值

时间:2015-06-12 18:19:07

标签: python

在这里,我编写了两个简单的程序,并期望结果相同: 程序1(结果= 123):

price=[]
def checkCondition(a,b):
    if a<b:
        price.append(123)
if  __name__ == '__main__':
    checkCondition(1,2)
print price[0]

计划2(结果=&#39;&#39;):

price=''
def checkCondition(a,b):
    if a<b:
        price=123
if  __name__ == '__main__':
    checkCondition(1,2)
print price

为什么它不能在程序2中为123分配价格?

4 个答案:

答案 0 :(得分:2)

您正在分配一个局部变量。告诉Python使用全局变量:

price=''
def checkCondition(a,b):
    global price # now reassigning price
    if a<b:
        price=123
if  __name__ == '__main__':
    checkCondition(1,2)
print price

来自Python文档Naming and binding

  

如果名称绑定操作发生在代码块中的任何位置,则块中名称的所有使用都将被视为对当前块的引用。 [...]

     

如果全局语句出现在一个块中,则语句中指定的名称的所有使用都将引用该名称在顶级命名空间中的绑定。

答案 1 :(得分:0)

有两种类型的python变量:globals和locals。可以从代码中的所有位置访问全局变量。但是本地人只能从他们创建的def()定义中获得。默认情况下,您在函数中创建的变量是本地的,因此全局价格(='')和函数中的本地价格(= 123)。要使其全局化并使用函数定义开头的新类型替换现有的全局变量:

global price

这使您的功能全局变为价格变量。

第一个起作用是因为你没有制作局部变量。你在现有变量(价格)上做了一些事情。如果现有变量是全局变量那么不重要。

答案 2 :(得分:0)

您需要告诉解释器您指的是全局名称,因为默认情况下函数内的名称是其作用域的本地名称:

price=''
def checkCondition(a,b):
    global price
    if a<b:
        price=123
if  __name__ == '__main__':
    checkCondition(1,2)
print price

答案 3 :(得分:-1)

请注意,在函数内部,您可以使用全局变量,但无法在不使用{"errorMessages":[],"errors":{"status":"Field 'status' cannot be set. It is not on the appropriate screen, or unknown."}}声明的情况下对其进行更改(请参阅here)。

重要文件中的引用:

  

在没有全局变量的情况下分配给全局变量是不可能的,尽管自由变量可以引用全局变量而不被声明为全局变量。

第一个程序通过调用方法来使用变量,这是可以的,它global解析为全局变量。对于第二个,您打算更改全局变量的值,除非使用price声明变量,否则该值不可行。由于您无法更改全局变量的值,因此它将创建一个新的局部变量并将值赋给它。

要解决此问题,您需要先使用global进行声明:

global