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新出的,本人用了这个之后, 果断抛弃其他方法, 真的太强大了!!!
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 . 仅包含数字, 字母, 下划
线这个时候会被缓存. 但字符串串长度不能大于204.指定驻留留. 我们可以通过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 - 那些零碎的知识点的更多相关文章
- 【Python】 零碎知识积累 II
[Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...
- Python OS模块重要知识点
Python OS模块重要知识点 这几点很重要,主要是关于文件路径,我之前踩了很多坑,今天总结一下,方便以后能够避免与path相关的各种坑! 1,首先我们想获取某个文件夹下面的所有文件夹以及文件(不包 ...
- 07: python基础 零碎知识点
目录: 1.1 python异常处理 1.2 三元运算,filter和map与lambda表达式结合使用举例 1.3 内置方法 1.4 动态导入模块 1.1 python异常处理返回顶部 1.Pyth ...
- 初学python - 零碎的知识点
* 标识符命名规则 数字,字母,下划线组成,数字不能开头区分大小写 * 注释 单行:#:多行:‘ ‘ ‘ ,“”“: * 进制标识 b:二进制 o:八进制 d:十进制x:十六进制 转换:format( ...
- 【Python】 零碎知识积累 I
大概也是出于初高中时学化学,积累各种反应和物质的习惯,还有大学学各种外语时一看见不认识的词就马上记下来的习惯,形成了一种能记一点是一点的零碎知识记录的癖好.这篇文章就是专门拿来记录这些零碎知识的,没事 ...
- Day8 Python基础之遗漏知识点(六)
1. 遗漏知识点 深.浅拷贝: http://www.cnblogs.com/yuanchenqi/articles/5782764.html a=b: 浅拷贝: 深拷贝 集合(set) 集合的定 ...
- Python常用基础语法知识点大全
记得我是数学系的,大二时候因为参加数学建模,学习Python爬虫,去图书馆借了一本Python基础书,不厚,因为有matlab和C语言基础,这本书一个星期看完了,学完后感觉Python入门很快,然后要 ...
- Python语言及其应用 - 知识点遍历
遍历python语法 2.基本元素:数字.字符串和变量 2.1 python有哪些基本类型? 布尔型(True, False),整型(42,100000),浮点型(3.14159,1.0e8) ...
- python中的小知识点
这里是一些小知识点的汇集,为的是以后查找的方便. 行与缩进: 物理行:实际看到的代码行数. 逻辑行:在意义上的函数(即解释器执行的行数) 如果一个物理行中包含了多个逻辑行,则每个逻辑行之间需要用分号 ...
随机推荐
- ERROR (ConnectionError): HTTPConnectionPool (Caused by <class 'socket.error'>: [Errno 111] Connecti
感谢朋友支持本博客.欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免.欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- Jboss 7配置日志
1. Jboss7配置日志理论知识介绍 Jboss 7日志能够在XML配置文件和日志管理属性文件内配置.默认日志配置在configuration文件夹的logging.properties文件内. 通 ...
- ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性!
ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性! curl -XPOST "http://localhos ...
- hibernate基础简单入门1---helloword
1:目录结果 2:实体类(student.java) package com.www.entity; public class Student { private int id; private St ...
- bzoj3224 普通平衡树(splay 模板)
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 11427 Solved: 4878[Submit][St ...
- cmd执行Java程序
先创建一个文本,里面内容为 public class hello{ public static void main(String[] arg) { System.out.println("H ...
- find_in_set的用法(某个字段包含某个字符)
有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1,3,4的格式存 ...
- 【LeetCode】105 & 106 Construct Binary Tree from (Preorder and Inorder) || (Inorder and Postorder)Traversal
Description: Given arrays recording 'Preorder and Inorder' Traversal (Problem 105) or 'Inorder and ...
- GitLab Runner and CICD
# Linux x86-64 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaw ...
- (转)Vuex简单入门
今天试了一下Vuex,感觉跟Redux的实现思想类似.再此,简单地总结一下. 什么是Vuex 在Vue中,多组件的开发给我们带来了很多的方便,但同时当项目规模变大的时候,多个组件间的数据通信和状态管理 ...