python - 那些零碎的知识点

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新出的,本人用了这个以后, 果断抛弃其余方法, 真的太强大了!!!python

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, 可是字符串中只包含字母, 数字, 下划线时才会缓存app

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.

相关文章
相关标签/搜索