将函数作为变量传递,其结果是不同的引用对象,用于自动测试(python)

我有一个查询功能;对于相同的功能,结果可能会有所不同(这是利用随机游走的功能)。

因此相同的参数将产生不同的结果。

我想自动化测试并收集结果(以及失败的结果)。

我写道:

def test_query(function_query,sample=2):


  queries = []
  tests = sample
  failed_tests = 0

  while sample > 0 :
    query = function_query
    if query != None:
      queries.append( query )
      sample -= 1 
    else:
      failed_tests += 1
      # do it again
      test_query( function_query,sample)
  return queries,tests,failed_tests

queries,failed_tests = test_query( my_f,10)

此代码有效,但我注意到列表查询多次包含对同一对象的引用:

[<networkx.classes.graph.Graph at 0x14c2bacc0>,<networkx.classes.graph.Graph at 0x14c2bacc0>,<networkx.classes.graph.Graph at 0x14c2bacc0>]

相反,如果我在列表中运行查询:

[my_f for _ in range(2)]

我确实获得了不同的对象,请参见参考文献:

[<networkx.classes.graph.Graph at 0x14b206cc0>,<networkx.classes.graph.Graph at 0x14e258668>]

我认为参数function_query可能传递了相同的引用,因此我尝试通过深度复制传递值,例如:

from copy import deepcopy

def test_query(function_query,sample=2):

  function_query = deepcopy( function_query )

  queries = []

  ...

但不起作用。

您能帮助解释这种行为吗?

您能否显示一种编码模式以确保传递的函数“运行”并且所生成的对象被明确引用?

我知道我可以在一开始就声明一个查询样本列表,例如:

def test_query(function_query,sample=2):


  queries = [function_query for _ in range(2)]

  tests = sample
  failed_tests = 0

  ...

但这意味着样本包括成功的查询和失败的查询。

相反,我希望test_query在样本测试失败时再次运行查询,以便返回的列表包含所有成功的查询。

anothermimi 回答:将函数作为变量传递,其结果是不同的引用对象,用于自动测试(python)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3117668.html

大家都在问