python - 通过引用 python 函数传递机器人变量

标签 python frameworks robotframework

我在 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 没有改变。 dfoo 中的一个局部变量,它被更改为指向一个新的字典而不是 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/

相关文章:

python - 在机器人框架中测试完成后,有没有办法在电子邮件中发送 log.html、report.html 和 output.xml?

python - 在机器人框架中开始执行测试用例之前如何最初存储函数的返回值

python - 使用 PASSWORD_HASHERS 为 unittest 用户创建一个简单的密码

python - 有使用 Pyside 开发 Qt UI 的指南吗?

android - 是否可以在 Android 框架(库)中封装权限

java - 如何组织类接口(interface)层次结构?

python - 我怎样才能让我的 gradle 测试任务对不在 maven central 上的库使用 python pip install?

python - 如何在 Google App Engine 中清理 python 中的 html blob 上传?

python - Python 中调整后的余弦相似度

php - 哪些代码应该放在 MVC 结构中的什么地方