有趣且鲜为人知的 Python 特性,火了!

小编最近逛Github发现了一个给力的Python项目,绝对能让你傻眼!可以通过这个项目测试你对Python的熟悉程度!

这个项目叫做 “What the f*ck Python! 🐍',主要讲一些有趣且鲜为人知的 Python 特性。

项目地址为:https://github.com/leisurelicht/wtfpython-cn

来体会一些难以理解和反人类直觉的Python特性吧!

>>> a = 256
>>> b = 256
>>> a is b
True

>>> a = 257
>>> b = 257
>>> a is b
False

>>> a = 257; b = 257
>>> a is b
True

是我眼花了么?我动手敲了下,确实是这样...

这是为啥呢?

因为 256 是一个已经存在的对象, 而 257 不是。

大家可以想到256是2的8次方。

当Python开启后,-5~256数字已经分配好对象了,主要考虑这些数字经常使用。

引用自 https://docs.python.org/3/c-api/long.html

可以再看看这个案例:

>>> 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

大家都知道,在Python中通过id( )可以确定两个变量存储的内容是否是同一个,通过以上的代码结果说明创建了多个257对象。

你以为到这就结束了么?并没有

再来继续看这个:

>>> a, b = 257, 257
>>> id(a)
140640774013296
>>> id(b)
140640774013296
>>> a = 257
>>> b = 257
>>> id(a)
140640774013392
>>> id(b)
140640774013488

这又触及我的知识盲区了!这是为啥啊?

揭晓答案吧!当a和b在同一行被赋值为相同内容时,Python解释器会创建一个变量,然后引用它(不新创建了!)。注意这是在交互式的环境中,属于交互式环境的编译器优化。

我们看下一个有趣的特性:

# 我们先初始化一个变量rowrow = ['']*3 #row i['', '', '']# 并创建一个变量boardboard = [row]*3
>>> board
[['', '', ''], ['', '', ''], ['', '', '']]
>>> board[0]
['', '', '']
>>> board[0][0]
''
>>> board[0][0] = 'X'
>>> board
[['X', '', ''], ['X', '', ''], ['X', '', '']]

???这是为啥呢,我明明只给一个位置赋值了“X”啊!

大家应该想到了原因!

当我们初始化时:

然后我们使用乘法初始化board变量时,是这样的:

也就是说,这三行都引用了row的内存空间。

所以改变其中一个位置的值,也就改变了3个位置的值!

为了避免引用相同位置内容,可以采用以下方法:

>>> board = [['']*3 for _ in range(3)]>>> board[0][0] = 'X'>>> board[['X', '', ''], ['', '', ''], ['', '', '']]

接着看下个案例吧:

神奇的三引号!

>>> print('wtfpython''')
wtfpython
>>> print('wtfpython''')
wtfpython
>>> # 下面的语句会抛出 `SyntaxError` 异常
>>> # print('''wtfpython')
>>> # print('''wtfpython')

补充个说明,Python的隐式字符串连接:

>>> print('wtf' 'python')wtfpython>>> print('wtf' '') # or 'wtf'''wtf

思考一下再看答案!

答案:''' 和 ''' 在 Python中也是字符串定界符, Python 解释器在先遇到三个引号的的时候会尝试再寻找三个终止引号作为定界符, 如果不存在则会导致 SyntaxError 异常。

我们再来看下一个例子:

# 一个简单的例子, 统计下面可迭代对象中的布尔型值的个数和整型值的个数
mixed_list = [False, 1.0, 'some_string', 3, True, [], False]
integers_found_so_far = 0
booleans_found_so_far = 0

for item in mixed_list:
    if isinstance(item, int):
        integers_found_so_far += 1
    elif isinstance(item, bool):
        booleans_found_so_far += 1

返回的结果是:

>>> integers_found_so_far4>>> booleans_found_so_far0

???我的bool值都到哪去了?

其实,布尔值是int的子类,看下面这个就懂了:

>>> isinstance(True, int)
True
>>> isinstance(False, int)
True

如果还没理解,可以继续往下看:

