首页 / PYTHON / Python 基础(八)进阶
Python 基础(八)进阶
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python 基础(八)进阶,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2880字,纯文字阅读大概需要5分钟。
内容图文
![Python 基础(八)进阶](/upload/InfoBanner/zyjiaocheng/600/8e7b5c21cb6a46f6a5837977acd194be.jpg)
一、数据类型的底层实现
-
列表
1)复制
为什么修改浅拷贝后的列表,原列表数据也被修改了?
2)列表的底层实现
列表在内存中是如何存储的?列表只是存储了元素的地址,元素是分散地存储在内存中
直接赋值:取个别名
浅拷贝:将地址复制了一份新的,还是指向原来的元素浅拷贝的操作:
总结:对于可变类型,如:列表、字典,改变浅拷贝后的值,指向的地址不变,原值会受影响,对于不可变类型,如:元组、数字、字符串,改变浅拷贝后的值,指向的地址更改,原值不会受影响。引入深拷贝:将所有层级的相关元素全部复制,原本数据不会受影响。
-
字典
1)快速查找
对比:列表
字典
2)字典的底层实现
字典在内存中是如何存储的?存在稀疏数组(动态散列表)中,再通过哈希函数计算的key的散列值找到value,空间换时间 -
字符串
存储:紧凑数组,即不用指针,在内存中连续存放,节省空间 -
可变与否
1)不可变类型:数字、字符串、元组,其+=操作实际上是创建了一个新的对象
元组并不总是不可变
2)可变类型:内容可变 -
优化列表操作
1)删除列表内的特定元素
法1:存在运算删除
缺点:每次都要从头到尾对列表进行遍历和查找,效率低
法2:使用负向索引
2)多维列表的创建
错误:将[0]*10复制5遍
正确:用解析语法——独立创建5个[0]*10
二、简洁的语法
- 解析语法
1)结构(以列表为例):[expr for value in iterable if condition]
2)例子:求20内奇数的平方
支持嵌套
- 条件表达式
expr1 if condition else expr2
例:将变量n的表达式赋给x
三、三大神器
-
生成器
1)定义:惰性计算,无需一次性存储海量数据,一边执行一边计算,只计算每次所需值,一直执行next(),直到无值可取。
2)生成方式
生成器表达式:(expr for value in range())
生成器函数——yield
每次调用next()时执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
-
迭代器
1)可迭代对象:可由for循环对其进行遍历的对象
列表、元组、字符串、字典、集合、文件
可用isinstance(对象, Iterable)来判断
生成器
2)迭代器定义:可以被next()函数调用并不断返回下一个值,直至没有数据可取。
可用isinstance(对象, Iterator)来判断
生成器是迭代器,列表、元组、字符串、字典、集合、文件不是,但可通过iter(Iterable)创造迭代器
python库itertools中的函数是迭代器,例:zip()、enumerate()
文件是迭代器3)迭代器运算:
for value in iterator: expr
4)迭代器会被耗尽
5)range() 不是迭代器,是懒序列:不包含任何内存中的内容,当调用时立刻计算来回答问题 -
装饰器
用来增加一些已开发程序的某些功能,同时不修改函数的源码及调用方式
1)函数对象:函数是Python中的第一类对象,可将函数赋值给变量,对该变量进行调用,可实现函数的功能,可将函数视为参数进行传递2)高阶函数:接收函数作为参数或返回一个函数
3)嵌套函数:函数内部再定义函数4)闭包:闭包=函数+引用环境,若一个函数定义在另一个函数的作用域内,并引用了外层函数的变量,则该函数为闭包。
一旦在内层函数重新定义了相同名字的变量,则变量成为局部变量。
可用nonlocal来允许内嵌函数修改闭包变量
5)一个简单的装饰器
嵌套函数实现
语法糖:用@修饰函数放在原函数上
若被修饰函数有参数,则内层函数加上形参
若被修饰函数有返回值,则内层函数创建一个参数保存
若装饰器本身要传递一些额外参数,通过参数,对函数实行不同的修饰
6)使装饰后原函数被覆盖的属性重新回来:再用一个语法糖在内层函数上
内容总结
以上是互联网集市为您收集整理的Python 基础(八)进阶全部内容,希望文章能够帮你解决Python 基础(八)进阶所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。