浅拷贝 copy :不拷贝子对象的内容,只拷贝子对象的引用。
深拷贝 deepcopy :连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象。
浅拷贝 copy :不拷贝子对象的内容,只拷贝子对象的引用。
深拷贝 deepcopy :连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象。
int float 字符串 元组 布尔值
传递参数是不可变对象时,实际也是传递的对对象的引用,但是因为不可变对象不可修改,所以系统创建新的对象。
可变对象:字典、列表、集合、自定义的对象
不可变对象:数字、字符串、元组、function等
可变对象进行更改时,不创建对象拷贝,直接修改这个对象。
函数内的局部变量可以和全局变量重名,只要不进行global申明,就是局部变量。
打印输出全部的局部变量 print(locals())
打印输出全部的全局变量 print(globals())
推导式
1、列表推导式
>>>[x for x in range(1,5)]
[1,2,3,4]
>>>[x for x in range(1,20) if(x%5==0)]
2、字典推导式
{key:value for 表达式 in 迭代对象}
3、集合推导式
{key for 表达式 in 迭代对象}
4、生成器推导式 生成元组
一个生成器只能运行一次。
集合添加元素
a.add()
set()变成集合
remove()删除
字典是散列表 稀疏数组总有空白元素
数组每个单元就是一个bucket:2个部分 键对象引用和值对象引用
字典元素的增加
键已经存在,覆盖旧的,不存在就增新的
直接添加a['address']='haidian'
2、updata()直接将新字典中的所有键值对全部添加到旧字典对象上 a.update(b)
3、元素删除 del(a[name])
pop()删除指定键值对 b=pop()
字典:包含键和值
可以直接访问键获取值 a['name']
可以通过get获得
a,get('name')
获取所有键值对 a.items()
列出所有的键 a.keys()
列出所有的值 a.values()
键值对的个数 len()
检测一个键是否在字典中 "name" in a
1、a={'name':'gaoqi','age','18'}
a['name']=gaoqi
键不可可变 不可重复
2、a=dict(name='gaoqi',age='18')
a=dict([("name","gaoqi"),("age","18")])
3、zip()
k=['name','age']
v=['gaoqi','18']
d=dict(zip(k,v))
a=[
["高小一",18,3000,“北京”]
["高小二",18,3000,“上海”]
]
a.sort()
id(a)
import random
a.random.shuffle
max(a)
min(a)
sum(a)
a=[10,20,30,40,50,60]
a[1:3:1]
>>>[20,30]
a[1::2]
>>>[20,40,60]
a[1:]
>>>[20,30,40,50,60]
a[:2]
>>>[10,20]
包头不包尾
a[::-1]
>>>[60,50,40,30,20,10]
id(a)
a.extend([100,200])
左移<<乘以2
右移>>除以2
运算优先级:位运算和算术运算>比较运算符>赋值运算符>逻辑运算符
a,b=10,20
a,b=b,a
为什么python可以实现变量互换?
traceback模块
异常写入日志文件
with上下文管理
with context_expr[as var];
语句块
自动管理资源,适用于文件操作。网络通信
SyntaxeError:语法错误
n4NamerError:尝试访问一个没有声明的变量
ZeroDivisionError:除数为0
ValueError:数值错误
TypeError:类型错误
AttributeError:访问对象不存在的属性
IndexError:索引越界
KeyError:字典的关键字不存在
finally无论是否发生异常都会执行,通常用来释放try块中申请的资源。