没有合适的资源?快使用搜索试试~ 我知道了~
首页Python学习笔记:动态类型与引用理解
Python学习笔记:动态类型与引用理解
需积分: 14 7 下载量 196 浏览量
更新于2024-07-18
收藏 11.82MB PDF 举报
本篇Python学习笔记强调了Python语言中的一些核心概念,主要涉及动态类型、变量与对象的关系以及引用计数机制。首先,Python中的变量无需显式声明其类型,类型会在运行时根据赋值自动确定。变量初次赋值时创建对象,后续赋值只是改变变量引用的对象,而非替换原有对象。这意味着多个变量可以共享同一个对象,这在理解引用计数(引用计数器)上至关重要。 引用计数用于跟踪对对象的引用,当引用计数为0时,对象会被垃圾回收。通过sys模块的getrefcount函数可以查看对象的引用次数,这有助于理解内存管理。Python的动态类型系统使得多态成为可能,即方法的执行依赖于调用对象的实际类型,而非预定义的类型约束。 查看对象类型和属性是编程中的常见操作,使用type()函数可以获取对象类型,而dir()函数和help()函数则提供了查看属性和详细信息的方法。例如,dir(x)用于查看x所指向对象的所有属性,help(x.attr)和help(x)分别用于查看特定属性的文档和对象的完整帮助信息。 这篇笔记着重介绍了Python语言底层的内存管理和类型系统,对于理解和实践Python编程有着重要的指导意义。通过学习这些概念,学习者可以更好地设计高效、灵活的Python程序,避免不必要的内存消耗和潜在的编程陷阱。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/10660772/bg10.jpg)
Python 3.0 中的字典只能进行相等、不等比较
数字与其他类型比较在 Python 3.0 中是错误的
8.当一个复合对象包含指向自身的引用时(如 L.append(L) ),称为循环对象。当Python在对象中检测到循环时,会打印成 [...] 而不会
陷入无限循环。
1.字典是一些 “键 — 值” 对的无序集和。它通过键来索引。
字典是可变对象,它的元素的值的类型不限,它的元素的键类型是不可变类型
意味着键类型不能是列表、 set 、,字典
字典的常量表达式: {'a':3,'b':4} ,空字典的常量表达式为 {}
dict() 函数可以从关键字参数生成字典: dict(a=3,b=4) 生成字典 {'a':3,'b':4}
你可以通过 zip() 函数生成关键字参数: dict(zip(['a','b'],[3,4])) 生成字典 {'a':3,'b':4}
你也可以用字典的 .fromkeys() 类方法生成字典:
dict.fromkeys(['a','b']) 生成字典 {'a':None,'b':None}
dict.fromkeys(['a','b'],3) 生成字典 {'a':3,'b':3}
字典索引: d[key] 。字典索引返回对应的值
键测试: key in d 。测试指定键是否存在字典中
字典的迭代:
d.keys() :返回一个dict_keys对象,它是一个可迭代对象,迭代时返回键序列
d.values() :返回一个dict_values对象,它是一个可迭代对象,迭代时返回值序列
d.items() :返回一个dict_items对象,它是一个可迭代对象, 迭代时返回元组 (键,值) 的序列
字典迭代在Python3中返回可迭代对象,在Python2.7中均返回列表。 因此在Python3中如果想得到列表,必须将返回值传
入 list() 函数中得到列表
字典的拷贝: d.copy() 。只是字典的浅拷贝
获取键的值:通过 d.get(key,default_value) 。返回键对应的值, 若键不存在则返回 default_value
对于 d[key] 返回对应的值,如果 key 不存在则抛出 KeyError 异常
字典字典
![](https://csdnimg.cn/release/download_crawler_static/10660772/bg11.jpg)
字典的操作:
d1.update(d2) :合并两个字典,原地修改 d1 字典
d.pop(key) : 从字典中删除 key 并返回该元素的值
del d[key] :从字典中删除 key 但是不返回该元素的值
d[key]=value :原地的添加/修改字典。当向不存在的键赋值时,相当于添加新元素
获取字典中元素数量: len(d) 。它也等于键列表/值列表的长度
字典本身也是一个可迭代对象,它的迭代方法为:
for key in d:
pass
它在列表的键上迭代,也等价于
for key in d.keys()
pass
2.Python3中字典的变化:
![](https://csdnimg.cn/release/download_crawler_static/10660772/bg12.jpg)
d.keys() 、 d.values() 、 d.items() 返回的是可迭代对象,他们称为视图对象, 而不是列表。修改字典,则这些视图对象会相
应变化
支持字典解析表达式来生成字典,如 {k:v for k,v in zip(['a','b','c'],[1,2,3])} ,
{k:v for k,v in [('a',1),('b',2),('c',3)]}
取消了Python2中的 has_key(key) 方法,而用 key in d 表达式取代
Python3中,只有相等不等测试有效,字典的大小比较无效
3.Python3中字典是一个迭代器对象,其迭代结果是返回键序列
1.内置的 open() 函数会创建一个Python文件对象,可以作为计算机上的一个文件的引用。
2.打开文件: outfile=open(r'C:\filename','w') :
第一个参数 r'C:\filename' 为文件名字符串
第二个参数 'w' 为打开模式字符串。有以下三种:
'r' :读打开(默认行为)
'w' :写打开
'a' :追加写打开
第二个参数也可以添加 'b' 表示二进制处理。二进制处理中,换行符未转换, 同时Python3中 Unicode编码被关闭
第二个参数也可以添加 '+' 表示读写同时作用
还有第三个参数可选,用于控制输出缓冲. '0' 表示无缓冲(只能在二进制模式中使用无缓冲)。
3.文件对象的方法:
文件读入:
.read() :读取接下来的整个文件到单个字符串
.read(n) :读取接下来的 n 个字节到一个字符串
.readline() :读取下一行到一个字符串(包括行末的换行符)
.readlines() :按行读取接下来的整个文件到字符串列表,每个字符串一行
写入文件:
.write(str) :写入字符串到文件(并不会自动添加换行符以及其他任何字符, str 是啥就写啥), 返回写入的字符数
文件文件
![](https://csdnimg.cn/release/download_crawler_static/10660772/bg13.jpg)
.writelines(strlist) :将字符串列表内所有字符串依次写入文件(并不会自动添加换行符以及其他任何字符)
关闭文件: .close() 方法。
刷新输出缓冲区: .flush() 方法。通常关闭文件会将输出缓冲区内容写入到文件中;但用 .flush() 方法不必关闭文件。
定位文件: .seek(N) 方法,将文件偏移修改到字节 N 处以便进行下一次操作
文件迭代:文件对象也是一个可迭代对象,每一次迭代返回一行,对于大型文件一次性读取非常耗内存和性能:
for line in open('data'):#每次循环迭代时,自动读取并返回一行
#use line
pass
读写文本文件时,默认的编码是 utf-8 ,你也可以使用指定的编码: open(r'filename',encoding='latin-1')
读二进制文件用 openopen(r'filename','rb')
4.从文本文件中读取文字行的最佳方式是用文件迭代器,不要直接读取文件
5.当文件对象被自动收回时,Python会自动关闭该文件,这意味着不一定要手动调用 .close() 方法
6.默认的写操作总是缓冲的。当文件关闭或者 .flush() 方法调用时,缓冲的输出数据会写入硬盘。
7.文件的空行是含有换行符的字符串,而不是空字符串。因此如果读入操作返回空字符串,则表示已经到文件末尾了。
8.Python3中,文本文件将内容表示为常规的 str 字符串,自动执行Unicode编码和解码,并且默认执行行末转换。而二进制文件将内容表示
为一个特殊的 bytes 字节串类型,且运行程序不修改地访问文件内容。
不能以文本格式打开一个二进制数据文件,会乱码
9.可以在文件中存储并解析Python对象。由于文件数据在脚本中是字符串,文件对象的 .write() 方法不会自动地将Python对象转成字符串,
因此需要手工转换。
可以用格式化字符串方法或者 str() 方法将Python对象转成字符串
将字符串转换成Python对象可以用 eval() 方法
或者直接使用 pickle 模块自动存储和解析Python对象:
存储: pickle.dump(obj,file) ,其中 obj 是要存储的Python对象, file 文件对象 (用二进制写打开)
加载: obj=pickle.load(file) ,其中 file 文件对象(用二进制读打开)
![](https://csdnimg.cn/release/download_crawler_static/10660772/bg14.jpg)
10. struct 模块能够打包/解包二进制数据
打包: data=struct.pack('>i4sh',7,b'abcd',8) 。其中第一个参数为格式说明字符串,后面的参数为待打包的数据。格式说明字
符串为:
> 为说明符
i 说明第一个待打包的数据为整数
4s 说明第二个待打包的数据为4个字节的字节串
h 说明第三个待打包的数据为16进制整数
解包: val=struct.unpack('>i4sh ,data)`。其中第一个参数为格式说明符,第二个参数为已经打包的二进制数据,返回一个元组。
11. sys 模块中有几个预先打开的文件对象:
sys.stdout 对象:标准输出对象
sys.stdin 对象:标准输入对象
sys.stderr 对象:标准错误输出对象
12. os 模块中的文件描述符对象支持文件锁定之类的低级工具
13. socket 、 pipe 、 FIFO 文件对象可以用于网络通信与进行同步
1.所有Python的复合语句,都是以冒号 : 结尾,下一行缩进开始进入代码块。同一个级别代码块的缩进形式相同
2.测试( if | while )中的一对圆括号 () 是可选的
3.可以省略行尾的分号 ;
4.代码块的范围由缩进来决定。同一个块中,所有语句向右缩进相同的距离(块内语句垂直左对齐)。
缩进可以用空格或者制表符。不应该在同一段代码中混合使用制表符和空格
若缩进出现不一致,则会导致语法错误
5.若将多行语句列入一行,则必须用分号隔离 ;
6.任何在括号中的多行语句都视为一行。括号包括圆括号 () ,中括号 [] ,大括号 {} 。也可以用反斜线 \ 转义换行符来跨多行
语句和语法语句和语法
剩余95页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
wfg99541c
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)