1
geew OP Docstring: D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
-- 但是上例子中get a的时候test是会执行的 |
2
geew OP 可以写成这样
d.get('a') or test() |
3
xiaket 2013-11-12 16:37:50 +08:00
都会啊, 为了拿到test的返回值作为参数, 需要执行. 即是先执行test再将2作为参数交给get的, 这儿get没短路它.
|
4
geew OP @xiaket
v = d.get('a') or 2 if test() else 3 # 会执行么 v = d.get('a') or test() # 这个呢 v = d.get('a') or (2 if test() else 3) # 这个呢 感觉是优先级的问题 |
6
geew OP @ritksm 这就有个先后的问题了 为什么不是先get逻辑然后再处理其他的呢 为什么会是test先执行然后取其结果来进行get逻辑呢
|
7
ritksm 2013-11-12 17:16:06 +08:00
@geew 因为test()是作为参数传入到方法里的...比如你写一个加法,难道不应该先确定两个参数再运算么...同理
def add(a, b): return a+b add(1, random.randint()) |
8
zenliver 2013-11-12 19:47:25 +08:00
建议你看看sicp这本书,,,这些问题都不是问题
|
10
msg7086 2013-11-13 18:35:06 +08:00
简单说,因为get依赖test的返回值,所以要在其之后执行。
|
11
hitsmaxft 2013-11-13 22:09:13 +08:00
因为这里的参数列表是值传递的, python 才不管你 test()是啥玩意,运算取值再说。
你所期待的应该是 io 之类的语言,参数列表直接传递,在实际使用的时候才进行运算。 |