Python笔记_15_内置函数_pickle模块_json模块

本文详细介绍了Python中的各种内置函数,如abs、round、sum等,以及max和min函数在序列上的应用。同时,深入探讨了pow、range、bin、oct、hex等函数的使用场景,并对比了chr与ord函数、eval与exec函数的功能差异。此外,文章还讲解了pickle和json模块在数据序列化和反序列化中的作用,以及它们之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内置函数

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 两个模块的区别:

  1. json序列化之后的数据类型是str,所有编程语言都识别,
    但是仅限于(int float bool)(str list tuple dict None)
    json不能连续load,只能一次性拿出所有数据
  2. pickle序列化之后的数据类型是bytes,
    所有数据类型都可转化,但仅限于python之间的存储传输.
    pickle可以连续load,多套数据放到同一个文件中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值