python使用变量需要初始化吗_Python:我应该避免在块内初始化变量吗?

问题

我有这样的密码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/等内部的变量是否合适?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值