问题
我有这样的密码if condition:
a = f(x)
else:
a = g(y)
块内a的初始化对我来说不太好。能写得更好吗?在
我不能使用三元运算符,因为函数名和/或参数列表很长。
我说“长”的意思是
^{pr2}$
将使用超过79个(有时甚至超过119个)实名符号代替a、f、g、x、y和{}。
使用多个斜杠将使代码变得丑陋和混乱。在
我不想用defaul的其中一个函数的结果初始化a,因为这两个函数都很慢,我不能允许这样的开销a = g(y)
if condition:
a = f(x)
我可以用None初始化变量,但是这个解决方案足够吗?在a = None
if condition:
a = f(x)
else:
a = g(y)
让我解释一下我的位置:在C和C++变量中,块内有块作为其范围。在ES6中引入了^ {< CD10}}关键字,它允许创建与C和C++中的变量相同的范围规则的变量。使用旧的var关键字定义的变量具有与Python中相似的作用域规则。
这就是为什么我认为变量的初始化应该在块外进行,如果我想使用这些块之外的变量。在
更新
这里有一个更复杂的例子for obj in gen:
# do something with the `obj`
if predicate(obj):
try:
result = f(obj)
except Exception as e:
log(e)
continue
else:
result = g(obj)
# do something useful with the `result`
else:
result = h(obj)
display(result)
我遍历某个生成器gen的元素,处理它们并在每次迭代中对result执行一些操作。
然后我想对循环外的最后一个result做一些事情。在
预先不给result赋值是否足够pythonic?
这难道不会降低代码的可读性吗?在
问题
在Python中初始化if/else/for/等内部的变量是否合适?在