正常写法:
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 2022-06-02 11:23:12 +08:00
y = 2 if a == 1 else 3 就是其它语言的三目运算符吧
|
2
sadfQED2 2022-06-02 11:40:15 +08:00 via Android
我觉得这挺好懂的呀,这种语法糖没啥好怕的。怕的是有些人 if 条件写几十行再给你来几个位运算,还没个注释,那才看不懂
|
3
mekingname 2022-06-02 11:59:39 +08:00
@sadfQED2 我觉得楼主应该是在主动寻找更难懂的写法,他不是在吐槽 Python 的 if 难懂。
|
4
Leviathann 2022-06-02 12:02:41 +08:00
match
|
5
ipwx 2022-06-02 12:03:36 +08:00
我认为正常写法更好
|
6
imn1 2022-06-02 12:06:43 +08:00
if a in {3,2,1}: y=((x:=bool(a&3))+1)+bool(b==1)
|
7
imn1 2022-06-02 12:15:12 +08:00
呃,前面错了,位运算在这没啥用
if a in {3,2,1}: y=((x:=bool(a))+1)+bool(b==1) |
8
coolair OP @mekingname 是的。
|
9
BeautifulSoap 2022-06-02 12:55:07 +08:00
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 2022-06-02 13:00:59 +08:00
简单结构不做太多嵌套还好吧。。
|
11
Buges 2022-06-02 13:30:28 +08:00 via Android
动态语言,最难懂的就是利用上各种隐式转换规则。
这也是很多 obfuscator 的实现原理。 |
13
Buges 2022-06-02 14:09:37 +08:00 via Android
@makelove 比如用数字运算的结果表示转义字符、用 Bool 表示数字等等。
难懂的不是规则本身,而是把这些隐式转换组合(滥用)起来,从而可以实现代码混淆的效果。 |
14
marcong95 2022-06-02 15:13:31 +08:00
来个一行流:
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 2022-06-02 15:22:37 +08:00
if a == 1 or (a in [2, 3] and b == 1)
你觉得这个可读性变差???? |
16
aneureka 2022-06-02 22:12:47 +08:00
```python
if a in range(1, 4): if a == 1: x, y = 1, 2 elif b == 1: x, y = 1, 3 ``` |
17
HankAviator 2022-06-03 20:57:40 +08:00 via Android
@aneureka 可能性扩充太大了,不妥
|
18
aneureka 2022-06-03 21:11:37 +08:00 via iPhone
@HankAviator #17 “可能性扩充太大了”不太理解🤨
|
19
HankAviator 2022-06-10 20:53:56 +08:00 via Android
@aneureka 我不会 python 哈,但是 range 函数里面是可以取非整数值?这样会把 op 隐含的只包含整数的限制去掉。
|
20
aneureka 2022-06-10 22:28:59 +08:00
@HankAviator #19 那你还是先学下吧 2333
|
21
HankAviator 2022-06-10 22:34:07 +08:00
@aneureka 哈哈哈露怯了,哦不,是中毒了😂
|