Please enable Javascript to view the contents

两个有趣但可读性不好的Python代码

 ·  ☕ 3 分钟

最近都在用AI写代码,不对,应该叫“口喷”代码。AI生成了大量的代码,前期还会装模作样的Review一下,后来就演都不演了,能跑就行,看都不看一眼。

今天看到两段抖机灵的代码,觉得挺有意思的,分享出来。

判断奇偶

1
2
3
4
5
def odd_or_even(num: int) -> str:
    """
    Say if a number is "even" or "odd".
    """
    return "eovdedn"[num%2::2]

这段代码的意图是判断一个整数是偶数(“even”)还是奇数(“odd”)。

其实现机制使用字符串切片技巧:字符串"eovdedn"被设计为当从索引0开始步长2切片时得到"even",从索引1开始步长2切片时得到"odd"。

这段代码非常的有想象力,但实际上并不好用,原因如下:

  • 可读性差:字符串"eovdedn"看起来像乱码,对于其他开发者难以理解,维护困难。IDE上也会提示拼写错误(这个强迫症真是受不了)

  • 脆弱性:如果字符串被意外修改(如拼写错误),功能会完全破坏。

  • 魔字符串(Magic String):依赖硬编码字符串,缺乏自解释性,容易引入错误。

  • 非直观:相比直接使用条件判断(如if num % 2 == 0),这种技巧性代码不符合常规编程实践。

  • 性能影响:虽然影响不大,但字符串操作通常比简单的算术运算更慢。

还有一种常用的位运算写法:

1
2
def odd_or_even(num: int) -> str:
    return "odd" if num & 1 else "even"
  • & 是按位与运算符

  • 1 的二进制是 0001

  • 任何数与 1 进行按位与运算:

    • 偶数:最后一位是 0,n & 1 = 0

    • 奇数:最后一位是 1,n & 1 = 1

这种位运算符写法虽然比上面那种字符串切片写法好一些,但依然不够直观,尤其是对于不熟悉位运算的读者来说,理解起来有一定难度。

下面这种写法更直观易懂。

1
2
def odd_or_even(num: int) -> str:
    return "even" if num % 2 == 0 else "odd"

获取季度

1
2
def get_season(month):
    return len(str(2 ** month))

这段代码的意图是根据月份(1-12)返回对应的季度(1-4)。

其实现机制是通过计算2month次方,然后将结果转换为字符串并计算其长度。由于2的幂次方在不同的月份范围内会产生不同长度的数字字符串,从而间接映射到季度。

  • 一月:2 二月:4 三月:8 位数都是 1
  • 四月:16 五月:32 六月:64 位数都是 2
  • 七月:128 八月:256 九月:512 位数都是 3
  • 十月:1024 十一月:2048 十二月:4096 位数都是 4

这段代码也是比较有趣,可读性差一点。

以下通过整除符号//来实现季度的计算,是比较常见的写法:

1
2
def get_season(month):
    return (month + 2) // 3
  • // 是整数除法(向下取整)

  • 计算过程:将月份加2,然后除以3并取整

当然,最直观的写法是使用条件判断:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def get_season(month):
    if 1 <= month <= 3:
        return 1
    elif 4 <= month <= 6:
        return 2
    elif 7 <= month <= 9:
        return 3
    elif 10 <= month <= 12:
        return 4
    else:
        raise ValueError("Month must be between 1 and 12")

参考资料

分享

码农真经
作者
码农真经
Web Developer