一些有趣且鲜为人知的 Python 特性

What the f*ck Python!
GitHub 上有个非常有意思的仓库(What the f*ck Python!) ,作者收集了很多有趣且鲜为人知的 Python “特性”,这个有趣的项目意在收集 Python 中那些难以理解和反人类直觉的例子,并尝试讨论这些现象背后真正的原理!
而所有的一切,其实都是 Cpython 内部实现中利弊之间的的权衡,有优点就有缺点,举个和数字相关的特别例子:

>>> id(256)
10922528
>>> a = 256
>>> b = 256
>>> id(a)
10922528
>>> id(b)
10922528
>>> id(257)
140084850247312
>>> x = 257
>>> y = 257
>>> id(x)
140084850247440
>>> id(y)
140084850247344

代码解释

  • id() 函数是Python 内置函数,用于获取对象的内存地址
  • 当你启动Python 的时候, -5 到 256 的数值就已经被分配好了,因为这些数字经常使用所有已经分配好了内存;
  • 当我们给x、y分别赋值257的时候,这里解释器并没有在执行 y = 257 时意识到我们已经创建了一个整数 257,所以它在内存中又新建了另一个对象。

另外一个例子:

some_list = [1, 2, 3]
some_dict = {
  "key_1": 1,
  "key_2": 2,
  "key_3": 3
}

some_list = some_list.append(4)
some_dict = some_dict.update({"key_4": 4})

你知道此时some_list 、some_dict 的值吗?
Output:

>>> print(some_list)
None
>>> print(some_dict)
None

代码解释

大多数修改序、映射对象的方法, 比如 list、append、dict.update, list.sort 等等,都是原地修改对象并返回 None,这样做的理由是, 如果操作可以原地完成, 就可以避免创建对象的副本来提高性能。
如果想要添加值到list里面只需要 some_list.append(4) 即可。

当然这个库更多令人惊讶的特性等着你去探索,比如关于字符串操作,迭代列表时删除元素、循环变量泄漏、捕获异常等等。总共有近100来个知识点总结。强烈建议大家好好研读,有利于对 Python 的进一步提高。目前这个库已经有12K+人关注,而且现在有网友提供了中文版了,这无疑给了不习惯阅读英语阅的人有一个利好消息。

英文地址:https://github.com/satwikkansal/wtfpython
中文地址:https://github.com/leisurelicht/wtfpython-cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值