Python 2.7 如何在单行if-else python语句中惰性地计算值?
这是python代码Python 2.7 如何在单行if-else python语句中惰性地计算值?,python-2.7,lazy-evaluation,Python 2.7,Lazy Evaluation,这是python代码 current_task.request.task if current_task is not None else None current_task可以是None,但python会在检查条件之前对语句进行求值。这就是为什么我会出现这个错误: AttributeError: 'NoneType' object has no attribute 'request' 是否仍要对当前任务.request.task进行延迟评估 更新 我想我被当前任务的输出和类型弄糊涂了 &g
current_task.request.task if current_task is not None else None
current_task
可以是None
,但python会在检查条件之前对语句进行求值。这就是为什么我会出现这个错误:
AttributeError: 'NoneType' object has no attribute 'request'
是否仍要对当前任务.request.task进行延迟评估
更新
我想我被当前任务的输出和类型弄糊涂了
>>print type(current_task)
>><class 'celery.local.Proxy'>
>>print current_task
>>None #obviously it calls __str__() to dump the None instead for the current case.
打印类型(当前任务)
>>
>>打印当前任务
>>None#显然,它调用u str_u()来转储当前案例的None。
提前感谢,非常感谢您的帮助 这里有点混乱
>>> 1/0 if 0 else 12
12
看到了吗?无zero错误
<代码>。。。如果否则…已短路
或:
所以我不相信你;-)发布更多详细信息,如实际的终端会话,就像我为您所做的那样。这里有点混乱
>>> 1/0 if 0 else 12
12
看到了吗?无zero错误
<代码>。。。如果否则…已短路
或:
所以我不相信你;-)发布更多详细信息,如实际的终端会话,就像我为您所做的那样。我认为问题在于当前任务设置了一些内容,只是没有设置为
None
你的表达相当于
if current_task is not None:
current_task.request.task
else:
None
因此,如果current_task
设置为any值,而不是None
或者,我相信你可以将这个表达式改写为
current_task and current_task.request.task
只要current_task
不是以下任何值,Python将继续执行表达式的后半部分
None
False
- 任何数字类型的零,例如,
,0
,0L
,0.0
0j
- 任何空序列,例如,
,'
,()
[]
- 任何空映射,例如,
{}
- 用户定义类的实例,如果该类定义了
或\uuu非零\uuu()
方法,则该方法返回整数\uu len\uuu()
或布尔值0
False
根据您的更新,这感觉有点难看,但您可以这样做
current_task.request.task if current_task.__str__() != 'None' else None
我认为问题在于当前任务设置为某个值,而不是设置为无 你的表达相当于
if current_task is not None:
current_task.request.task
else:
None
因此,如果current_task
设置为any值,而不是None
或者,我相信你可以将这个表达式改写为
current_task and current_task.request.task
只要current_task
不是以下任何值,Python将继续执行表达式的后半部分
None
False
- 任何数字类型的零,例如,
,0
,0L
,0.0
0j
- 任何空序列,例如,
,'
,()
[]
- 任何空映射,例如,
{}
- 用户定义类的实例,如果该类定义了
或\uuu非零\uuu()
方法,则该方法返回整数\uu len\uuu()
或布尔值0
False
根据您的更新,这感觉有点难看,但您可以这样做
current_task.request.task if current_task.__str__() != 'None' else None
你的例子应该按原样工作。例如,这是有效的
a = 'String'
a.lower() if a else None
a = None
a.lower() if a else None
你的例子应该按原样工作。例如,这是有效的
a = 'String'
a.lower() if a else None
a = None
a.lower() if a else None
您使用的是什么版本的Python?在2.5.1、2.7.4和3.3.0上运行该行都会产生您想要的延迟结果。@jwodder我使用的是python 2.7.5。更新了它。但它在我的本地应用程序上不起作用。结果:是的,如果else是lazy,那么只有一行。您使用的是什么版本的Python?在2.5.1、2.7.4和3.3.0上运行该行都会产生您想要的延迟结果。@jwodder我使用的是python 2.7.5。更新了它。但它在我的本地服务器上不起作用。结果:是的,如果else是惰性的,则只有一行。有哪些值不是
None
,但属于NoneType
?还可以尝试其他方法:如果代理显示为None
,则它可能与None
,因此请尝试测试当前任务!=无
。这与不是
测试非常不同。有哪些值不是无
,但属于非类型
?还有一些需要尝试的东西:如果代理显示自己为无
,它可能与无
,那么请尝试测试当前任务!=无
。这与不是测试非常不同。