在主代码中创建函数更改变量

时间:2014-07-12 22:13:52

标签: python

我想创建一个执行以下操作的函数:

def func(*args):
    for arg in args:
        arg+=1

a = 5
b = 6
c = 7
func(a,b,c)
print("%i,%i,%i"%(a,b,c))

我希望它返回:

6,7,8

我该怎么做?

5 个答案:

答案 0 :(得分:4)

你不能!当当。

Python不支持任何形式的传递引用。改为返回值:

def func(*args):
    return [arg + 1 for arg in args]

a = 5
b = 6
c = 7
a, b, c = func(a, b, c)
print("%i,%i,%i" % (a, b, c))

答案 1 :(得分:0)

您不能,至少不能使用整数值。整数是不可变的,因此您无法更改其值,并且函数无法访问其调用者的命名空间,因此您无法重新绑定变量(即,为变量{{1}分配新值在函数之外)。请参阅this question以及其他各种有关影响函数变量的能力和不能做的事情。

如果你的变量是像列表这样的可变类型,你可以通过改变列表的值来实现类似的效果:

a

但是,您应该考虑为什么要这样做。简单地返回值并将它们分配给函数之外可能更好。

答案 2 :(得分:0)

你不能这样做,因为当你传入一个变量时,它会把它作为它的值,而不是它的变量。

相反,return值:

def func(*args):
    args = list(args)
    for i in range(len(args)):
        args[i]+=1
    return args

a = 5
b = 6
c = 7
a, b, c = func(a,b,c)
print("%i,%i,%i"%(a,b,c))

哪个输出:

>>> print("%i,%i,%i"%(a,b,c))
6,7,8
>>> 

答案 3 :(得分:0)

3个帖子告诉“你不能”但是“不可能没有法语”。 Python是编程语言的通用语言。 所以有可能:

#!/usr/bin/env python                                                                                                                                                              

def func(args):
    for i in range(len(args)):
        args[i] += 1

abc = [5, 6, 7]
func(abc)
print("%i,%i,%i" % tuple(abc))

实际打印

6,7,8

答案 4 :(得分:0)

你不能轻易做到这一点,因为Python不会通过引用传递不可变对象,如整数。但是,如果您将当前范围内的对象的名称传递给函数,则可以实现以下目标:

import sys

def func(*args):
    namespace = sys._getframe(1).f_globals  # caller's globals
    for arg in args:
        namespace[arg] += 1

a = 5
b = 6
c = 7
func('a','b','c')  # note variable *names* passed to function
print("%i,%i,%i" % (a,b,c)) # -> 6,7,8