python冷知识
省略号也是对象
在python中一切皆对象,省略号(...)也是一个对象注意:只能是三个点的省略号
在python中叫做Ellipsis
在python3中能直接得到它
print(...)
print(type(...))
Ellipsis
<class 'ellipsis'>
而在python2中没有这个,只能通过Ellipsis来获取
print Ellipsis
print type(Ellipsis)
它转成布尔值为真
print(bool(...))
True
它还是一个单例
print(id(...))
print(id(...))
print(id(...))
print(id(...))
1435611440
1435611440
1435611440
1435611440
这东西有啥用呢?据说它是Numpy的语法糖,不玩 Numpy 的人,可以说是没啥用的。
在网上只看到这个 用 … 代替 pass ,稍微有点用,但又不是必须使用的。
奇怪的字符串
示例一
示例二
示例三
and 和 or 的取值顺序
and 和 or 是我们再熟悉不过的两个逻辑运算符。而我们通常只用它来做判断,很少用它来取值。
如果一个python表达式中所有值都为真,or会选择第一个值,而and表达式则会选择第二个。
如果一个python表达式中所有值有一个为假,or会选择第二个值,而and表达式则会选择第一个。
如果一个python表达式中所有值有都为假,or会选择第二个值,而and表达式则会选择第一个。
print(2 or 3)
print(2 and 3)
2
3
访问类中的私有方法
大家都知道,类中可供直接调用的方法,只有公有方法(protected类型的方法也可以,但是不建议)。也就是说,类的私有方法是无法直接调用的。但是是可以直接调用的
class People:
def __speak(self):
print('hello')
def call_speak(self):
self.__speak()
tim=People()
tim.call_speak()
tim._People__speak()
hello
hello
时有时无的切片异常
这是个简单例子
lis=[1,2,3]
print(lis[5])
执行一下,和我们预期的一样,会抛出索引异常。

但是今天要说的肯定不是这个,而是一个你可能会不知道的冷知识。
来看看,如下这种写法就不会报索引异常,它会返回一个空列表:
lis=[1,2,3]
print(lis[5:])
[]
两次 return
我们都知道,try…finally… 语句的用法,不管try里面是正常执行还是报异常,最终都能保证finally能够执行。
同时,我们又知道,一个函数里只要遇到 return 函数就会立马结束。
基于以上这两点,我们来看看这个例子,到底运行过程是怎么样的?
def text():
try:
return 1
finally:
return 0
print(text())
0
惊奇的发现,在try 里的return居然不起作用。
原因是,在try…finally…语句中,try中的return会被直接忽视,因为要保证 finally 能够执行。
for 死循环
for 循环可以说是 基础得不能再基础的知识点了。
但是如果让你用 for 写一个死循环,你会写吗?
这是个开放性的问题,在往下看之前,建议你先尝试自己思考,你会如何解答。
好了,如果你还没有思路,那就来看一下这个解法:
for i in iter(int,1):
print('1')
是不是懵逼了。iter 还有这种用法?这为啥是个死循环?
这真的是个冷知识,关于这个知识点,你如果看中文网站,可能找不到相关资料。
还好你可以通过 IDE 看py源码里的注释内容,介绍了很详细的使用方法。
原来iter有两种使用方法,通常我们的认知是第一种,将一个列表转化为一个迭代器。
而第二种方法,他接收一个 callable对象,和一个sentinel 参数。第一个对象会一直运行,直到它返回 sentinel 值才结束。
那int 呢,这又是一个知识点,int 是一个内建方法。通过看注释,可以看出它是有默认值0的。你可以在终端上输入int() 看看是不是返回0。

由于int() 永远返回0,永远返回不了1

