Python没有赋值表达式真是不方便

2014-02-02 20:00:45 +08:00
 Draplater
本来可以写成:
if result=func1(...):
print func2(result)
因为没有赋值表达式,所以必须写成:
result=func1(...)
if result:
print func2(result)
6809 次点击
所在节点    Python
15 条回复
gaicitadie
2014-02-02 20:31:26 +08:00
if result=func1(...):
if result==func1(...):

这两个容易弄混,python不支持这个功能,从根本上杜绝了看走眼导致bug的因素。
python玩不出花样来,写程序的时候会觉得呆板,但维护自己几年前代码的时候你会感激python的呆板
weakish
2014-02-02 20:38:16 +08:00
Scheme/Lua也没有。

赋值语句的返回值为所赋的值,这个我理解起来感觉蛮困难的——我觉得赋值语句应该是没有返回值,或者返回值为nil之类的东西(Haskell里类似赋值的操作返回值的类型是 `()`,纯副作用的返回值)。

别的语言里,`if a == 1`,粗心少打一个`=`号,变成`if a = 1`就出问题了,但是Python就没这个问题。这一点上比较方便。
dorentus
2014-02-02 21:45:55 +08:00
我倒是不明白到底什么人什么情况下会手误写混 = ==
不过会给读代码的人造成困惑倒是很有可能的…
yuelang85
2014-02-02 22:11:22 +08:00
@dorentus 写的时候,心里默读,二者都容易读成“等于”,于是写错了。。。。
EPr2hh6LADQWqRVH
2014-02-02 22:18:11 +08:00
@dorentus 任何人任何情况好嘛,人类本来就不是啥可靠玩意,不明白是因为写得少吧
X_Del
2014-02-02 22:19:29 +08:00
当然可以用 := 代替赋值用的 = 啦。
200
2014-02-03 03:59:25 +08:00
代码只写一次 但是要读很多次 何必为了少打几个字而舍弃代码的直观性
menic
2014-02-03 08:35:26 +08:00
Explicit is better than implicit.
Simple is better than complex.
Flat is better than nested.
Readability counts.
There should be one-- and preferably only one --obvious way to do it.
workaholic
2014-02-03 08:49:50 +08:00
语言设计者说过,代码越少,错误越少
FrankFang128
2014-02-03 11:39:08 +08:00
Python 真明智
ericls
2014-02-03 13:56:26 +08:00
为毛为不直接if func1():
dorentus
2014-02-03 18:45:10 +08:00
@menic
Yet here in real world coexist python 2.x & python 3.x, urllib & urllib2, etc...


@ericls
因为他下层的代码块里面用到了 func1() 的返回值。
xiaket
2014-02-03 21:58:20 +08:00
真不喜欢这种方便, 在有赋值表达式的语言里也不会这么写...
menic
2014-02-03 22:25:05 +08:00
@dorentus python提倡的和现实确实不同 但是语法是一个语言比较纯粹的东西 编译器和类库等比较偏实现 就有各种的tradeoff和banlance 就和社会主义国家的理念和现实差距也不小 但是从宪法和章程上 挑不出一点毛病
blacklaw
2014-02-06 11:32:12 +08:00
result=(lambda x=func1(...):(x, func2(x))[0] if x else x)()
能实现,但好难读懂阿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98868

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX