函数,Python中的变量

时间:2018-06-14 05:35:14

标签: python function variables

在Python中,我有global variable,名为d,其中d = 3。我还有两个功能,f1f2。 f1返回d + 4,f2取一个名为d的变量,并返回f1()。我怎么称呼f2(5)returns 7而不是9?我passed 5,设置d = 5。所以当调用f1时,d = 5,那么不是5 + 4 = 9?我在这里缺少什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个:

d = 5
def f1(arg):
   return arg+4
def f2(arg):
   return f1(arg)
print(f2(d))

输出:

9

答案 1 :(得分:1)

这是因为python的范围规则。如果在函数范围内使用全局变量,则它将被视为新变量,其范围仅限于该函数。因此,当您从f2()调用f1()时,变量d的范围将重置为全局值,即3.要修改它,您必须在函数f1()内使用全局关键字声明d。 以下是工作示例:

d=3

def f1():
    return d+4

def f2(val):
       global d 
       d = val
       return f1()

  a = f2(5)
  print a

答案 2 :(得分:1)

d = 3 # this is a global variable

def f1():
    '''
    when a function doesn't find a local copy of a variable, it uses the global variable.
    But, if you try to change a global variable, Python creates a local copy of the same variable and uses the local variable and the global variable remains untouched.
    '''
    return d + 4

def f2(d):
    '''
    the d here is a local variable
    the global d remains untouched as functions reference the local d everytime d is used
    '''
    return f1()

f1()始终使用全局d。更改局部参数的值永远不会更改全局变量。

>>> x = 20
>>> def f():
...   x = 30
...   print x
...
>>> f()
30
>>> print x
20

当在f()中更改x时,Python创建了x的本地副本并更新了本地x。全局x保持不变,这就是为什么即使在函数调用之后,x的值也没有改变。

要解决此问题,即从函数内部更改全局变量的值,必须在使用变量之前将该变量声明为全局变量。这是如何完成的。

>>> x = 20
>>> def g():
...   global x
...   x = 2
...   print x
...
>>> print x
20
>>> g()
2
>>> print x
2