函数操作不可变全局变量,传递全局变量对象地址给栈帧的局部变量,之后改变局部变量会创建新的对象,局部变量对应对象地址变化
函数操作不可变全局变量,传递全局变量对象地址给栈帧的局部变量,之后改变局部变量会创建新的对象,局部变量对应对象地址变化
函数操作全局可变变量,本质是传递堆中对象地址,一旦在函数中对可变变量修改,即便出了函数栈帧,全局变量也会改变
import turtle
turtle.width(10)
turtle.color("blue")
turtle.circle(50)
turtle.color("black")
turtle.penup()
turtle.goto(120,0)
turtle.pendown()
turtle.circle(50)
turtle.penup()
turtle.goto(240,0)
turtle.pendown()
turtle.color("red")
turtle.circle(50)
turtle.color("yellow")
turtle.penup()
turtle.goto(60,-50)
turtle.pendown()
turtle.circle(50)
turtle.color("green")
turtle.penup()
turtle.goto(180,-50)
turtle.pendown()
turtle.circle(50)
程序基本格式:
1、恰当空格,缩进
2、大小写
3、注释
行注释#
段注释'''
列表推导式,生成列表
[表达式 for item in 可迭代对象]
[表达式 for item in 可迭代对象 if 条件]
[(a,b,c) for a in 可迭代对象 for b in 可迭代 for c in 可迭代]
字典推导式,生成字典,多于与统计众数
dict={ key:表达式 key in 可迭代对象} 表达式为key的函数
str="avvjfkjkjadjla"
dict={key:str.count(c) for c in str}
集合推导式
b={x for x in 可迭代 if条件}
元组 生成器推导式
gn=(x for x in 可迭代) 只能用一次
print(tuple(gn))
循环优化 time.time()
减少最内层循环的计算,尽量往外层放
连接字符串使用str.join(""),不生成新字符串
列表删减放在尾部,不用大量copy数据
集合是无序可变,元素不能重复,底层是字典,所有元素是字典的键
a={key1,key2,key3}
a.add(newkey)
a.remove(key)
a.clear()
a=set(list)
a=set(tuple)
a|b 或者a.union(b) 并集
a&b a与b的交集
a-b 差集
字典查找的底层逻辑
key1值先转换散列码,先取散列码右侧数组位数的值,取出与其等值的引索对应的key2, 对key1和key2进行哈希值验算,一样则取出来value,不一样则再取key1散列值右侧数组位,得到新引索,继续比较
键必须可散列,数字,字符串,元组
自定义键必须满足
支持hash()函数
支持_eq_()方法检测相等
a==b为真,则 hash(a)==hash(b)为真
字典底层原理
散列表:稀疏数组,数组的基本单元bucket
bucket包含key和value
key通过计算哈希值(散列码),根据数组位数从右向左取2进制值,并于散列表的索引对比,有空位就放入,无空位哈希值继续左移一个数组位数,继续配位。如果历遍仍无配位则数组扩容。
数组满60%,进行扩容
表格数据
r1={key1:value1,key2:value2,key3:value3}字典定义单行
r2={key1:value1,key2:value2,key3:value3}
tb=[r1,r2],列表组件表格
访问值
tb[0].get("key")
序列解包
a,b,c=dict a,b,c接受键
a,b,c=dict.values() abc接受值
a,b,c=dict.items() abc接受键值对
字典修改
dict[键]=值, 添加新元素,key重复则覆盖
dict1.update(dict2),以dict2的内容加入dict1,键重复则覆盖。
del(dict[键1]) 删除键1和值
dict.pop("键1"),删除键1值对,并返回值
dict.clear()清空字典
dict.popitem()随机移除一个键值对
字典访问
dict.get("键",“不存在时返回的值”)
dict.items() 显示所有键值对
dict.keys() 显示所有键
dict.values() 显示su
len(dict) 返回键值对数量
"键" in dict判断键是否在字典里
字典:键值对的无序可变序列
键为不可变数据,不可重复
a={键1:值1,键2:值2}
b=dict(键1=值1,键2=值2)
c=dict( [ (键1,值1),(键2,值2) ] )
d=dict(zip(list1,list2))
e=dict.fromkeys([key1,key2 ,key3])
生成器推导式,产生生成器对象
s=(x*2 for x in range(5))
tuple(s) 转换为元组,用完一次s失效
s._next_()指针调动,输出当前值并下移
通过切片访问返回的还是元组
元组排序只能用sorted(),并生成列表
zip(list1,list2,list3),返回zip对象并将每个列表转化为元组
元组是不可变序列
创建元组
a=(,,,)
a=tuple(字符,数字,列表)
多维列表:列表嵌套
a[一维引索][二维引索]
列表排序 修改原列表,不建立新列表
list.sort()默认升序排列
list.sort(reverse=True)降序排列
import random
random.shuffle(list)
列表排序,建立新列表
new_list=sorted(list),升序
new_list=sorted(list,reverse=True),降序
c=reversed(list)返回逆序排列的迭代器对象,只能用一次
max(list), min(list)
sum(list),数值型列表可用
列表元素提取
list[起始位置:终点位置:step], 从起始位置到终点-1位置,step为-1时反向提取