有没有一种方法可以立即使用多个返回值中的一个?

时间:2020-01-26 16:54:58

标签: python python-3.x

我正在将一个字符串分成两个,我肯定知道,第二个将是整数的表示形式。我想解压缩两个值,然后立即将第二个值转换为int。基本上,我希望将这段代码放在一行中:

a, b = x.split('foo')
b = int(b)

我在SO中搜索了网络,但是寻找包含python multiple return values的内容只会返回解释如何一次返回多个值的网站。然后我想到了:

a, b = [value if i == 0 else int(value) for i, value in enumerate(f())]

但这是我想要避免的可憎之处。

那么有没有一种方法可以实时强制转换函数的多个返回值之一

4 个答案:

答案 0 :(得分:1)

具有列表理解功能的另一个选项:

x = 'test 1'

a, b = [(a, int(b)) for a, b in [x.split()]][0]

print(type(a), a, type(b), b)
# output: <class 'str'> test <class 'int'> 1

答案 1 :(得分:1)

如果您希望使用简短的代码来使代码可读,紧凑且简洁,那么定义自己的函数是一个不错的选择。该函数的定义可以占用其他地方(甚至是模块中)的空间,而您的主脚本则保持整洁。

def str_int(my_string):
    a, b = my_string.split()
    b = int(b)
    return a, b

然后对该函数的调用很短。 a, b = str_int(my_string)

答案 2 :(得分:0)

您可以使用以下地图功能:

my_str = 'item 1'
a, b = map(lambda x : int(x) if x.isdigit() else x, my_str.split())

答案 3 :(得分:0)

使用Python 3.8的赋值表达式,您可以使用以下可憎性:

x = '4foobar'
a, b = int((y := x.split('foo'))[0]), y[1]
# a = 4, b = 'bar'

尽管很明显,这很麻烦并且容易出错。只需使用两个衬垫即可。

相关问题