在转换为不同类型时扩展元组参数

Expanding tuple arguments while casting to different types

我已经看到 questions 在打开结构 相同类型 时进行铸造。即

def foo():
    return ('1', '2')

x, y = foo()  # as str
x, y = map(int, foo())  # as int
x, y = [int(n) for n in foo()]  # equivalently as int

但是说你有

def foo():
    return ('s', '1')

并且您只想解压并转换元组的第二个元素。当然有

x, y = foo()
y = int(y)

以简单的名义,这绝对是最 pythonic 的方法。出于好奇,是否有更简洁的方法可以在一行中完成同样的事情?

您可以检查该值是否可以转换为 int:

x, y = [int(n) if n.isdigit() for n in foo()]

尽管这不适用于负数,因此您可以使用 try/except 子句

def convert(s, t=int):
    try:
        return t(s)
    except ValueError:
        return s

x, y = map(convert, foo())

否则,如果您知道每个第一个值都是 str,第二个值是 int,那么您可以使用

x, y = foo(); y = int(y)

如果你坚持1号线

如果使用Python 3.8+,可以使用赋值表达式:=

def foo():
    return ('s', '1')

x, y = (v:=foo())[0], int(v[1])
print(x, y)

打印:

s 1