如何保留小数点两位
对于除法或者浮点数我们如果想保留小数点两位可以使用下面方法
1 | In [1]: a = 1 |
and和or的取值顺序
and 和 or 是我们再熟悉不过的两个逻辑运算符。而我们通常只用它来做判断,很少用它来取值。
如果一个or表达式中所有值都为真,Python会选择第一个值,而and表达式则会选择第二个。
1 | In [1]: ( 3 or 4) * ( 5 and 6) |
类首字母不一定是大写
在正常情况下,我们所编写的所见到的代码,好像都默许了类名首字母大写,而实例用小写的这一准则。但这并不是强制性的,即使你反过来的也没有关系。
但有一些内置的类,首字母都是小写,而实例都是大写。
比如 bool 是类名,而 True,False 是其实例; 比如 ellipsis是类名,Ellipsis是实例; 还有 int,string,float,list,tuple,dict等一系列数据类型都是类名,它们都是小写。
两次 return
我们都知道,try…finally… 语句的用法,不管try里面是正常执行还是报异常,最终都能保证finally能够执行。
同时,我们又知道,一个函数里只要遇到 return 函数就会立马结束。
基于以上这两点,我们来看看这个例子,到底运行过程是怎么样的?
1 | In [7]: def func(): |
惊奇的发现,在try
里的return居然不起作用。
原因是,在try…finally…语句中,try中的return会被直接忽视,因为要保证 finally 能够执行。
for死循环
for 循环可以说是 基础得不能再基础的知识点了。
但是如果让你用 for 写一个死循环,你会写吗?(问题来自群友 陈**)
这是个开放性的问题,在往下看之前,建议你先尝试自己思考,你会如何解答。
好了,如果你还没有思路,那就来看一下 一个海外 MIT 群友的回答:
1 | for i in iter(int, 1): |
是不是懵逼了。iter 还有这种用法?这为啥是个死循环?
这真的是个冷知识,关于这个知识点,你如果看中文网站,可能找不到相关资料。
还好你可以通过 IDE 看py源码里的注释内容,介绍了很详细的使用方法。
原来iter有两种使用方法,通常我们的认知是第一种,将一个列表转化为一个迭代器。
而第二种方法,它收到一个callable
对象,和一个sentinel
参数。第一个对象会一直运行,知道它返回sentinel
值才结束。
那int
呢,这又是一个知识点,int 是一个内建方法。通过看注释,可以看出它是有默认值0的。你可以在终端上输入int()
看看是不是返回0。
所以这个for
循环会没有终点,一直运行下去。
intern机制
字符串类型作为Python中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化.
例如:Python解释器中使用了 intern(字符串驻留)的技术来提高字符串效率,什么是intern机制?就是同样的字符串对象仅仅会保存一份,放在一个字符串储蓄池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象。
1 | In [10]: s1="hello" |
参考文章:https://juejin.im/post/5b8d4f7651882542d14dab2b?utm_source=gold_browser_extension
列表的insert函数
列表的insert
函数的偏移量是可以超过列表的长度的。
1 | In [1]: test_list = [1,2,3,4] |
这时候就相当于append
函数了。
包含空列表的列表的布尔表达式是真
1 | In [19]: if []: |