抱歉,如果这是个愚蠢的问题,但我已经找了一段时间,并没有真正找到答案。
如果我正在编写一个python函数,例如:
def function(in1, in2):
in1=in1+1
in2=in2+1
我怎样才能使这些变化保持不变?
我知道他们为什么不这样做,这已经在许多答案中得到了解决,但是我找不到一个答案来回答如何让他们这样做的问题。如果不返回值或生成某种类,函数真的没有办法在全局意义上对其参数进行操作吗?
我也希望这些变量本身不是全局变量,因为我希望能够这样做:
a=1
b=2
c=3
d=4
function(a,b)
function(c,d)
这只是一厢情愿吗?
如果你想修改变量的值,你可以让你的代码
这允许您使用函数实际更改
a
和b
变量的值。这是可以做到的,但我警告你-这不会很好!您可以做的是捕获函数中的调用方框架,然后提取调用行,解析它并提取传递的参数,然后将它们与函数签名进行比较并创建参数映射,然后调用函数,并且在函数完成本地堆栈中的更改后,将其与映射的调用方框架进行比较并更新变化。如果你想看看它有多傻,这里有一个演示:
现在你可以很容易地装饰你的功能,使它能够执行这种不虔诚的滑稽:
现在,演示:
显然,这只适用于带有位置参数的非嵌套函数,并且只有当您传递简单的本地参数时,才可以随意进入处理关键字参数、不同堆栈、返回/包装/链接调用和其他诡计(如果您喜欢的话)的兔子洞。
或者,您知道,您可以使用为此而发明的结构,比如全局变量、类,甚至是封闭的可变对象。别再杀小精灵了。
你可以:
python函数是关闭的->;调用函数(a,b)s时,a和b被重新分配到本地(函数)引用/指针in1和in2,这些引用/指针在函数外部不可访问。使用globals提供对这些新值的引用,而不使用globals,则需要将其传递回return。
将数组或非基元对象传递到函数中时,可以修改该对象的属性,并使这些修改对外部该对象的其他引用可见,因为该对象本身包含指向这些值的指针,使包含该对象指针的任何其他对象都可见。
相关问题 更多 >
编程相关推荐