another_dict = {}another_dict[True] = 'JavaScript'another_dict[1] = 'Ruby'another_dict[1.0] = 'Python'
>>> another_dict[True]
'Python'

True 的整数值是 1, 而 False 的整数值是 0。

>>> True == 1 == 1.0 and False == 0 == 0.0True
>>> some_bool = True
>>> 'wtf'*some_bool
'wtf'
>>> some_bool = False
>>> 'wtf'*some_bool
''

还有很多Python神奇的特性,大家自己看这个项目吧~

如果觉得项目作者写的不错,给他点亮star吧!

感谢阅读
(0)

相关推荐

  • 分享3 个Python冷知识

    转自:Python编程时光 三个比较冷门的知识. 第一个:神奇的字典键 some_dict = {} some_dict[5.5] = 'Ruby' some_dict[5.0] = 'JavaScr ...

  • python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  • Python学习——for循环,生成器,迭代器详解

    文章目录 Python的for循环 for循环示例 List 列表循环 dict 字典循环 列表生成式 生成器 列表式生成器 函数式生成器 生成器式生产者消费者模型 迭代器 什么是迭代器 再论for循 ...

  • Python 世界的黑客帝国

    来源:Python 技术「ID: pythonall」 相比于子弹时间和火爆场景,我更喜欢<黑客帝国>故事背景的假设 -- 人们熟悉的世界是虚构的,是机器给人大脑输入的幻象,而幻象是不完美 ...

  • 历史上的10个有趣但鲜为人知的事件

    历史上的10个有趣但鲜为人知的事件,数以百万计的历史事件为创造我们今天所知道的世界做出了贡献.我们的学校教科书只是向我们提供一些最重大的历史事件的信息,而忽略了鲜为人知的故事.因此,我们决定为您带来一 ...

  • Python那么火,到底能用来做什么?我们来说说Python3的主要应用

    如果您正在考虑学习Python,或者您最近刚开始学习, 您可能会问自己:"我到底可以用Python做什么?" 这是个棘手的问题,因为Python有很多用途. 但是随着时间的推移, ...

  • 鲜为人知的Python 5种高级特征

    Python入门与进阶 2021-07-13 收录于话题 #python 1个 公众号:机器之心作者:George Seif Python 多好用不用多说,大家看看自己用的语言就知道了.但是 Pyth ...

  • Python太火了!推荐一款在线写代码神器!再也不用安装程序了

    Python大本营 今天 Python 的火热,让很多人意识到 Python 对职业发展的重要,不仅小白选手有想学习的欲望,甚至连 BAT 的技术大牛,也将 Python 作为提升职场竞争力的第二开发 ...

  • 《黄帝内经》鲜为人知的神秘功法——火神功

    诸天气荡荡,我道日兴隆! 是斯人速临斯地,非吾道莫入吾门! 随缘转发,功德无量!入群合作投稿请加小编微信efeichunjin 采编:张元 ...............55............. ...

  • 【资源篇】Python那么火,你还不知道如何人门?

    ◆  ◆  ◆  ◆  ◆   Python 前言 Python 是一种面向对象的解释型计算机程序设计语言.Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是 ...

  • 这9个鲜为人知的Python库,你用过几个?

    Python是一种很棒的语言,它是世界上发展最快的编程语言之一.它一次又一次证明了自己在开发人员工作角色和跨行业的数据科学职位中的实用性.整个Python及其库的生态系统使其成为全世界用户(初学者和高 ...

  • 35张动物照片看鲜为人知的事实,火鹰是“纵火犯”故意放火,免费吃“熟食”

    乌鸦能够高质量地模仿人类语言 沙猫擅长在沙漠中生存.他们不是好的登山者或跳跃者,但他们是优秀的挖掘者.他们利用挖掘能力挖浅洞,以躲避白天炎热的沙漠. 小熊猫可以用后腿站立,使自己显得更大,还能用双手拿 ...

  • 50条有趣且实用的Python一行代码,一定有你用得上的

    大家好,欢迎来到 Crossin的编程教室 ! 随着对Python学习的深入,越来越发现Python能够轻易地解决许多问题. 一些复杂的任务,甚至可以使用一行Python代码就能搞定. 今天就给大家介 ...