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,產(chǎn)生新字典(生成式)
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.數(shù)據(jù)持久化(數(shù)據(jù)本地化)
保存在程序中的數(shù)據(jù)是保存在運行內(nèi)存中的懦砂,當程序運行結(jié)束,內(nèi)存自動釋放组橄,數(shù)據(jù)也會消失荞膘,如果不希望數(shù)據(jù)隨著程序的結(jié)束而消失,就需要將數(shù)據(jù)通過文件存儲到硬盤里面玉工,程序中經(jīng)常用來保存數(shù)據(jù)的文件有:數(shù)據(jù)庫文件(db羽资,sqlite)、json文件遵班、plist文件屠升、txt文件、png文件狭郑、jpg文件腹暖、gif文件、mp4文件翰萨、mov文件...
2.文件操作(操作文件中的內(nèi)容)
1)步驟:
打開文件-操作文件內(nèi)容(讀操作脏答、寫操作)-關(guān)閉文件
a.打開文件:
open(file、mode=’r'亩鬼、encoding=None)
——會有一個返回值
說明:
file
— 字符串殖告,文件在電腦中的地址(文件路徑),路徑可以寫絕對路徑也可以寫相對路徑
絕對路徑 — 文件在電腦中的完整路徑
相對路徑 — ./代表當前目錄(可以省略) — ../代表當前目錄的長層目錄
注意:當前目錄值得是當前py文件所在的目錄
mode
—字符串雳锋,文件的打開方式黄绩,決定打開文件后能夠?qū)ξ募鍪裁匆约白x寫的數(shù)據(jù)類型
'r'、'rt'玷过、'tr' - 以只讀的方式打開文件爽丹,讀出來的內(nèi)容是字符串
'rb'、'br' - 以只讀的方式打開文件冶匹,讀出來的內(nèi)容是二進制數(shù)據(jù)(bytes)
'w'习劫、'wt'、'tw' - 以只寫的方式打開文件嚼隘,將字符串寫入文件诽里,會清空原文件
'wb'、'bw' - 以只寫的方式打開文件飞蛹,將二進制寫入文件
'a'谤狡、'at'灸眼、'ta' - 以只寫的方式打開文件,將字符串寫入文件墓懂,不會清空原文件焰宣,追加
'ab'、'ba' - 以只寫的方式打開文件捕仔,將二進制寫入文件匕积,不會清空原文件,追加
encoding
—字符串榜跌,設(shè)置文本文件的編碼方式闪唆,只針對文本文件有效,一般使用‘utf-8’
注意:1.同一個文件讀寫編碼方式必須一樣钓葫;2.只針對文本文件的文本操作有效悄蕾,所有帶’b'的打開方式都不能設(shè)置encoding
b.關(guān)閉文件:
文件對象.close()
相對路徑
open(r'.\02-文件操作.py')
打開文件
f = open('01-review.py', 'r', encoding='utf-8')
3.讀寫操作
1)讀操作
文件對象.read()——獲取整個文件的內(nèi)容,以字符串或者二進制的形式返回
文件對象.readline()——獲取文本文件中一行的內(nèi)容础浮,以字符串或者二進制的形式返回
2)寫操作
文件對象.write(內(nèi)容)
3)with - open
打開文件帆调,在文件作用域中對文件進行操作,離開文件作用域文件自動關(guān)閉
語法:
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.打開不存在的文件
以讀的方式打開不存在的文件:程序會報錯;
以寫的方式打開不存在的文件:無報錯影锈,并會自動創(chuàng)建一個空文件
5.二進制文件的讀寫
1)普通文本文件:
可以使用帶t或者帶d的讀寫方式去打開
2)二進制數(shù)據(jù)文件:
視頻文件撵枢,音頻文件,圖片都是二進制文件精居,這些文件只能用帶b的方式去打開
6.怎么做到數(shù)據(jù)的持久化
1)將數(shù)據(jù)保存到本地文件
2)需要這個數(shù)據(jù)的時候锄禽,不是直接賦值而是從本地文件去取值
3)當數(shù)據(jù)值發(fā)生改變后,將新的數(shù)據(jù)跟新到文件中
# 練習:統(tǒng)計當前程序運行的次數(shù)
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的使用
將序列字符串轉(zhuǎn)換成序列
# 練習:注冊賬號靴姿,并打印當前已經(jīng)注冊過的賬號
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('是否繼續(xù)(y/n):')
if x == 'n':
break
print(users)
with open('count.txt', 'w', encoding='utf-8') as f:
f.write(str(users))
7.json數(shù)據(jù):
json模塊是Python內(nèi)置的模塊
import json
1)概念
json是一種通用的數(shù)據(jù)格式沃但,幾乎所有的高級語言都支持將json數(shù)據(jù)轉(zhuǎn)換成當前語言數(shù)據(jù),
也支持將當前語言數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù)佛吓,一般數(shù)據(jù)接口提供的數(shù)據(jù)都是json格式的數(shù)據(jù)
2)格式
a.一個json有且只能有一個數(shù)據(jù) b.這個數(shù)據(jù)必須是json支持的數(shù)據(jù)類型的數(shù)據(jù)
3)json支持的數(shù)據(jù)類型
數(shù)字類型——包括所有的數(shù)字
字符串——用“”雙引號引起的字符集
bool布爾值——只有true和false兩種(小寫)
數(shù)組——相當于Python中的列表:[ ]
字典——相當于Python中的字典:其中key值必須是字符串
空值——null宵晚,相當于Python中的None,表示空和沒有
3)將json數(shù)據(jù)轉(zhuǎn)換成python數(shù)據(jù)
a.對應(yīng)關(guān)系
json Python
數(shù)字類型 int维雇、float
字符串 str淤刃,雙引號可能變?yōu)閱我?布爾值 bool,首字母大寫
數(shù)組 list
字典 dict
null None
b.轉(zhuǎn)換方法
json模塊中有一個loads可以將json格式的數(shù)據(jù)轉(zhuǎn)換成Python對應(yīng)的數(shù)據(jù)
loads(字符串)——將json格式的字符串轉(zhuǎn)換成Python數(shù)據(jù)吱型,這的字符串的內(nèi)容是json數(shù)據(jù)
json.loads('100')
json.loads('"abc"')
4)將Python數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù)
a.轉(zhuǎn)換關(guān)系
Python json
int逸贾、float 數(shù)字
str 字符串,雙引號變?yōu)閱我?bool 布爾,首字母小寫
list铝侵、元祖 數(shù)組
dict 字典
None null
b.轉(zhuǎn)換方法
dumps(數(shù)據(jù))——將將括號中的Python數(shù)據(jù)轉(zhuǎn)換成json格式的字符串
json.dumps([100, 'abc', True])