在其他函数中使用全局变量不起作用

时间:2018-11-25 11:30:29

标签: python

这是我的问题的简化示例。我需要使用在另一个函数中创建的变量,但是将global放在变量实例化之前不起作用。

x = 10
def one():
    global x
    a = x +2
    b = a/2
    print (b)
def two():            
    one()             
    c = int(input())            
def three():
    global a
    global c           
    d = c + a         
    print(b)

two()         
three()

3 个答案:

答案 0 :(得分:2)

要在Python中使用全局变量,您需要这样声明它们:

x = 10

def one():
    global x
    global a
    global b
    a = x +2
    b = a/2
    print (b)

def two():            
    one()             
    global c
    c = int(input())            

def three():
    global a
    global c           
    d = c + a         
    print(d)
    print(b)

two()       
three()

在Python中,在文件顶部定义的变量(不在函数,if语句等内部)被视为全局变量,并且可以在整个文件中访问(在其他函数等中),但也可以在导入该文件的任何文件中访问文件。

在除主体(例如函数)以外的范围中定义的变量,该变量仅可用于该函数。在这种情况下,如果您在主体以外的主体中定义新变量,则需要在创建变量之前告诉Python该变量是全局变量。同样,如果需要访问全局变量,则需要在尝试访问它之前使用global var

不是最佳实现。我将建议像其他人一样使用带有参数和返回的类或函数。

答案 1 :(得分:0)

使用return语句和函数参数:

x = 10
def one(x):
    a = x +2
    b = a/2
    print(b)
    return a, b

def two():                        
    c = int(input()) 
    return c    

def three(a, b, c)                 :         
    d = c + a         
    print(b)

a, b = one(x)
c = two()         
three(a, b, c)

答案 2 :(得分:-1)

您可以尝试将这三个函数移到某个类中,在此类中创建一个“ x”属性,然后在上面的函数中将此“ x”用作self.x