Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过引用将robot变量传递给python函数_Python_Frameworks_Robotframework - Fatal编程技术网

通过引用将robot变量传递给python函数

通过引用将robot变量传递给python函数,python,frameworks,robotframework,Python,Frameworks,Robotframework,我在Robot框架中使用自己的python函数。我给出了3个参数,这些参数是机器人框架变量。当我修改函数中的变量时,它不会在Robot框架中修改。所以我推断变量是通过值传递的,而不是通过引用传递的。。。有没有办法通过引用传递变量?或者返回3个变量作为结果 以下是机器人框架代码的示例: ** Settings *** Library OperatingSystem Library myLib.MyLib WITH NAME MyLib Suite TearDown

我在Robot框架中使用自己的python函数。我给出了3个参数,这些参数是机器人框架变量。当我修改函数中的变量时,它不会在Robot框架中修改。所以我推断变量是通过值传递的,而不是通过引用传递的。。。有没有办法通过引用传递变量?或者返回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”,我希望第二个日志打印“另一个值”(因为函数应该更改该值)


谢谢你的帮助

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…