【问题标题】:convert one element to int in a multiple assignment在多重赋值中将一个元素转换为 int
【发布时间】:2026-01-22 20:10:01
【问题描述】:

有以下代码:

queue_name, tasks_to_lease = self.configuration_service.get_value('tags')[self.task_tag].split('=')
tasks_to_lease = int(tasks_to_lease)

有什么方法可以在一行中做到这一点?

【问题讨论】:

  • 出于什么目的?为什么重要?
  • tasks_to_lease = int(self.configuration_service.get_value('tags')[self.task_tag].split('=')[1]) 应该这样做,尽管它既不短也不漂亮。
  • queue_name, tasks_to_lease = self.configuration_service.get_value('tags')[self.task_tag].split('=')[0],int(self.configuration_service.get_value('tags') [self.task_tag].split('=')[1])
  • 单行字越清晰越好。但通常它们不太清楚。记住你的英语老师告诉你的关于连续句子的内容。
  • 你可以并不意味着你应该。遵循pythonic的方式,python应该是富有表现力的。如果你混淆了显而易见的东西,那么你已经没有通过 python 的最基本原理。有关更多说明,请尝试import this

标签: python


【解决方案1】:

这会将 split() 中的每个元素转换为 int() 的奇数索引,并将其他元素保持原样:

>>> queue_name, tasks_to_lease = (int(v) if n else v for n,v in enumerate('a=3'.split('=')))
>>> queue_name
'a'
>>> tasks_to_lease
3

这会将每个元素从 split() 转换为 int(),其中每个字符都是数字(即,不会做负数),而其他元素保持原样:

>>> queue_name, tasks_to_lease = (int(v) if v.isdigit() else v for v in 'a=3'.split('='))
>>> queue_name
'a'
>>> tasks_to_lease
3

【讨论】:

    【解决方案2】:

    不推荐,但可以:

     s = "foo 10"
    
    a, b = map(lambda x: [lambda _: x, int][x.isdigit()](x) , s.split())
    
    print(type(a), type(b))
    print(a, b)
    
    <class 'str'> <class 'int'>
    foo 10
    

    【讨论】:

    • 我觉得这需要控制台提示
    • @CrazyPython,不,它没有。如果您尝试过,很容易弄清楚
    • @PadriacCunningham 把你的输入和输出分开!
    • @CrazyPython。它是分开的。
    • @PadriacCunningham 好吧,不是文字,只是一个未标记的,没有评论空间。
    最近更新 更多