正常写法:
if a == 1:
x = 1
y = 2
elif a in [2, 3] and b == 1:
x = 1
y = 3
少几行代码,可读性变差:
if a == 1 or (a in [2, 3] and b == 1):
x = 1
y = 2 if a == 1 else 3
还有其他写法吗?
![]() |
1
shintendo 71 天前
y = 2 if a == 1 else 3 就是其它语言的三目运算符吧
|
![]() |
2
sadfQED2 71 天前 via Android
我觉得这挺好懂的呀,这种语法糖没啥好怕的。怕的是有些人 if 条件写几十行再给你来几个位运算,还没个注释,那才看不懂
|
3
mekingname 71 天前
@sadfQED2 我觉得楼主应该是在主动寻找更难懂的写法,他不是在吐槽 Python 的 if 难懂。
|
4
Leviathann 71 天前
match
|
![]() |
5
ipwx 71 天前
我认为正常写法更好
|
![]() |
6
imn1 71 天前
if a in {3,2,1}: y=((x:=bool(a&3))+1)+bool(b==1)
|
![]() |
7
imn1 71 天前
呃,前面错了,位运算在这没啥用
if a in {3,2,1}: y=((x:=bool(a))+1)+bool(b==1) |
![]() |
8
coolair OP @mekingname 是的。
|
![]() |
9
BeautifulSoap 71 天前
Kotlin 表示?
val result = if (a > b) a else if (a < b ) sum(a,b,c,d,e,f,g) else (if (c > d) c else d) |
10
smallfount 71 天前
简单结构不做太多嵌套还好吧。。
|
![]() |
11
Buges 71 天前 via Android
动态语言,最难懂的就是利用上各种隐式转换规则。
这也是很多 obfuscator 的实现原理。 |
![]() |
13
Buges 71 天前 via Android
@makelove 比如用数字运算的结果表示转义字符、用 Bool 表示数字等等。
难懂的不是规则本身,而是把这些隐式转换组合(滥用)起来,从而可以实现代码混淆的效果。 |
![]() |
14
marcong95 71 天前
来个一行流:
import functools import reduce; x, y = reduce(lambda s, t: t[1] if (a, b) == t[0] else s, (((1, type('ae', (object, ), { "__eq__": lambda s, o: True })()), (1, 2)), ((2, 1), (1, 3)), ((3, 1), (1, 3))), None) or (None, None) |
15
deplivesb 71 天前
if a == 1 or (a in [2, 3] and b == 1)
你觉得这个可读性变差???? |
![]() |
16
aneureka 71 天前
```python
if a in range(1, 4): if a == 1: x, y = 1, 2 elif b == 1: x, y = 1, 3 ``` |
![]() |
17
HankAviator 70 天前 via Android
@aneureka 可能性扩充太大了,不妥
|
![]() |
18
aneureka 70 天前 via iPhone
@HankAviator #17 “可能性扩充太大了”不太理解🤨
|
![]() |
19
HankAviator 63 天前 via Android
@aneureka 我不会 python 哈,但是 range 函数里面是可以取非整数值?这样会把 op 隐含的只包含整数的限制去掉。
|
![]() |
20
aneureka 63 天前
@HankAviator #19 那你还是先学下吧 2333
|
![]() |
21
HankAviator 63 天前
@aneureka 哈哈哈露怯了,哦不,是中毒了😂
|