通过引用将robot变量传递给python函数
我在Robot框架中使用自己的python函数。我给出了3个参数,这些参数是机器人框架变量。当我修改函数中的变量时,它不会在Robot框架中修改。所以我推断变量是通过值传递的,而不是通过引用传递的。。。有没有办法通过引用传递变量?或者返回3个变量作为结果 以下是机器人框架代码的示例:通过引用将robot变量传递给python函数,python,frameworks,robotframework,Python,Frameworks,Robotframework,我在Robot框架中使用自己的python函数。我给出了3个参数,这些参数是机器人框架变量。当我修改函数中的变量时,它不会在Robot框架中修改。所以我推断变量是通过值传递的,而不是通过引用传递的。。。有没有办法通过引用传递变量?或者返回3个变量作为结果 以下是机器人框架代码的示例: ** Settings *** Library OperatingSystem Library myLib.MyLib WITH NAME MyLib Suite TearDown
** 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”,我希望第二个日志打印“另一个值”(因为函数应该更改该值)
谢谢你的帮助 python代码中的var是一个局部变量
import sys
class MyLib(object):
def __init__(self):
return
def myFunction(self,var):
var="another value"
这为myfunction作用域中的变量命名为var,并防止读取全局变量。
如果希望函数更改全局变量,则需要在作用域中将其声明为全局变量。
像这样:
import sys
class MyLib(object):
def __init__(self):
return
def myFunction(self,var):
global var
var="another value"
这会将全局变量更改为另一个值字符串。所有值基本上都是通过引用传递的。如果你改变了值,你会在任何地方改变它,但是如果你给变量分配了一个不同的值,你只是让变量指向一个不同的值,而不是改变原始值 例如:
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\u 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代码。总之,按照Spoonmiser的建议,将
return var
添加到myFunction
中,并将您的射频代码更改为重新分配${var}=myFunction…