【问题标题】:Python: How do I change a global variable when it is a paramter inside a function?Python:当全局变量是函数内的参数时,如何更改它?
【发布时间】:2020-11-12 02:18:51
【问题描述】:

例如:

x = {'a':1, 'b':2}
y = {}

# only requirement: x and y has to be parameters of function foo
def foo(x,y):
    '''
    How do I switch the two variables inside this function without scope issues?
    '''

print('x =', x)
print('y =', y)

结果:

x = {}
y = {'a':1, 'b':2}

我尝试将 global x, yx,y = y,x 放入函数中,但由于它们已经是全局的,所以得到了预期的错误:

SyntaxError: name 'x' is parameter and global
# Same thing happens for y

【问题讨论】:

  • 重命名参数,不要使用xy,因为它已经代表全局变量
  • x 和 y 必须是函数 foo 的参数,抱歉忘了提。
  • 我的意思是你可以将x,y重命名为其他名称,并不是要删除它们,不要让参数名称与全局变量相同,因为它会引发@987654330 @

标签: python variables global-variables


【解决方案1】:

如果您正在使用全局变量,请不要使用 args ;-)

def foo():
  global x,y
  x,y = y,x

启发我的替代想法

def foo(x,y):
  return [y,x]

myList = foo(x,y)
x,y = myList[0], myList[1]

【讨论】:

  • 抱歉忘了说 x 和 y 必须是函数 foo 的参数。
  • 然后让函数在交换后返回一个类似return [x,y]的列表,然后分配给变量,然后进入x,y!伙计,这很容易
  • 对不起,我还在学习。我不明白。你能帮我想象一下这些步骤吗?
【解决方案2】:
x = {'a':1, 'b':2}
y = {}

def foo():
    global x,y  #bring global variable in func scope
    x,y = y,x #swaps variable variable values

def foo1():
    globals()['x'] = {'a':1, 'b':2}  #update value of global variable in func
    globals()['y'] = {}

#method1
foo()
print(x,y)

#method2
x = {'a':1, 'b':2}
y = {}
foo1()
print(x,y)

这两个功能都可以使用。

如果您想将变量作为 args 发送: 检查 Python 变量可变性的概念。 另外检查this

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多