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 Nov 12, 2013
都会啊, 为了拿到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) # 这个呢 感觉是优先级的问题 |
7
ritksm Nov 12, 2013
@geew 因为test()是作为参数传入到方法里的...比如你写一个加法,难道不应该先确定两个参数再运算么...同理
def add(a, b): return a+b add(1, random.randint()) |
8
zenliver Nov 12, 2013
建议你看看sicp这本书,,,这些问题都不是问题
|
10
msg7086 Nov 13, 2013
简单说,因为get依赖test的返回值,所以要在其之后执行。
|
11
hitsmaxft Nov 13, 2013
因为这里的参数列表是值传递的, python 才不管你 test()是啥玩意,运算取值再说。
你所期待的应该是 io 之类的语言,参数列表直接传递,在实际使用的时候才进行运算。 |