文章目录
内置函数
abs 绝对值函数
intvar = -9
res = abs(intvar)
print(res)
round 四舍五入
(n.5 n为偶数则舍去 n.5 n为奇数,则进一!)
'''奇进偶不进 , 只在n.5的情况下发生'''
a = 5.34
a = 6.5 # 6
a = 5.5 # 6
a = 6.56
a = 17.51
print(round(a))
sum 计算一个序列的和
lst = [1, 2, 3, 4, 5, 5, 6, 67, 7]
res = sum(lst)
print(res)
total = 0
for i in lst:
total += i
print(total)
max 获取一个序列里边的最大值
lst = [1, 2, 3, 4, 5, 5, 6, 67, 7]
res = max(lst)
print(res)
lst.sort()
print(lst)
maxvar = lst[-1]
minvar = lst[0]
print(maxvar)
print(minvar)
min 获取一个序列里边的最小值
lst = [1, 2, 3, 4, 5, 5, 6, 67, 7]
res = min(lst)
print(res)
# 按照年龄 , 找到最小的元组
tup = [("马具强", 21), ("张国成", 30), ("和键翰", 22), ("黄熊大", 80)]
def func(n):
return n[-1]
res = min(tup, key=func)
print(res) # ("马具强",21)
pow 计算某个数值的x次方
如果是三个参数, 前两个先运算(谁的几次幂) , 运算的结果跟第三个参数取余.
res = pow(2, 3)
print(res) # 8
res = pow(2, 3, 3)
print(res) # 2
res = pow(2, 3, 7)
print(res) # 1
res = pow(2, 3, 5)
print(res) # 1
range 产生指定范围数据的可迭代对象
res = range(3)
for i in res:
print(i)
for i in range(5, 14):
print(i)
for i in range(10, 0, -1):
print(i)
bin 将10进制数据转化为二进制
res = bin(4)
print(res)
oct 将10进制数据转化为八进制
res = oct(8)
print(res)
hex 将10进制数据转化为16进制
res = hex(16)
print(res)
chr 将ASCII编码转换为字符
res = chr(97)
print(res)
ord 将字符转换为ASCII编码
res = ord("a")
print(res)
eval 将字符串当作python代码执行
只能执行一个单行的语句,不能完成复杂的代码
res = "print('hellworld')"
eval(res)
exec 将字符串当作python代码执行(功能更强大)
res = '''
for i in range(10):
print(i)
'''
res = "abb = 19"
exec(res) # 可以执行 eval(res) 有局限性
print(abb)
repr 不转义字符输出字符串
strvar = "abc\ndef"
print(strvar)
res = repr(strvar)
print(res)
input 接受输入字符串
res = input("hellworld?")
print(res)
hash 生成哈希值
会产生一个具有固定长度的唯一值,这个值不能反向破解.
- 比对两次密码是否一致
- 比对两个文件的内容是否一致
strvar = "abc"
res = hash(strvar)
print(res)
with open("1.txt", mode="r", encoding="utf-8") as fp:
res1 = fp.read()
with open("2.txt", mode="r", encoding="utf-8") as fp:
res2 = fp.read()
# 比对两个文件的内容是否一致,使用哈希值
# 如果两个哈希值一样,代表两个文件的内容是一模一样的.
res = hash(res1)
print(res)
res = hash(res2)
print(res)
模块
pickle 序列化模块
把不能够直接存储的数据,变得可存储就是序列化
把存储好的数据,转化成原本的数据类型,叫做反序列化
php: 序列化与反序列化
serialize
unserialize
# 导入pickle 模块 => 模块.方法()
from collections import Iterator, Iterable
import pickle
# dumps 把任意对象序列化成一个bytes
lst = [1, 2, 3, 4, 4, 5]
res = pickle.dumps(lst)
print(res, type(res))
# b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x04K\x05e.'
# loads 把任意bytes反序列化成原来数据
res = pickle.loads(res)
print(res, type(res))
# encode decode 能实现序列化么?
'''只有字符串可以使用encode或者decode ,容器类型数据等不可以.'''
# res = lst.encode("utf-8")
# print(res)
对函数进行序列化
def func():
print("hellworld!!!")
func()
# 序列化成字节流
res = pickle.dumps(func)
print(res)
# 反序列化字节流 恢复原来的数据类型
res = pickle.loads(res)
print(res)
res()
对迭代器进行序列化
it = iter(range(10))
print(isinstance(it, Iterator))
res = pickle.dumps(it)
res = pickle.loads(res)
for i in res:
print(i)
# 所有的数据类型都可以通过pickle模块进行序列化.
# dump 把对象序列化后写入到file-like Object(即文件对象)
# load 把file-like Object(即文件对象)中的内容拿出来,反序列化成原来数据
it = iter(range(10))
with open("ceshi.pkl", mode="wb") as fp:
pickle.dump(it, fp)
with open("ceshi.pkl", mode="rb") as fp:
res = pickle.load(fp)
print(res)
for i in res:
print(i)
json
json 模块能够转化的数据类型如下: int float bool str list tuple dict None 8个数据类型可以序列化
json数据类型的提出,是让不同的语言之间形成数据交流
pickle返回的是二进制的字节流,它是用来进行数据的传输和存储的.
json 序列化成一个字符串
pickle 序列化成一个字节流
import pickle
import json
# dumps 和 loads 是一对,用来序列化和反序列化的,在字符串和其他数据类型之间切换
dic = {'name': "黄文", "age": 8, "sex": "男性", "family": ['爸爸', "妈妈"]}
# 序列化
'''
ensure_ascii=True 如果想要显示中文ensure_ascii = False
sort_keys=True 对字典的键进行排序(默认按照ascii 从小到大排序)
'''
res = json.dumps(dic, ensure_ascii=False, sort_keys=True)
print(res, type(res))
# 反序列化
res = json.loads(res)
print(res, type(res))
# dump 和 load 是一对, 用来进行数据的存储和提取
dic = {'name': "黄文", "age": 8, "sex": "男性", "family": ['爸爸', "妈妈"]}
with open("ceshi001.json", mode="w", encoding="utf-8") as fp:
json.dump(dic, fp, ensure_ascii=False)
with open("ceshi001.json", mode="r", encoding="utf-8") as fp:
res = json.load(fp)
print(res, type(res))
json 和 pickle 两个模块之间的区别:
- json
可以连续dump,但是load只能一次性把所有数据拿出来进行反序列化,造成数据错误
针对于这个弊端,可以使用loads来解决
'''
可以连续dump,但是load只能一次性把所有数据拿出来进行反序列化,造成数据错误
针对于这个弊端,可以使用loads来解决
'''
dic = {'a': 1, "b": 2}
with open("ceshi002.json", mode="w", encoding="utf-8") as fp:
json.dump(dic, fp)
fp.write('\n')
json.dump(dic, fp)
fp.write('\n')
print("<===>")
with open("ceshi002.json", mode="r", encoding="utf-8") as fp:
# res = json.load(fp) error
for i in fp:
# 读一行,反序列化成一个字典,依次循环.
res = json.loads(i)
print(res, type(res))
- pickle
允许连续dump , 也允许连续load
'''
允许连续dump , 也允许连续load
'''
dic = {'a': 3, "b": 4}
with open("ceshi003.pkl", mode="wb") as fp:
pickle.dump(dic, fp)
pickle.dump(dic, fp)
pickle.dump(dic, fp)
pickle.dump(dic, fp)
with open("ceshi003.pkl", mode="rb") as fp:
'''
res = pickle.load(fp)
print(res)
res = pickle.load(fp)
print(res)
res = pickle.load(fp)
print(res)
res = pickle.load(fp)
print(res)
'''
# res = pickle.load(fp)
# print(res)
# 是否可以把所有数据都一次性拿出来?
# 用try ... except ..抑制多调用的那一次的报错.
try:
while True:
res = pickle.load(fp)
print(res)
except BaseException:
pass
json 和 pickle 两个模块的区别:
- json序列化之后的数据类型是str,所有编程语言都识别,
但是仅限于(int float bool)(str list tuple dict None)
json不能连续load,只能一次性拿出所有数据 - pickle序列化之后的数据类型是bytes,
所有数据类型都可转化,但仅限于python之间的存储传输.
pickle可以连续load,多套数据放到同一个文件中