python is 和 ==

在写code的时候,读目录然后找出需要的文件名,我通过判断后缀来取出需要的文件

if allfile[i][-4:] is '.csv':   #allfile[i][-4:] = '.csv'
    csvfile.append(i) 
最后换成: 
if cmp(i[-4:],'.csv') == 0:
    csvfile.append(i)

我在这边打印了好多信息,然后判断是有值得,但就是两个不相等。最后用cmp函数解决了。现在来分析一下为什么!

python中对象包含三个基本要素:id(内存地址)、type(数据类型)、value(值)

 ==是用来判断对象的value是否相等

 is 是同一性运算符,比较判断的是id是否相同。

然后了解了以下python 的intern机制:

    通过一个字符串储蓄池,这个池子是一个字典结构,如果字符串已经存在池子中就不再创建新的字符串,直接返回创建好的字符串对象,如果之前还没有加入到池子中,则先创建一个字符串对象,并把这个对象加入到池子里,方便下一次获取。


为啥会有intern机制:提高效率和解决空间,

找到一个网页    https://mrcuriosity.org/python-string-intern.html  上面分析了一波源代码,我记住的就是字符串包括

,这些组成的字符串可以使用is

不过,这是有长度的限制。256个字符串,第257个字符串会是不同的变量名。

不过可以使用intern()这个函数  比如a = intern('.csv')  b = intern('.csv')   a is b   ->true



为了优化速度,python使用了小整数对象池,避免为整数频繁申请和销毁内存空间,小整数定义[-5,256],只要这个数字在这个范围类,无论这个整数处于LEGB中的哪个位置, 内存地址是一样的。

LEGB    : locals ->enclosing function ->globals ->__builtins__

locals: 函数内的名字空间,包含局部变量和形参

enclosing :外部嵌套函数的名字空间

globals :全局变量,函数定义所在模块的名字空间

builtins:内置模块的名字空间。




阅读更多
文章标签: 技术类总结
个人分类: python
上一篇二叉搜索树
下一篇毕业一年有感
想对作者说点什么? 我来说一句

python简明教程

2011年07月08日 1.25MB 下载

python-2.5.1

2008年10月16日 10.12MB 下载

python python

2011年04月22日 15KB 下载

Python3.6安装

2018年08月03日 29.3MB 下载

python python python python python

2010年08月29日 13.57MB 下载

python数据挖掘入门

2017年09月12日 8.78MB 下载

python数据分析及其学习

2017年09月16日 100KB 下载

python机器学习

2018年04月03日 940KB 下载

python基础

2018年05月08日 4.35MB 下载

没有更多推荐了,返回首页

关闭
关闭
关闭