【问题标题】:One vs many return values on dynamic method calls?动态方法调用的一对多返回值?
【发布时间】:2015-06-09 18:41:14
【问题描述】:

我正在使用字符串按名称访问方法:

def blah(str) :
  method = getattr(self,str)
  x1, x2 = method()

问题有时是我使用的方法返回一个参数而不是两个参数,我收到以下错误:

TypeError: 'numpy.float64' object is not iterable

处理单个返回值和多个返回值的最简洁方法是什么。 谢谢

【问题讨论】:

  • 如何使用列表,例如a_list = method()?
  • 我也想过,但这意味着我必须在 blah() 方法中添加处理以处理一对多的情况。
  • 这有什么问题?
  • 我预计会有简单的方法:)

标签: python dynamic methods call


【解决方案1】:

可能是这样的:

result = method()
try:
    x1, x2 = list(result)
except TypeError:  # "result" is not iterable
    x1, x2 = [result, None]

在 Python 中,它是 easier to ask forgiveness then permission

请注意,这不包括 method 返回的列表元素数量错误(即不是两个)的情况。

对于那些情况,这样的事情可能是合适的:

result = method()
try:
    result_list = list(result)
except TypeError:  # "result" is not iterable
    result_list = [result]

NUMBER_OF_VARS = 2
final_list = [None] * NUMBER_OF_VARS
final_list[:min(NUMBER_OF_VARS, len(result_list))] = result_list[:NUMBER_OF_VARS]
x1, x2 = final_list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多