【问题标题】:Check if return is not None检查 return 是否不是 None
【发布时间】:2018-10-29 16:40:19
【问题描述】:

在python3中这样做效率高吗?

if request_link(requested_domain, requested_link) is not None
    domain_res, link_res, r_res = request_link(requested_domain, requested_link)
    parse_results(domain_res, r_res)

这是否意味着解释器会检查同一个函数两次?

效率高吗?如果没有,检查函数是否返回 none 并根据结果采取行动的更好方法是什么?

谢谢!

【问题讨论】:

  • 是的,这意味着该函数将被执行两次
  • 假设解释器没有运行该函数两次,它怎么知道第二次调用返回了相同的值?如果您考虑一段时间,您的问题基本上会自行回答......

标签: python python-3.x if-statement return nonetype


【解决方案1】:

为结果命名?

ret_value = request_link(requested_domain, requested_link)
if ret_value is not None
    domain_res, link_res, r_res = ret_value
    parse_results(domain_res, r_res)

【讨论】:

    【解决方案2】:

    将返回值传递给变量似乎是最快、最自然的方式。非常感谢!

    结案! :)

    顺便说一句,wtf 有那些质量要求?!我不能只说是什么解决了问题并感谢人们吗?!我对所有对我有帮助的答案都投了赞成票。

    【讨论】:

      【解决方案3】:

      也许只是将返回结果存储在 if 语句之前:

      res = request_link(requested_domain, requested_link) 
      

      如果 res 不是 None: domain_res, link_res, r_res = res parse_results(domain_res, r_res)

      【讨论】:

        【解决方案4】:

        在我看来,你调用了同一个函数两次,可能效率不高,除非 python 神奇地检测到你之前调用了这个函数并保留输出以防止重复调用。 从我所见,听起来你的 request_link 函数返回一个 None 或一个包含 domain_res、link_res、r_res 的列表,但如果我想这样做,我会这样做:

        def request_link(requested_domain, requested_link):
            ...
            if desired_otput:
                return True,domain_res, link_res, r_res
            else: 
                return False, None, None, None
        

        然后在main函数中:

        result = request_link(requested_domain, requested_link)
        if result[0]:# this means that results are not none
            #do what you want with result[1], result[2] , result[3]
        

        这样你就不必调用函数两次了

        【讨论】:

          猜你喜欢
          • 2023-03-02
          • 1970-01-01
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-24
          • 2020-01-30
          相关资源
          最近更新 更多