review
1.带参装饰器:
def change_value(is_add):
def test1(fn):
def test2(*args, **kwargs):
if is_add:
return fn(*args, **kwargs) + 100
else:
return fn(*args, **kwargs) - 100
return test2
return test1
@change_value(is_add=True)
def func1(x, y):
return x * y
print(func1(2, 3))
2.交换字典key值和value,产生新字典(生成式)
dict1 = {}
dict2 = {dict1[key]: key for key in dict1}
3.斗地主
import random
def new_poker():
pokers = []
nums = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
colors = ['♥', '♠', '♣', '♦']
for num in nums:
for color in colors:
pokers.append('%s%s' % (color, num))
pokers.extend(('小王', '大王'))
random.shuffle(pokers)
return pokers
print(new_poker())
1.数据持久化(数据本地化)
保存在程序中的数据是保存在运行内存中的,当程序运行结束,内存自动释放,数据也会消失,如果不希望数据随着程序的结束而消失,就需要将数据通过文件存储到硬盘里面,程序中经常用来保存数据的文件有:数据库文件(db,sqlite)、json文件、plist文件、txt文件、png文件、jpg文件、gif文件、mp4文件、mov文件...
2.文件操作(操作文件中的内容)
1)步骤:
打开文件-操作文件内容(读操作、写操作)-关闭文件
a.打开文件:
open(file、mode=’r'、encoding=None)
——会有一个返回值
说明:
file
— 字符串,文件在电脑中的地址(文件路径),路径可以写绝对路径也可以写相对路径
绝对路径 — 文件在电脑中的完整路径
相对路径 — ./代表当前目录(可以省略) — ../代表当前目录的长层目录
注意:当前目录值得是当前py文件所在的目录
mode
—字符串,文件的打开方式,决定打开文件后能够对文件做什么以及读写的数据类型
'r'、'rt'、'tr' - 以只读的方式打开文件,读出来的内容是字符串
'rb'、'br' - 以只读的方式打开文件,读出来的内容是二进制数据(bytes)
'w'、'wt'、'tw' - 以只写的方式打开文件,将字符串写入文件,会清空原文件
'wb'、'bw' - 以只写的方式打开文件,将二进制写入文件
'a'、'at'、'ta' - 以只写的方式打开文件,将字符串写入文件,不会清空原文件,追加
'ab'、'ba' - 以只写的方式打开文件,将二进制写入文件,不会清空原文件,追加
encoding
—字符串,设置文本文件的编码方式,只针对文本文件有效,一般使用‘utf-8’
注意:1.同一个文件读写编码方式必须一样;2.只针对文本文件的文本操作有效,所有带’b'的打开方式都不能设置encoding
b.关闭文件:
文件对象.close()
相对路径
open(r'.\02-文件操作.py')
打开文件
f = open('01-review.py', 'r', encoding='utf-8')
3.读写操作
1)读操作
文件对象.read()——获取整个文件的内容,以字符串或者二进制的形式返回
文件对象.readline()——获取文本文件中一行的内容,以字符串或者二进制的形式返回
2)写操作
文件对象.write(内容)
3)with - open
打开文件,在文件作用域中对文件进行操作,离开文件作用域文件自动关闭
语法:
with open(file,mode=‘r',enconding=None)as 文件对象:
文件作用域(操作文件)
f = open('01-review.py', 'r', encoding='utf-8')
content = f.read()
print(content)
f.seek(0) # 移动光标到文件开头
content = f.readline()
print(content)
with open('./01-review.py', 'r', encoding='utf-8') as f:
while True:
line = f.readline()
if not line:
break
print(line)
4.打开不存在的文件
以读的方式打开不存在的文件:程序会报错;
以写的方式打开不存在的文件:无报错,并会自动创建一个空文件
5.二进制文件的读写
1)普通文本文件:
可以使用带t或者带d的读写方式去打开
2)二进制数据文件:
视频文件,音频文件,图片都是二进制文件,这些文件只能用带b的方式去打开
6.怎么做到数据的持久化
1)将数据保存到本地文件
2)需要这个数据的时候,不是直接赋值而是从本地文件去取值
3)当数据值发生改变后,将新的数据跟新到文件中
# 练习:统计当前程序运行的次数
num = 1
print(num)
num += 1
with open('count.txt', 'r', encoding='utf-8') as f:
num = int(f.read())
num += 1
print('第%d次' % num)
with open('count.txt', 'w',encoding='utf-8') as f:
f.write(str(num))
补充:eval的使用
将序列字符串转换成序列
# 练习:注册账号,并打印当前已经注册过的账号
with open('count.txt', 'r', encoding='utf-8') as f:
users = eval(f.read())
while True:
user_name = input('用户名:')
pw = input('密码:')
users[user_name] = pw
x = input('是否继续(y/n):')
if x == 'n':
break
print(users)
with open('count.txt', 'w', encoding='utf-8') as f:
f.write(str(users))
7.json数据:
json模块是Python内置的模块
import json
1)概念
json是一种通用的数据格式,几乎所有的高级语言都支持将json数据转换成当前语言数据,
也支持将当前语言数据转换成json数据,一般数据接口提供的数据都是json格式的数据
2)格式
a.一个json有且只能有一个数据 b.这个数据必须是json支持的数据类型的数据
3)json支持的数据类型
数字类型——包括所有的数字
字符串——用“”双引号引起的字符集
bool布尔值——只有true和false两种(小写)
数组——相当于Python中的列表:[ ]
字典——相当于Python中的字典:其中key值必须是字符串
空值——null,相当于Python中的None,表示空和没有
3)将json数据转换成python数据
a.对应关系
json Python
数字类型 int、float
字符串 str,双引号可能变为单引号
布尔值 bool,首字母大写
数组 list
字典 dict
null None
b.转换方法
json模块中有一个loads可以将json格式的数据转换成Python对应的数据
loads(字符串)——将json格式的字符串转换成Python数据,这的字符串的内容是json数据
json.loads('100')
json.loads('"abc"')
4)将Python数据转换成json数据
a.转换关系
Python json
int、float 数字
str 字符串,双引号变为单引号
bool 布尔,首字母小写
list、元祖 数组
dict 字典
None null
b.转换方法
dumps(数据)——将将括号中的Python数据转换成json格式的字符串
json.dumps([100, 'abc', True])