我有以下功能,但是当我运行data
时,它会在分配之前抛出foo(-1)
之类的错误。我希望它返回None
。我们可以从函数中返回许多值,其中一个值是有条件的。我不想在if elif
构造中写回报。
def foo(x):
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data or None
在开始时是否还有其他选择来定义数据?像return 1, 2, 3, [data if data]
使用列表理解或其他东西
答案 0 :(得分:3)
在功能开头定义数据,如果无,则返回语句将按预期返回无。
def foo(x):
data = None
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data
答案 1 :(得分:0)
仅当x大于1时才初始化数据。如果x不大于1,则数据未初始化但您尝试返回它。您需要在开始之前输入数据:
def foo(x):
data = None
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data
答案 2 :(得分:0)
当前答案实际上并未回答问题;他们只是建议显式定义变量。 要仅在变量存在的情况下返回变量,应使用三元运算符:
a if condition else b
在这种情况下,您似乎可以使用:
def foo(x):
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data if 'data' in locals() else None
这样,将任何大于1的数字传递给foo()都会返回元组:
(1, 2, 3, range(0, 10))
传递小于1的任何数字将返回元组:
(1, 2, 3, None)
我认为此方法更可取,因为它可以清楚地说明您在做什么。您说的是“返回此内容,但如果不存在,则返回None”。如果您首先初始化变量,那么这可以看作是您在某些情况下意外忘记设置变量的情况。
答案 3 :(得分:0)
您是否尝试过使用字典的 .get() 方法?
示例:
>>> # this makes an empty dictionary,
>>> # then tries to get the value with key 'data',
>>> # and returns 'default' if the key is not found
>>> # (or if the found value is None)
>>> {}.get('data', 'default')
'default'
>>> # .get()'s default parameter is optional, and will
>>> # be set to None if you don't provide a value
>>> print({}.get('data'))
None
>>> # it's worth being careful about ranges
>>> {'data': range(0, 10)}.get(data)
range(0, 10)
>>> # you may want the actual numbers instead of the range generator
>>> {'data': [datum for datum in range(0, 10)]}.get(data)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
例如:
def foo(x):
my_dict = dict()
if x > 1:
my_dict['data'] = range(10) # range(0,10) == range(10)
elif x < 0:
print 'not valid'
return 1, 2, 3, my_dict.get('data')
警告:
以上将返回类型为 (int, int, int, range)
或类型为 (int, int, int, None)
的元组。如果您希望类型在有效情况下更像 (int, int, int, int, int, ..., int)
,那么我建议您切换函数,例如:
def foo(x):
solution = [1,2,3]
if x > 1:
solution.extend([n for n in range(10)])
else:
solution.append(None)
if x < 0:
print('x required to be positive number')
return solution