常见内置函数的一些用法

1、zip 将两个可迭代对象转化为以元祖为元素的列表

1 a = 'abcd'
2 b = '1234'
3 print(list(zip(a, b)))    # [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
4 print(type(list(zip(a, b))[0]))  # <class 'tuple'>
View Code

2、max 在 dic 里的用法

1 c = [{"name": 'dog', "age": 5},
2      {"name": 'pig', "age": 4},
3      ]
4 # 找出name最大的动物(ascii码)
5 print(max(c, key=lambda dic: dic["name"]))  # {'name': 'pig', 'age': 4}
6 # 找出年龄最大的动物
7 print(max(c, key=lambda dic: dic["age"]))  # {'name': 'dog', 'age': 5}

此处lambda为匿名函数;lambda 参数列表:关于参数的表达式(表达式只能有一行,输入参数列表,输出表达式的计算结果)

max本质上是对传入的可迭代对象进行for循环比较(注意,1、不同数据类型无法进行比较;2、元素间比较是按位置顺序依据ASCII码进行比较),然后取出最大值。同时max支持传入关键字key用做比较依据

3、chr 将数字按ASCII码转换为相应元素;ord则相反(元素转数字)

4、pow 两个参数是次幂,三个参数是次幂取余

print(pow(3, 3))  # 3**3=27
print(pow(3, 3, 2))  # (3**3)%2=1
View Code

5、reversed 可迭代对象逆序;sorted 排序(本质上是在比较大小,同类型才支持比较)

d = {
    "da": 500,
    "bb": 200,
    "ac": 1000,
}
# 按key从小到大排序
print(sorted(d))  # ['ac', 'bb', 'da']
# 按值从小到大排序
print(sorted(d, key=lambda key: d[key]))  # ['bb', 'da', 'ac']
View Code

6、reduce(func, list)

from functools import reduce
b = [5,4,6,7,8,9]
print(reduce(lambda x,y:x+y, b, 3))  #42
# reduce() 函数会对参数序列中元素进行累积
View Code

7、filter(过滤方法函数,可迭代对象)

a = ['kill_sb', 'catch']
c = filter(lambda x: x.endswith('sb'), a)  # filter返回的是一个列表对象
print(c)  # <filter object at 0x000002606F615100>
print(list(c))  # ['kill_sb']
View Code

8、文件指针(只有read是以字符的形式,其余的都是以字节形式)。

seek用于指定文档 指针的位置(以rb方式打开文件),seek(-10,2)参数2表示倒序,-10表示倒数第10个位置;

tell用于获取当前指针所在的(字节)位置;

utf-8格式的汉字占3个字节(若先把指针移到1或2,然后读取文件时会乱码或报错:无效的开始字节);

Windows里的回车实际上是“\r\n”(占两个字节,查看方法:打开文件的open里指定newline=")

9、truncate 文件截取(是一种写的方式)注意文件打开时若是w+,则会先清空文件内容,再写入

10、遍历大文件的内容方法:

# 获取log文件的最后一行
with open("ger.log", "rb") as f:
    for i in f:  # 此处直接用f,遍历一行读取一行;若使用的是f.readlines() 则会把整个文件全部读取到内存里
        offs = -100  # 偏移量
        while True:
            f.seek(offs, 2)
            data = f.readlines()
            if len(data) > 1:  # 不止一行
                print(data[-1].decode("utf-8"))  # 获取最后一行
                break
            else:
                offs *= 2
View Code

11、f.flush()将文件内容从内存写入到磁盘

  f.encoding 查看使用open打开文件的编码

  f.tell() 查看当前打开文件的指针位置

  f.seek(3) 将文件指针移到到第三个字节(seek默认是从0开始);

  f.seek(3,1)表示将指针从当前位置向后移动3个字节

  f.seek(-5,2)表示将指针从最后倒序向前移动5个字节位置(倒序用负数)

  f.truncate(10) 保留截取的前10个字节 (不要用W或W+的方式读取——会清空数据)

猜你喜欢

转载自www.cnblogs.com/Roye/p/12905390.html