如何检查 *args[0] 是否存在?
How to check if *args[0] exists?
在 Python 中,如何检查 *args[0] 是否存在?
def my_fxn(self, *args):
print(args[0])
my_fxn('ABC') # this prints 'ABC'
my_fxn() # this crashes with "IndexError: tuple index out of range"
只需确保 args 存在且长度为 1 或更大。如果您要查找 args[1]...args[n].
,则同样的逻辑适用
def my_fxn(self, *args):
if args and len(args) > 0:
print(args[0])
编辑:
Per Willem 的评论 len(args) > 0
是不必要的,如果你正在寻找 args[0]
。
如果您使用 *args
,*args
将是一个元组 (具有零个、一个或多个元素)。如果元组包含 至少一个元素 ,则元组的真实性为 True
。所以你可以简单地写:
def my_fxn(self, *args):
<b>if args:</b>
print(args[0])
另一种选择是:
def my_fxn(self, *args):
arg0 = args and args[0] or False
# example results
# my_fxn('test', 'b', 12, 15) => 'test'
# my_fxn() => False
虽然不太确定人们对这种类型的过载有何看法。
编辑
快速解释发生了什么。当你自己寻找 args 时,当且仅当有东西传递给 args 时,它才会评估为 truthy。需要第一个测试来防止 IndexError: Index out of range 错误。如果 args 中有内容,它将 return 第一个参数 (args[0])。即使第一个位置的参数值为 'falsey' (f.e.0, [], etc)
在 Python 中,如何检查 *args[0] 是否存在?
def my_fxn(self, *args):
print(args[0])
my_fxn('ABC') # this prints 'ABC'
my_fxn() # this crashes with "IndexError: tuple index out of range"
只需确保 args 存在且长度为 1 或更大。如果您要查找 args[1]...args[n].
,则同样的逻辑适用def my_fxn(self, *args):
if args and len(args) > 0:
print(args[0])
编辑:
Per Willem 的评论 len(args) > 0
是不必要的,如果你正在寻找 args[0]
。
如果您使用 *args
,*args
将是一个元组 (具有零个、一个或多个元素)。如果元组包含 至少一个元素 ,则元组的真实性为 True
。所以你可以简单地写:
def my_fxn(self, *args):
<b>if args:</b>
print(args[0])
另一种选择是:
def my_fxn(self, *args):
arg0 = args and args[0] or False
# example results
# my_fxn('test', 'b', 12, 15) => 'test'
# my_fxn() => False
虽然不太确定人们对这种类型的过载有何看法。
编辑 快速解释发生了什么。当你自己寻找 args 时,当且仅当有东西传递给 args 时,它才会评估为 truthy。需要第一个测试来防止 IndexError: Index out of range 错误。如果 args 中有内容,它将 return 第一个参数 (args[0])。即使第一个位置的参数值为 'falsey' (f.e.0, [], etc)