python 根据索引取值_八个不为人知的Python冷知识

省略号也是对象

...这是省略号,但是在Python中,一切皆对象,它也不例外。

在Python中,它叫做Ellipsis。

2fda7eb9256414c21c0e500df8f2cd53.png

而在Python2中没有...这个语法,就只能直接写Ellipsis来获取。

python 根据索引取值_八个不为人知的Python冷知识_第1张图片

转为布尔值时为真。

f38d14d1c9c6c420d11f5c45c99a45b7.png

最后,它是一个单例。

f29e1993c4d54f3452b2ec20e7a3af3e.png

类首字母不一定是大写

在正常情况下,我们所编写的所见到的代码,好像都默许了类名首字母大写,而实例用小写的这一准则。但这并不是强制性的,即使你反过来的也没有关系。

但是有一些内置的类,首字母都是小写,而实例都是大写。

比如bool是类名。而True,False是其实例;

比如ellipsis是类名,Ellipsis是实例;

还有int,string,float,list,tuble,dict等一系列数据类型都是类名,他们都是小写。

python 根据索引取值_八个不为人知的Python冷知识_第2张图片

增量赋值的性能更好

诸如+=和*=这些运算符,叫做增量赋值运算符。

这里使用+=举例,以下两种写法,在效果上是等价的。

python 根据索引取值_八个不为人知的Python冷知识_第3张图片

+= 其背后使用的魔法方法是 __iadd__,如果没有实现这个方法则会退而求其次,使用 __add__ 。

这两种写法有什么区别呢?

用列表举例 a += b,使用 __iadd__ 的话就像是使用了a.extend(b),如果使用 __add__ 的话,则是 a = a+b,前者是直接在原列表上进行扩展,而后者是先从原列表中取出值,在一个新的列表中进行扩展,然后再将新的列表对象返回给变量,显然后者的消耗要大些。

所以在能使用增量赋值的时候尽量使用它。

and和or的取值顺序

and 和 or 是我们再熟悉不过的两个逻辑运算符。而我们通常只用它来做判断,很少用它来取值。

如果一个or表达式中所有值都为真,Python会选择第一个值,而and表达式则会选择第二个。

python 根据索引取值_八个不为人知的Python冷知识_第4张图片

如何修改解释器提示符

正常情况下,我们在终端下执行Python命令是这样的:

python 根据索引取值_八个不为人知的Python冷知识_第5张图片

但是你是否想过>>>和 ...这两个提示符也可以修改的呢?

python 根据索引取值_八个不为人知的Python冷知识_第6张图片

默认参数最好不为可变对象

函数的参数分为三种:可变参数、默认参数和关键字参数。传递默认参数时,新手很容易踩雷的一个坑。

先来看一个示例:

python 根据索引取值_八个不为人知的Python冷知识_第7张图片

​在这里先暂停一下,思考一下会输出什么呢?
如果你的答案与下面的一致,那么你就可以跳过这部分内容了。

b61cb73bbee5b87bca0db03284d7f7c3.png

Python 中的def语句在每次执行的时候都初始化一个函数对象,这个函数对象就是我们要调用的函数,可以把它当成一个一般的对象,只不过这个对象拥有一个可执行的方法和部分属性。

对于参数中提供了初始值的参数,由于 Python 中的函数参数传递的是对象,也可以认为是传地址,在第一次初始化 def 的时候,会先生成这个可变对象的内存地址,然后将这个默认参数 item_list 会与这个内存地址绑定。在后面的函数调用中,如果调用方指定了新的默认值,就会将原来的默认值覆盖。如果调用方没有指定新的默认值,那就会使用原来的默认值。

python 根据索引取值_八个不为人知的Python冷知识_第8张图片

python 根据索引取值_八个不为人知的Python冷知识_第9张图片

在类中可供直接调用的方法,只有公有方法,也就是说,类的私有方法是无法直接调用的。

举个例子:

python 根据索引取值_八个不为人知的Python冷知识_第10张图片

既然都是方法,那我们没有其他方法可以直接调用吗?

答案是有的,在这里只做一个科普,不建议你这样做。

5a00fb7bfd3d62567749bf3cb918a3bf.png

时有时无的切片异常

这是一个简单的例子:

4186a79598a8889603f754812dcb90b8.png

执行后,和我们预期的一样,会抛出索引异常。

722979da0923cccda058e5ce7c92057f.png

今天要说的,是一个你可能会不知道的冷知识。
如下这种写法不会报索引异常,执行my_list[5:],会返回一个新list:[]。

59231aed2225eada943f3c077f2243a6.png

你可能感兴趣的:(python,根据索引取值)