谈谈 Python 那些不为人知的冷知识(六)

第一时间关注Python技术干货!

冷知识系列,直至今日,已经更新至第六篇。

前五篇传送门小明给你准备好了,还没阅读的可以学习一下。

还是老规矩,一篇只分享五个,有时间了就整理。不想错过的,千万记得关注一下。

01

链式比较

先给看一个示例

>>>False==False==True

False

你知道这个表达式会返回 False 吗?

我再给你举个例子,你可能就懂了。

f 18

print("young man")

如果还不明白,再给你整个等价写法。

>>>False==FalseandFalse==True

False

02

奇怪的字母

直接看下列例子。

在Python 2.x 中

>>> value =11

>>> valuе =32

File"", line1

valuе =32

^

SyntaxError:invalid syntax

在Python 3.x 中

>>> value =11

>>> valuе =32

>>> value

11

我相信你一开始看到这里,一定是目瞪口呆。你可以在自己的电脑上尝试一下,你会发现你不管在哪个版本的 Python 里运行都没有问题。

如果你想重现我这个场景,你可能复制我上面的代码粘贴至自己的命令行中即可。

在这里,也不卖关子了,上面代码中第二行的е和 第一行的e是不一样的。(为了让你区分开来,上面的两个 e 的字体我选不一样的,当你在你的 cmd 窗口中执行时,是完全区分不出来的。)

第二行的e是 Cyrillic(西里尔)字母,而不是我们熟悉的英文字母。

>>> ord('е')# cyrillic 'e' (Ye)

1077

>>> ord('e')# latin 'e', as used in English and typed using standard keyboard

101

>>>'е'=='e'

False

细思恐极,平时可千万不要得罪同事们,万一辞职的时候,把你项目里的e全局替换成e,到时候连错都不知道错哪了哈哈。

03

x == +x 吗

在大多数情况下,这个等式是成立的。

>>> n1 =10086

>>> n2 = +n1

>>>

>>> n1 == n2

True

什么情况下,这个等式会不成立呢?

由于Counter的机制,+用于两个 Counter 实例相加,而相加的结果如果元素的个数

>>> from collections import Counter

>>> ct = Counter('abcdbcaa')

>>> ct

Counter({'a':3,'b':2,'c':2,'d':1})

>>> ct['c'] =

>>> ct['d'] = -2

>>>

>>> ct

Counter({'a':3,'b':2,'c':,'d': -2})

>>>

>>> +ct

Counter({'a':3,'b':2})

04

有趣的import

import 是 Python 导包的方式。

你知道 Python 中内置了一些很有(wu)趣(liao)的包吗?

Hello World

>>> import __hello__

Hello World!

Python之禅

>>> import this

The ZenofPython,byTim Peters

Beautifulisbetter than ugly.

Explicitisbetter than implicit.

Simpleisbetter than complex.

Complexisbetter than complicated.

Flatisbetter than nested.

Sparseisbetter than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

Inthe faceofambiguity, refuse the temptationtoguess.

There should be one--andpreferably only one --obvious waytodoit.

Although that way maynotbe obvious at first unless you're Dutch.

Nowisbetter than never.

Although neverisoften better than *right* now.

Ifthe implementationishardtoexplain, it's a bad idea.

Ifthe implementationiseasytoexplain, it may be a good idea.

Namespaces are one honking great idea --let's do more of those!

反地心引力漫画

在 cmd 窗口中导入

>>> import antigravity

就会自动打开一个网页。

05

局部/全局变量分不清

在开始讲之前,你可以试着运行一下下面这小段代码。

a =1

deffunc01():

a +=1

func01()

看似没有毛病,但实则已经犯了一个很基础的问题,这个报错相当常见吧?

>>> func01()

Traceback (most recent call last):

File"", line1,in

File"", line2,infunc01

UnboundLocalError: local variable'a'referenced before assignment

当程序运行到a += 1时,Python 解释器就认为在函数内部要给a这个变量赋值,当然就把a当做局部变量了,报错是理所应当的。

理解了上面的例子,给你留个思考题。为什么下面的代码不会报错呢?

a =1

deffunc02():

print(a)

func02()

-END-

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181112G0FSCE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券