python - 那些零碎的知识点

一. 字符串格式化

1. "旧式字符串解析(%操作符)"

'Hello, %s' % name
"Hello, Bob" 'Hey %(name)s, there is a 0x%(errno)x error!' % {
"name": name, "errno": errno }
'Hey Bob, there is a 0xbadc0ffee error!'

2. "新式"字符串格式化(str.format)

'Hello, {}'.format(name)
'Hello, Bob' 'Hey {name}, there is a 0x{errno:x} error!'.format( name=name, errno=errno)
'Hey Bob, there is a 0xbadc0ffee error!'

3. 字符串插值/f-Strings(Python 3.6+)

python 3.6新出的,本人用了这个之后, 果断抛弃其他方法, 真的太强大了!!!

name = Bob
f'Hello, {name}!'
'Hello, Bob!' def greet(name, question):
... return f"Hello, {name}! How's it {question}?"
...
greet('Bob', 'going')
"Hello, Bob! How's it going?"

4. 字符串模板法(Python标准库)

templ_string = 'Hey $name, there is a $error error!'

Template(templ_string).substitute(

...     name=name, error=hex(errno))

'Hey Bob, there is a 0xbadc0ffee error!'

二. 小数据池

1. id, is, == =

id 	=> id是内存地址

is 	=> 比较两边的内存是否相等

== 	=> 比较两边的数值是否相等

=	=> 是赋值

2. 小数据池的缓存机制

小数据池,也称为小整数缓存机制,或者称为驻留机制等等,

对于数字: -5~256是会被加到⼩小数据池中的. 每次使⽤用都是同⼀一个对象.

对于字符串串:

1.如果字符串串的长度是0或者1, 都会默认进行缓存

2.字符串长度大于1, 但是字符串中只包含字母, 数字, 下划线时才会缓存

3.用乘法的到的字符串乘数为1, 仅包含数字,字母,下划线时会被缓存. 如果

包含其他字符, 而长度<=1 也会被驻存,乘数大于1 . 仅包含数字, 字母, 下划

线这个时候会被缓存. 但字符串串长度不能大于20

4.指定驻留留. 我们可以通过sys模块中的intern()函数来指定要驻留留的内容.

三. 深浅拷贝

copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

import copy
a = [1,23,66,[6,8]] d = a
b = copy.copy(a)
c = copy.deepcopy(a)
a.append(99)#[1, 23, 66, [6, 8], 99] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8], 99]
print(a,b,c,d)
a[3].append(88)#[1, 23, 66, [6, 8, 88], 99] [1, 23, 66, [6, 8, 88]] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8, 88], 99]
print(a,b,c,d)

垃圾回收机制

一. Python内部使用引用计数机制, 来保持追踪内存中的对象,所有对象都有引用计数. 一个对象分配一个新名称,然后将其放入到一个容器中(如列表, 元祖, 字典), 这样这个计数就增加. 当我们使用delect删除语句对对象别名进行删除或者,引用超过了这个作用域,或者被重新复制的时候,引用的计数会减少.对于不可变数据(数字,字符串)解释器会在程序的不同部分共享内存,以便节约内存.sys.getrefcount( )函数可以获得对象的当前引用计数

二. 这个垃圾回收机制呢, 就是当一个对象的引用计数归零时,他就会被垃圾回收机制处理掉 ,当两个对象相互引用的时候, del语句可以减少 引用次数并销毁引用底层对象的名称, 由于每个对象都包含一个对其他对象的引用, 因此引用计数不会归零, 对象也不会销毁,为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

三.内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

哈希

Hash(哈希) 一般译为“散列”,它是一种加密过的存储结构。它将任意长度的输入,通过散列算法,转换成固定长度的输出。而这个输出就是散列的值。并且,这个转换过程是一种压缩映射,所以,散列值的空间远小于输入值的空间。另外,不同的输入可能会散列出相同的输出,所以不能从散列值来确定其输入值是什么。hash应用中一个简单的例子就是短链接。短链接是一个hash后的散列值,它的输入值就是原始链接。首先,我们拿到一个原始链接,到一个具有hash功能的服务器上,做hash转换,得到一个散列值,这个值就是短链接的值。前面说到过,散列值会远小于输入值,所以短链接比原链接字符长度小了许多。然后,再将这个短链接与原链接存到服务器上的数据库中,形成映射关系。当有人访问服务器上的短链接时,只需要从映射关系中找到原始链接,即可跳转到原始链接。

Hash 的一个特点就是性能好,查询起来很快。它是一种以空间换取时间的方案。

