局部变量和全局变量效率测试
局部变量的查询和访问速度比全局变量快,优先考虑局部变量。
局部变量和全局变量效率测试
局部变量的查询和访问速度比全局变量快,优先考虑局部变量。
变量的作用域(全局变量和局部变量)
全局变量:作用域为定义的模块。(少定义)(作为常量)(函数内部想改变全局变量的值,使用global声明一下)
局部变量:作用域为函数体。在栈的栈帧中,调用完函数就删除。
函数也是对象,内存底层分析
对象:堆里面的内存块
def:在堆里创建函数对象
同时在栈里创建对象名字是函数名称,值为函数地址,进行调用时,函数名称(),表示调用函数,顺着地址找到函数进行调用,创建一次调用多次,
形参和实参
文档字符串(函数的注释)
函数用法和底层分析
函数是可重用的程序代码块。python中,定义函数的语法如下:
def 函数名([参数列表]):
'''文档字符串'''
函数体/若干语句
要点:
使用def来定义函数,def之后是空格,然后是函数名和(),Python执行def时,会创建一个函数对象,并绑定到函数名变量上。
推导式创建序列
列表推导式
列表推导式生成列表对象,语法如下:
[表达式 for item in 可迭代对象]
字典推导式
{key:value for value for 表达式 in 可迭代对象}
集合推导式
{表达式 for item in 可迭代对象}
生成器推导式(用于生成元组)
一个生成器只能运行一次,用过不可再用。
使用zip()并行迭代
zip()函数对多个序列进行迭代
循环代码优化(循环次数较多)
(1)尽量减少循环内部不必要的运算。
(2)嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
(3)局部变量查询较快,尽量使用局部变量。
(4)连接多个字符串,使用join而不使用+
(5)列表进行元素插入和删除,尽量在尾部jin'xing
else语句
while、for循环可以附带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else子句。否则不执行。
break语句
break语句可用于while和for循环,用来结束整个循环,当有嵌套循环时,break语句只能跳出最近一层的循环。
continue语句
continue语句用于结束本次循环,继续下一次,多个循环嵌套时,continue也是应用于最近的一层循环。
嵌套循环
for循环和可迭代对象遍历
for循环通常用于可迭代对象的遍历,语法格式如下:
for 变量 in 可迭代对象:
循环体语句
循环结构
while循环
选择结构嵌套
一定要控制好不同级别代码块的缩进量。
多分支选择结构
双分支选择结构
三元条件运算符
条件为真时的值 if (条件表达式) else 条件为假时的值
选择结构
单分支选择结构
条件表达式详解
在选择和循环结构中,条件表达式的值为False的情况如下:
False、0、0.0、空值None、空序列对象
集合:无序可变,集合底层是字典实现,集合的所有元素都是字典中的”键对象“,因此是不能重复且唯一的。
集合创建和删除
1.{}创建
2.set()创建
3.remove()、clear()
集合相关操作
字典核心底层原理(重要)
列表通过索引值寻找,字典通过键寻找。
字典对象的核心是散列表。散列表是一个稀疏数组,数组的每个单元叫做bucket,每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。
(1)将一个键值对放进字典的底层过程
序列解包
序列解包可以用于元组、列表、字典。序列解包可以方便对多个变量进行赋值。