在转换为不同类型时扩展元组参数
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
我已经看到
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