我想创建一个执行以下操作的函数:
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
我该怎么做?
答案 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