我在 Robot Framework 中使用我自己的 python 函数。我给了3个参数,这些参数是Robot Framework变量。当我修改函数中的变量时,它不会在 Robot Framework 中修改。所以我推断变量是按值传递而不是按引用传递...有没有办法按引用传递变量?或者作为结果返回 3 个变量?
这是机器人框架代码的示例:
** Settings ***
Library OperatingSystem
Library myLib.MyLib WITH NAME MyLib
Suite TearDown teardown
** Variables **
${var} azerty
** Test Cases **
My test case
log ${var}
myFunction ${var}
log ${var}
使用我的 python 库:
import sys
class MyLib(object):
def __init__(self):
return
def myFunction(self,var):
var="another value"
但正如我所说,当我记录它时,变量 var 仍然是“azerty”,我希望第二个日志打印“另一个值”(因为函数应该更改值)
感谢您的帮助!
最佳答案
所有值基本上都是通过引用传递的。如果你改变了这个值,你会在所有地方改变它,但是如果你给变量分配一个不同的值,你只是让那个变量指向不同的值,而不是改变原始值。
例如:
def foo(d):
d['bar'] = 'baz'
my_dict = {}
foo(my_dict)
此处,my_dict
将被更改为调用 foo(my_dict)
的副作用。
但是:
def foo(d):
d = {'foo': 'bar'}
my_dict = {}
foo(my_dict)
这里,my_dict
没有改变。 d
是 foo
中的一个局部变量,它被更改为指向一个新的字典而不是 my_dict
。
您还需要注意,在 Python 中,您有可变 和不可变 值。例如,字符串是不可变的。您将永远无法更改一个字符串,您只能使用一个字符串来构造新的字符串(并且通常您会将这些新值分配回同一个变量,因此它会产生类似的效果);函数的副作用是更改传入的值之一只有在它们是可变值时才有效。
不过,改变函数的参数通常不是一个好主意。更好的方法是让它们返回新值,然后调用者可以用它做他们想做的事。
def myFunction(self, var):
var = "another value" # I assume that another values is based somehow on the original
return var
或者,您可以在类上使用属性:
class MyLib(object):
def __init__(self):
self.var = "initial value"
def myFunction(self):
self.var = "another value"
关于python - 通过引用 python 函数传递机器人变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179724/