python内置函数
目录
重要内置函数
zip (重要)
# 1.基础使用 # 将两个列表元素一一对应打包成元组
l1 = [11, 22, 33, 44]
l2 = ['miku', 'alice', 'tifa', 'cloud']
zip_object = zip(l1, l2) # <zip object at 0x00000174C2249A00>
print(list(zip_object)) # [(11, 'miku'), (22, 'alice'), (33, 'tifa'), (44, 'cloud')]
# 2.两个列表长度不一样的情况
l1 = [11, 22, 33, 44]
l2 = ['miku', 'alice', 'tifa']
zip_object = zip(l1, l2)
print(list(zip_object)) # [(11, 'miku'), (22, 'alice'), (33, 'tifa')] # 取决于最短的列表
# 组合使用
l1 = [11, 22, 33, 44]
l2 = ['miku', 'alice', 'tifa']
l3 = ['tell', 'me']
zip_object = zip(l1, l2, l3)
print(list(zip_object)) # [(11, 'miku', 'tell'), (22, 'alice', 'me')]
filter
# 1.filter的意思是过滤
# 2.基本使用
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
res = filter(lambda x: x > 40, l1)
print(res) # <filter object at 0x0000028A41576070>
print(list(res)) # [44, 55, 66, 77, 88]
# filter接受两个参数 filter(如何过滤,被过滤的对象)
# 这里的匿名函数定义了 x > 40 就留下 不满足就被过滤
# 3.在过滤条件 简单 的时候使用
sorted
# 1.基本使用
l1 = [21, 12, 53, 64, 76, 32, 11, 22]
res = sorted(l1) # 传入一个列表
print(type(res)) # <class 'list'>
print(res) # [11, 12, 21, 22, 32, 53, 64, 76] # 这个列表会默认按照升序排列
print(l1) # [21, 12, 53, 64, 76, 32, 11, 22] # 原列表没有被改变
常见内置函数
abs
# 1.abs函数对应的是数学中的绝对值
print(abs(-100)) # 100
print(abs(100)) # 100
print(abs(-200.2)) # 200.2
print(abs(complex('1+2j'))) # 2.23606797749979 # 对于复数类型complex也可以使用abs
all、any (偶尔用)
# 1.all基本使用
# 所有数据值对应的布尔值为True结果才是True 否则返回False
print(all([0, 1, 2, 3])) # False
print(all([1, 2, 3, True])) # True
print(all(['miku', ''])) # False
# 2.适用情景
# 判断用户登录状态 判断列表里的所有东西都是True
# 实际例子:判断一个片区里是不是都 接种疫苗
# 3.any使用
# any的用法恰恰和all相反
# 所有数据值对应的布尔值有一个为True结果就是True 否则返回False
def func():
pass
print(any([0, None, '', {}, (), [], 0.0])) # False
print(any([0, complex('2j')])) # True
print(any([0, func])) # True
bin、oct、hex、int
# 快速浏览
# 1. bin 转二进制
# 2. oct 转八进制
# 3. hex 转十六进制
# 4. int 浮点型转整型 字符串转整型
# 字符串的开头:0b则为二进制 0o则为八进制 0x则为十六进制
# 详细浏览
int(其他数据类型)
# 浮点型可以直接转 字符串必须满足内部时纯数字才可以转
num = int('1')
print(num, type(num)) # 1 <class 'int'>
# 字符串转换成整型的1
print(int('1.1')) # 这样转会报错
# ValueError: invalid literal for int() with base 10: '1.1'
十进制转其他进制:
print(bin(100)) # 0b1100100
print(oct(100)) # 0o144
print(hex(100)) # 0x64
# 数字的开头如果是0b则为二进制 0o则为八进制 0x则为十六进制
其他进制转十进制用int方法就可以了:
print(int(0b1100100)) # 100
print(int(0o144)) # 100
print(int(0x64)) # 100
可以给int传入第二个参数,指定传入的是什么进制,这样等于告诉int这个字符串是个2进制数:
print(int("0b1100100", 2)) # 100
print(int("0o144", 8)) # 100
print(int("0x64", 16)) # 100
直接传字符串,int认不出来会报错:
print(int("0b1100100")) # ValueError: invalid literal for int() with base 10: '0b1100100'
# python对数字的敏感度很低(精确度低)
s1 = 1.1
s2 = 1
print(s1 - s2) # 0.10000000000000009
bytes
# 将字符串转换成bytes类型 可以指定编码
s1 = 'miku 你好'
print(s1.encode('utf8')) # 字符串内置方法encode # b'miku \xe4\xbd\xa0\xe5\xa5\xbd'
print(bytes(s1, 'utf8')) # 用bytes转 # b'miku \xe4\xbd\xa0\xe5\xa5\xbd'
callable (用的很多)
# callable的意思是调用
# 判断名字是否可以加括号调用
name = 'miku'
def index():
print('from index')
print(callable(name)) # False
print(callable(index)) # True
chr ord
# 基于ASCII码表做数字与字母的转换
print(chr(65)) # A
print(chr(90)) # Z
print(chr(97)) # a
print(chr(122)) # z
print(ord('A')) # 65
# ascii表对应关系(重要)
# a-z 对应 97-122
# A-Z 对应 65-90
# 使用情景: 图片验证码
dir (有用)
# 返回括号内对象能够调用的名字
print(dir('hello')) # 输出如下 可见其中有 字符串内置方法
'''['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find',
'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper',
'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex',
'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper', 'zfill']
'''
divmod (有用)
# 输出元组 第一个数据为整除数 第二个是余数
res = divmod(100, 2)
print(res) # (50, 0)
res = divmod(100, 3)
print(res) # (33, 1)
# 使用情景:网页分页实现 有很多篇文章 到底分多少网页放
"""
总数据 每页展示的数据 总页码
100 10 10
99 10 10
101 10 11
"""
# 代码实现
page_num, more = divmod(9999, 20) # 9999个数据 每个网页放20个
print(page_num, more) # 499 19 最后一页放19个
if more:
page_num += 1 # 如果存在余数 将分页数加1
print('总页码为:', page_num) # 总页码为: 500
enumerate (常用)
# 1.enumerate用于把列表的引索和数据值一并取出
for i,j in enumerate(['miku','tifa','alice','cloud']):
print(i,j)
# 2.enumerate还可以传入一个关键字参数start
for i, j in enumerate(['miku', 'tifa', 'alice', 'cloud'], start=100):
print(i, j)
# start的作用是控制索引的起始位置
# 100 miku
eval、exec (了解)
s1 = 'print("miku")'
eval(s1) # miku
exec(s1) # miku
s2 = 'for i in range(100):print(i)'
eval(s2) # 报错 # 只能识别简单的python代码 具有逻辑性的都不行
exec(s2) # 可以识别具有一定逻辑性的python代码
# exec更多使用:创造名称空间 创造一个类出来??
hash
# hash是加密的意思 不让你看明文 hash是一种加密方法
print(hash('miku')) # 1704811362320018881
id、input、isinstance(重要)
# id
print(id('miku')) # 2869245943344 # 返回对象的内存地址
# input 获取用户输入
# isinstance 重要
# isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
# 如果要判断两个类型是否相同推荐使用 isinstance()。
a = 'miku'
print(isinstance(a, str)) # True
map (重要)
# map的意思是映射
l1 = [1, 2, 3, 4, 5]
def func(a):
return a + 1
res = map(func, l1)
print(res) # <map object at 0x000002A3580A5160>
print(list(res)) # [2, 3, 4, 5, 6]
# map作用:
# 对l1这个列表执行func函数
max、min
# 1.简单使用
l1 = [11, 22, 33, 44]
res = max(l1) # 44
# 2.对字典使用
d1 = {
'zj': 100,
'jason': 8888,
'berk': 99999999,
'oscar': 1
}
print(max(d1)) # zj
# 1.max会先对传入的字典使用for循环
# 2.for循环字典只有键会参与
# 3.键是字符串 会取字符串的第一个字母进行比较
# 4.比较的方法是看这个字母对应ASCII表的数字 数字大的在比较中胜出
# 5.a-z对应97-122 A-Z对应65-90
# 6.在键中z对应的数字最大
# 7.所以会输出zj
# 3.更复杂的使用
d1 = {
'zj': 100,
'jason': 8888,
'berk': 99999999,
'oscar': 1
} # 比较字典键值对中的值 输出最大的
# 9999999最大
res = max(d1, key=lambda k: d1.get(k))
print(res) # berk
pow
# 幂指数 次方
print(pow(2, 2)) # 4
print(pow(2, 3)) # 8
print(pow(2, 4)) # 16
round (用的少)
# round 用的不多 四舍五入
# round() 方法返回浮点数x的四舍五入值
print(round(9.9)) # 10
print(round(9.5)) # 10
print(round(9.4)) # 9
print(round(9.49)) # 9
print(round(1)) # 1
sum、reduce
# sum
# 求和 sum需要传入可迭代对象
print(sum([11, 22, 33, 44, 55, 66])) # 231
print(sum({0: 'miku', 1: 'alice', 2: 'cloud'})) # 3 # 字典的键进行求和
# reduce
# 传入多个值返回一个值
# 可以用于列表求和
# 因为使用少 从内置函数中移除
from functools import reduce
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
res = reduce(lambda a, b: a + b, l1) # 将列表所有值求和
print(res) # 396
res2 = reduce(lambda a, b: a + b, l1,100) # 第三个参数的意思 求和之后再加100
print(res2) # 496