1
Js Apr 4, 2013 port = [80, 8080][settings.DEBUG]
这样就对等了..... |
2
binux Apr 4, 2013
port = settings.DEBUG ? 8080 : 80
你就开心了? |
3
TankyWoo Apr 4, 2013
要想80感觉正常,8080感觉非正常,就
port = 80 if not settings.DEBUG else 8080 |
4
reorx Apr 4, 2013
有个一般不用的做法,不过可能楼主会喜欢: port = settings.DEBUG and 8080 or 80
注意 and 后面的值的布尔值不能为 False,否则它的结果就和 ? : 不完全一样了。 |
5
archsocks Apr 4, 2013
@TankyWoo 要反写条件感觉不爽,且要多打一个not
实在想不通python把其中一个值放到条件之前是出于什么目的啊!人为地制造不平等。 我觉得这样就很好: port = if (settings.DEBUG) 8080 else 80 |
7
Hualin Apr 4, 2013
英语国家的人就是那么说话的,你看到的数学书证明部分 if else 也是布置的。正经事不干瞎操心啥 =.=
|
8
wenbinwu Apr 4, 2013
settings.DEBUG and 8080 or 80
|
9
jimrok Apr 5, 2013
ruby port = if settings.DEBUG
8080 else 80 end |
10
Parallel Apr 5, 2013
我想吐槽一下那个列表推导式,就是那个轻量级的循环。。全部挤在一行,个人觉得一点也不美观。。
|
12
rephaslife Apr 5, 2013 反正我觉得挺正常的,Python目的是“像写英语一样写代码”。
@Parallel 其实这样挺好的,简洁,就是必须在[]里使用有些蛋疼。。比如下面的代码就会出错: {a for a in list: a} 就算这样也会报错: {a for a in list} |
13
Parallel Apr 6, 2013
@reusFork 你是说在[]里写成几行那样?
@rephaslife 我觉得在里面写可读性不强,就比如《可爱的python》里那个计算闰年的程序result2 = [ p for p in range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ]。 |
16
hexor Apr 6, 2013
条件语句请不要写成一行啊... 混蛋
|
18
swulling Apr 6, 2013
@Parallel 实际用起来超好用的,如果你非常讨厌这种写法,会变的有点丑。
result2 = [ p for p in range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ] --- result2 = [] for p in range(2,N): ____tmp = [] ____for d in range(2,int(sqrt(p))+1)): ________tmp.append(p%d) ____if 0 not in tmp: ________result2.append(p) |
19
holsety Apr 6, 2013
还有一种写法是:
port = settings.DEBUG and 8080 or 80 当然,8080不能为False,None等非True值,要不然上面这个不成立. |
20
Parallel Apr 6, 2013
@swulling 事实上只需要这样就可以了:
result1 = [] for num in range(2, N): __for snu in range(2, int(sqrt(num))+1): ____if num % snu == 0: ______break __else: ____result1.append(num) 可能是我不大习惯那样子吧,也许以后习惯了就好。 |
21
brucex Apr 6, 2013
@rephaslife 你没有理解列表推导的实质,(a for a in list)会产生一个可迭代对象,你可以把它当成是一个生成器,如果你要得到一个Dict,你应该这样写{(a,a) for a in list)},如果要得到一个Set,应该写作set(a for a in list)。
|