简单说,如果一个对象是可哈希的, 那么生命周期内这个对象不可变,如:int,float,string, tuple.

反之, 不可哈希的对象可变, 像lsit, dict, set.

python - 那些零碎的知识点的更多相关文章

  1. 【Python】 零碎知识积累 II

    [Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...

  2. Python OS模块重要知识点

    Python OS模块重要知识点 这几点很重要,主要是关于文件路径,我之前踩了很多坑,今天总结一下,方便以后能够避免与path相关的各种坑! 1,首先我们想获取某个文件夹下面的所有文件夹以及文件(不包 ...

  3. 07: python基础 零碎知识点

    目录: 1.1 python异常处理 1.2 三元运算,filter和map与lambda表达式结合使用举例 1.3 内置方法 1.4 动态导入模块 1.1 python异常处理返回顶部 1.Pyth ...

  4. 初学python - 零碎的知识点

    * 标识符命名规则 数字,字母,下划线组成,数字不能开头区分大小写 * 注释 单行:#:多行:‘ ‘ ‘ ,“”“: * 进制标识 b:二进制 o:八进制 d:十进制x:十六进制 转换:format( ...

  5. 【Python】 零碎知识积累 I

    大概也是出于初高中时学化学,积累各种反应和物质的习惯,还有大学学各种外语时一看见不认识的词就马上记下来的习惯,形成了一种能记一点是一点的零碎知识记录的癖好.这篇文章就是专门拿来记录这些零碎知识的,没事 ...

  6. Day8 Python基础之遗漏知识点(六)

    1. 遗漏知识点 深.浅拷贝:   http://www.cnblogs.com/yuanchenqi/articles/5782764.html a=b: 浅拷贝: 深拷贝 集合(set) 集合的定 ...

  7. Python常用基础语法知识点大全

    记得我是数学系的,大二时候因为参加数学建模,学习Python爬虫,去图书馆借了一本Python基础书,不厚,因为有matlab和C语言基础,这本书一个星期看完了,学完后感觉Python入门很快,然后要 ...

  8. Python语言及其应用 - 知识点遍历

    遍历python语法     2.基本元素:数字.字符串和变量 2.1 python有哪些基本类型? 布尔型(True, False),整型(42,100000),浮点型(3.14159,1.0e8) ...

  9. python中的小知识点

    这里是一些小知识点的汇集,为的是以后查找的方便. 行与缩进: 物理行:实际看到的代码行数. 逻辑行:在意义上的函数(即解释器执行的行数) 如果一个物理行中包含了多个逻辑行,则每个逻辑行之间需要用分号 ...

随机推荐

  1. CodeForces 16B Burglar and Matches(贪心)

    B. Burglar and Matches time limit per test 0.5 second memory limit per test 64 megabytes input stand ...

  2. POJ 1663:Number Steps

    Number Steps Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13758   Accepted: 7430 Des ...

  3. [Codeforces Round495A] Sonya and Hotels

    [题目链接] https://codeforces.com/contest/1004/problem/A [算法] 直接按题意模拟即可 时间复杂度 :O(NlogN) [代码] #include< ...

  4. poj2115 C Looooops——扩展欧几里得

    题目:http://poj.org/problem?id=2115 就是扩展欧几里得呗: 然而忘记除公约数... 代码如下: #include<iostream> #include< ...

  5. PCB OD工具破解实例应用

    以下破解Genesis为例,对OD工具使用进行实例讲解 工具简单 介绍下下载地址: OD工具:是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器, 是为当今最为流行的 ...

  6. 湖南集训day5

    难度:☆☆☆☆☆☆☆ /* 二分答案 算斜率算截距巴拉巴拉很好推的公式 貌似没这么麻烦我太弱了...... 唉不重要... */ #include<iostream> #include&l ...

  7. Elasticsearch创建文档,利用Kibana进行创建文档

    首先先来了解一下什么是文档,es里边的文档相当于mysql数据库里边的一张表,如果你用过mongodb的话,那么肯定对es这种数据格式一定很了解了.接下来我们来看一下如何创建一个文档. PUT /sd ...

  8. 阿里邮箱绑定Foxmail失败的解决办法

    收件服务器地址: POP 服务器地址:pop3.mxhichina.com 端口110,SSL 加密端口995 或 IMAP 服务器地址:imap.mxhichina.com 端口143,SSL 加密 ...

  9. spring boot打包文件后,报错\No such file or directory

    现象: 一段代码: ClassLoader loader = XXXUtil.class.getClassLoader(); String jsFileName = loader.getResourc ...

  10. HTTP协议头部字段释义

    1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset: 浏览器申明自 ...