''''''
'''
变量的数据类型
int str bool list
5、字典 dict
定义和写法:由{}表示,每个元素是key:value的键值对形式,元素间是逗号隔开
特点:
1、key是可哈希的-不可变类型(比如:int str tuple bool)
value的类型是不限制的,可以存放任意数据类型
2、字典是无序的,没有索引和切片
常见操作:
增
1、dic[key] = value #单个键值对添加,先建立一个空字典
2、dic = {k1:v1,k2:v2} #一次添加多个键值对-字典的定义
3、ret= dic.setdefault(key,value) #如果key已经存在,不会覆盖
#添加键值对,返回添加的value
4、dic2 = dic.fromkeys(iterable,value) #iterable中每个元素共用一个value
dic2 = dict.fromkeys(iterable,value) #类方法
#注意点1:会新产生一个新字典,原字典本身不会改变
#注意点2:fromkeys是一个类方法
删
1、pop
参数是key,删除key对应的元素-键值对,并且获取被删除元素的value
2、popitem
参数是空,随机删除一个元素-键值对,并且获取被删除元素-键值对
注意:从表面看,是删除了字典的最后一个键值对,但是字典的key是无序的,所有还是随机的
3、del
1、参数是key,删除key对应的元素-键值对
2、还可以直接删除整个字典,回收内存空间
4、clear
清空字典的元素-键值对,变成空字典
改
1 dic[key] = 新value
根据key获取到字典的value,对value进行重新赋值
2 update
dic1.update(dic2)
把字典2的元素依次添加到字典1
注意:如果字典2的key和字典1的key有相同的,会出现value的覆盖
查-取值
'''
'''
1 dic[key]
根据自定的key取value值,如果key不存在,就报错
2 get
写法:字典.get(key[,value])
参数1是key,参数2是默认返回值(不写默认是None)
1、如果key存在,就返回字典中key对应的value
2、如果key不存在,不会报错,会返回参数2(参数2不写默认是None)
这一点上,健壮性强于dic[key]来取值
3 setdefault 添加元素,并取值元素的value(key如果已经存在,不会覆盖)
写法:字典对象.setdefault(key1,value1)
参数1是新增加元素的key,参数2是新增加元素-键值对的value
1、将参数1和参数2作为新元素-键值对添加到字典对象
原字典对象添加了一个新元素-键值对
2、返回者是参数2,即获取新增加的value作为返回值-这个返回value1就是取值
(和pop的删除并返回被删除值有类似之处,
setdefault是添加并返回添加的value)
3、如果key1已经在原字典对象中存在了,新的键值对将无法添加,原字典对象保持不变
这里不会覆盖原字典对象的value
注意点:不会覆盖这个点和dic[key]=value,如果key已经存在,会覆盖,是不同的
字典for循环:
1、iterable
dic1 dic1.keys() dic1.values()
2、for i in dic1:
print(i,dic1[i])
for i in dic1.keys():
print(i,dic1[i]) #用的比较少
for i in dic.values():
print(i) #适用场景:比如求value的平均值
for i in dic1.items():
print(i) #这里返回是列表,列表的元素是键值对元组 (k1,v1)
for k,v in dic1.items():
print(k,v)
6 元组--tuple
1、元组是只读的,不可变
不可变的是元组的第一层
如果元组的元素是列表,列表是可以添加删除元素的
2、操作方法比较的少
count()
index()
len()
3、iterable-可迭代的
支持for循环
(for循环的取值速度:dict>set>list>tuple)
4、元组是没有元组推导式的
7 集合-set
1、集合的概念:只有key的字典
2、特点:
无序
去重
元素是不可变的(可哈希的)--因为字典的key是不可变的
3、支持for循环,iterable
4、可冻结的集合 frozen
特点:frozen本身是不可变的(可哈希)
5、操作
两个集合之间可以& | - (交集&、并集|、差集)等
6、备注:
set不能作为字典的key
frozetkey作为字典的key
'''
'''''
'''
一、条件判断、循环
1 条件判断if
if 条件:
代码块(语句块)
elif 条件:
代码块
elif 条件:
代码块
。。。
else:
代码块
2 循环
1 while循环(条件循环)
while 条件:
循环体
break (结束整个循环-本层,如果是2层循环,只能跳出1层,不能跳出2层)
continue(结束本次循环-迭代,继续执行下一次循环)
else:
pass #当上面的while正常结束后(条件是False的时候,没有出现break),才执行这个语句
2for循环--主要用于循环遍历取值
3 print
print(message,end='\n',sep=' ')
参数1:打印输出的信息
参数2:行结束符,不写默认是换行 \n
参数3:分隔符,不写默认是空格
注意点:打印2个及以上元素,才会用到分隔符,打印一个元素,是用不到分隔符的
4 input 用户交互
5 range
range(start,end,step) --range和切片的区别,分隔符不同,前者是逗号,后者是冒号
#step不写,默认是1
切片:li1(start:end:step)
6 文件路径的分隔符
win \ 反斜杠-捺杠 \还表示转义 \t \r \n
linux / 顺斜杠-撇杠
二、运算符
1、算数运算符
+ - * / // % **
2、比较运算符
> >= < <= == !=
3、逻辑运算符
and-与 两个同时为真,结果才是真
or-或 两个中有一个是真,结果就是真
not-非 非假即真 非真即假
优先级顺序: 小括号() >not > and >or
a and b
如果a不是0,返回b
如果a是0,返回a
a or b
如果a不是0,返回a
如果a是0,返回b
4、赋值运算符
+= -= *= /= %=
a+=b 等价于 a = a+b
5、成员运算符
x in xx
比如:判断列表或者字典的元素
6、is和==
is比较的是内存地址
==比较的是值
小数据池:int str bool这三种类型的对象创建之后,符合规则的,会被缓存到小数据池
下次直接从小数据池中调用,从而节省内存
比如:a1='jack' a2='jack'
在创建变量a1的时候,会新开辟一个内存空间,这个内存空间的名字是a1,里面的值存的是'jack'
且把这个内存空间缓存到小数据池子中
在创建变量a2的时候,不会新开辟另外一个内存空间,而是把a2指向'jack'所在的内存地址
即a1和a2的内存地址是一样的
7、文件操作
open(文件路径,mode='模式',encode='编码')
模式: r w a r+ w+ a+ rb wb ab
for循环可以迭代文件句柄,拿到的是一行一行的内容
seek(0,0) #光标移到文件开头 参数1是偏移量 参数2中:0表示文件开头,1表示文件当前位置,2表示文件末尾
seek(0,2) #光标移到文件末尾
seek(0,1) #光标移到当前位置
tell() #打印光标的当前位置
with open(文件路径,mode='模式',encode='编码') as f:
pass #不需要flush和close
文件修改:
打开源文件,从源文件中读取内容到内存,修改,然后将内容写入到新文件。
删除源文件,把新文件重命名成源文件的名字