所以这个 for 循环会没有终点。一直运行下去。
intern机制
字符串类型作为Python中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化.
例如:Python解释器中使用了 intern(字符串驻留)的技术来提高字符串效率,什么是intern机制?就是同样的字符串对象仅仅会保存一份,放在一个字符串储蓄池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象。
python冷知识的更多相关文章
- python 冷知识(装13 指南)
python 冷知识(装13 指南) list1 += list2 和 list1 = list1 + list2 的区别 alpha = [1, 2, 3] beta = alpha # alpha ...
- python冷知识(续)
python 冷知识 1.交互式中修改最大递归深度 大家都知道使用递归是有风险的,递归深度过深容易导致堆栈的溢出. 那到底,默认递归次数限制是多少呢? 可以使用sys这个库来查看 >>&g ...
- 10个不为人知的 Python 冷知识
转载: 1. 省略号也是对象 ...这是省略号,在Python中,一切皆对象.它也不例外. 在 Python 中,它叫做 Ellipsis . 在 Python 3 中你可以直接写…来得到这玩意. 而 ...
- 10 个不为人知的Python冷知识
1. 省略号也是对象 ... 这是省略号,在Python中,一切皆对象.它也不例外. 在 Python 中,它叫做 Ellipsis . 在 Python 3 中你可以直接写-来得到这玩意. > ...
- python 冷知识
nohup python robot.py nohup python -u robot.py > robot.log 2>&1 & -u 就是指定实时的日志输出目录,而 & ...
- 盘点 Python 中的那些冷知识(二)
上一篇文章分享了 Python中的那些冷知识,地址在这里 盘点 Python 中的那些冷知识(一) 今天将接着分享!! 06. 默认参数最好不为可变对象 函数的参数分三种 可变参数 默认参数 关键字参 ...
- Python 浮点数的冷知识
本周的PyCoder's Weekly 上分享了一篇小文章,它里面提到的冷知识很有意思,我稍作补充,分享给大家. 它提到的部分问题,读者们可以先思考下: 若两个元组相等,即 a==b 且 a is b ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
随机推荐
- Java实现 LeetCode 779 第K个语法符号(递归)
779. 第K个语法符号 在第一行我们写上一个 0.接下来的每一行,将前一行中的0替换为01,1替换为10. 给定行数 N 和序数 K,返回第 N 行中第 K个字符.(K从1开始) 例子: 输入: N ...
- Java实现 LeetCode 589 N叉树的前序遍历(遍历树)
589. N叉树的前序遍历 给定一个 N 叉树,返回其节点值的前序遍历. 例如,给定一个 3叉树 : 返回其前序遍历: [1,3,5,6,2,4]. 说明: 递归法很简单,你可以使用迭代法完成此题吗? ...
- Java实现 蓝桥杯VIP 算法提高 解二元一次方程组
算法提高 解二元一次方程组 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个二元一次方程组,形如: a * x + b * y = c; d * x + e * y = f; x,y代 ...
- java实现第六届蓝桥杯三羊献瑞
三羊献瑞 题目描述 观察下面的加法算式: 祥 瑞 生 辉 三 羊 献 瑞 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. ...
- 读取Excel文件,抛出类似Cleaning up unclosed ZipFile for archive D:\project\myTest\autoAppUI\excelMode\用例模板2.xlsx 错误解决
读excel用例的时候总报这个错误,一直不知道什么原因~~~~~~~~~~ 今天突然顿悟了,原来是读excel的时候用到了文件流,我在读文件的方法里加了流关闭的操作,完美解决报错
- Cordova+ionic+angular 项目从 UIWebView 更换为 WKWebView ,通过IOS审核
当前 cordova-ios 最新版本 5.1.1 新版本 cordova-ios 将删除 UIWebView 代码中的所有引用.WKWebView 将是 Cordova 的默认 Web 视图. ...
- Linux磁盘空间容量不够-通过新增磁盘-挂载原磁盘
首先上一张图 -------1)首先fdisk 一块磁盘并格式化 mkfs.ext4 /dev/sda15 --------2)将此磁盘挂载在mnt目录下,并将磁盘容量不够的磁盘所有文件进行复制到mn ...
- eurekaAutoServiceRegistration 异常
方案来自:https://github.com/spring-cloud/spring-cloud-netflix/issues/1952 解决办法: @Component public class ...
- IAT表
0X0 0 DLL介绍 DLL翻译器为动态链接库,原来不存在DLL的概念只有,库的概念,编译器会把从库中获取的二进制代码插入到应用程序中.在现在windows操作系统使用了数量庞大的库函数(进程,内存 ...
- 如何打包发布加密的 Python 源代码
这里介绍一种使用 PyInstaller 和 PyArmor 来发布加密 Python 源代码的方式,能够达到以下目的 把所有 Python 源代码打包成为可执行文件,客户不需要 Python 就可以 ...