为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用设置为“无”的可选参数

如何使用设置为“无”的可选参数

米琪卡哇伊 2021-03-18 09:12:37
使用命名参数,如何告诉接收器方法使用参数的“未提供”版本?无发送功能不起作用。以下是我的特定代码,请特别注意以下部分:args=launch[1:] if launch[4] is not None else None我想尽可能保持列表理解procs = [Process(name=key, target=launch[0],               args=launch[1:] if launch[4] is not None else None)       for key, launch in zip(procinfos.keys(), launches)]结果是选择了进程的单参数版本,然后抱怨参数为无:File "<stdin>", line 15, in parallel          for key, launch in zip(procinfos.keys(), launches)]File "/usr/lib/python2.7/multiprocessing/process.py", line 104, in __init__ self._args = tuple(args)TypeError:“ NoneType”对象不可迭代当然,有一种蛮力方法:即复制理解的一部分,而只是避免指定args =参数。我可能最终会走那条路线..除非在这里神奇地出现了替代方法;)
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您可以使用参数解包将指定的参数指定为字典,args如果则不存在launch[4] is None,例如:


procs = []

for key, launch in zip(procinfos.keys(), launches):

     params = {"name": key, "target": launch[0]}

     if launch[4] is not None:

         params["args"] = launch[1:]

     procs.append(Process(**params))


查看完整回答
反对 回复 2021-03-24
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

的默认值args是一个空的元组,不是None:


launch[1:] if launch[4] is not None else ()

我真的会避免编写三行单行代码。常规for循环没有错:


processes = []


for key, launch in zip(procinfos, launches):

    args = launch[1:] if launch[4] is not None else ()

    process = Process(name=key, target=launch[0], args=args)


    processes.append(process)


查看完整回答
反对 回复 2021-03-24
?
临摹微笑

TA贡献1982条经验 获得超2个赞

替换None为空的元组:()


procs = [Process(name=key, target=launch[0],

           args=launch[1:] if launch[4] is not None else ())

   for key, launch in zip(procinfos.keys(), launches)]


查看完整回答
反对 回复 2021-03-24
  • 3 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信