1.介绍

Python内置很多函数,供我们在开发过程方便使用,下面表格来自runoob.com

内置函数
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() import()
complex() hasattr() max() round() reload()
delattr() hash() memoryview() set()

2.数字相关

if __name__ == '__main__':
# 绝对值
print("------------------ abs:求绝对值 ------------------")
print("abs(1):", abs(1))
print("abs(-1):", abs(-1))

# 商和余数
print("------------------ divmod:商和余数 ----------------")
print("divmod(10,3): ", divmod(10, 3))
print("divmod(4,2): ", divmod(4, 2))

# 字符串和数字互转
print("------------------ 字符串和数字互转 ----------------")
print("字符串转数字,int('10'): ", int('10'), type(int('10')))
print("字符串转数字,float('5'): ", float('5'), type(float('5')))
print("数字转字符串,str('6'): ", str('6'), type(str('6')))

# 求x的y次幂
print("------------------ 求x的y次幂 ----------------")
print("pow(2, 1): ", pow(2, 1))
print("pow(2, 3): ", pow(2, 3))

# 四舍五入
print("------------------ 四舍五入 ----------------")
print("round(3.33333, 2): ", round(3.33333, 2))
print("round(6.66666): ", round(6.66666))
print("round(6.66666, 2): ", round(6.66666, 2))
print("round(6.66666, 3): ", round(6.66666, 3))

# 进制转换
print("------------------ 进制转换 ----------------")
print("把数字5,转成二进制 bin(5): ", bin(5))
print("把数字5,转成八进制 oct(5): ", oct(5))
print("把数字5,转成十六进制 hex(5): ", hex(5))

# ---------------------------- 输出 ----------------------------
------------------ abs:求绝对值 ------------------
abs(1): 1
abs(-1): 1
------------------ divmod:商和余数 ----------------
divmod(10,3): (3, 1)
divmod(4,2): (2, 0)
------------------ 字符串和数字互转 ----------------
字符串转数字,int('10'): 10 <class 'int'>
字符串转数字,float('5'): 5.0 <class 'float'>
数字转字符串,str('6'): 6 <class 'str'>
------------------ 求x的y次幂 ----------------
pow(2, 1): 2
pow(2, 3): 8
------------------ 四舍五入 ----------------
round(3.33333, 2): 3.33
round(6.66666): 7
round(6.66666, 2): 6.67
round(6.66666, 3): 6.667
------------------ 进制转换 ----------------
把数字5,转成二进制 bin(5): 0b101
把数字5,转成八进制 oct(5): 0o5
把数字5,转成十六进制 hex(5): 0x5

3.列表相关

3.1 生成列表:range

Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表

语法:

range(stop)
range(start, stop[, step])

参数说明:

  • start: 计数从 start 开始。默认是从 0 开始。如 range(3) 等价于 range(0, 3)
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 3) [0, 1, 2] 没有 3
  • step:步长,默认为 1
if __name__ == '__main__':
listVar = []
for i in range(1, 30, 5):
listVar.append(i)

print("listVar: ", listVar)

# ----------------------- 输出 -----------------------
listVar: [1, 6, 11, 16, 21, 26]

3.2 求最值:max|min

if __name__ == '__main__':
listVar = [1, 3, 5, 7, 9]
print("最大值:", max(listVar))
print("最小值:", min(listVar))

# ----------------------- 输出 -----------------------
最大值: 9
最小值: 1

3.3 列表截取: slice

slice()函数的主要作用是获取对象(常用于列表、字符串、元组等)的切片对象

语法:

slice(start, stop[, step])

参数说明:

  • start : 起始位置
  • stop: 结束位置
  • step: 步长,默认为1,不能设置0,可以设置负数(代表反向);
if __name__ == '__main__':
listVar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
print("取前三个元素:", listVar[slice(3)])
print("取后三个元素:", listVar[slice(-3, len(listVar))])
print("每隔2个元素:", listVar[slice(0, len(listVar), 2)])

# ----------------------- 输出 -----------------------
取前三个元素: [1, 2, 3]
取后三个元素: [9, 10, 11]
每隔2个元素: [1, 3, 5, 7, 9, 11]

3.4 排序:sorted

语法:

sorted(iterable, key=None, reverse=False)

参数说明:

  • iterable :可迭代对象(常用的有列表、字符串、元组)
  • key :指定一个函数,函数用于从可迭代对象中的每个元素中提取比较键,默认为None(直接比较元素)。
  • reverse : 排序规则,True为降序(从大到小),False为升序(从小到大,默认)。
if __name__ == '__main__':
listVar = [29, 12, 19, 23, 82, 77, 43, 47]
print("正序:", sorted(listVar))
print("倒序:", sorted(listVar, reverse=True))
# 使用key (姓名,年龄)
student = [("张三", 28), ("李四", 20), ("王五", 22)]
# 根据年龄排序
res = sorted(student, key=lambda x: x[1])
print("使用key根据年龄排序:", res)

# ----------------------- 输出 -----------------------
正序: [12, 19, 23, 29, 43, 47, 77, 82]
倒序: [82, 77, 47, 43, 29, 23, 19, 12]
使用key根据年龄排序: [('李四', 20), ('王五', 22), ('张三', 28)]

3.5 求和:sum

if __name__ == '__main__':
listVar = [29, 12, 19, 23, 82, 77, 43, 47]
print("sum:", sum(listVar))

# ----------------------- 输出 -----------------------
sum: 332

4. 迭代相关

4.1 过滤序列: filter

filter函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换

# 只保留大于等于5的元素
def filterNumber(n) -> bool:
return n >= 5

if __name__ == '__main__':
listVar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 只保留大于等于5的元素
filterRes = filter(filterNumber, listVar)
print("结果:", list(filterRes))

# ----------------------- 输出 -----------------------
结果: [5, 6, 7, 8, 9, 10]

4.2 遍历序列: map

def mapDemo(n):
return n * n

if __name__ == '__main__':
listVar = [5, 6, 7, 8, 9, 10]
res = map(mapDemo, listVar)
print("res:", list(res))

# ----------------------- 输出 -----------------------
res: [25, 36, 49, 64, 81, 100]

5. 判断相关

5.1 都为真: all

该函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False

元素除了是 0、空、None、False 外都算 True

if __name__ == '__main__':
print('[2, "0", 0]为True?', all([2, "0", 0]))
print('[2, "0"]为True?', all([2, "0"]))
print('[2, "False"]为True?', all([2, "False"]))
print('[2, False]为True?', all([2, False]))

# ----------------------- 输出 -----------------------
[2, "0", 0]为True? False
[2, "0"]为True? True
[2, "False"]为True? True
[2, False]为True? False

5.2 有一个真: any

if __name__ == '__main__':
print('[2, "0", 0]为True?', any([2, "0", 0]))
print('[2, "0"]为True?', any([2, "0"]))
print('[2, "False"]为True?', any([2, "False"]))
print('[2, False]为True?', any([2, False]))

# ----------------------- 输出 -----------------------
[2, "0", 0]为True? True
[2, "0"]为True? True
[2, "False"]为True? True
[2, False]为True? True

6.类属性相关

6.1 属性是否存在: hasattr

判断对象是否包含对应的属性

class Book:
name = '西游记'
pass

if __name__ == '__main__':
b = Book()
print('b.name: ', b.name)
# 先判断属性是否存在
if not hasattr(b, 'title'):
print('b.title 不存在')
# ----------------------- 输出 -----------------------
b.name: 西游记
b.title 不存在

6.2 设置属性: setattr

设置对象属性值, 如果属性不存在则先创建在赋值。

class Book:
name = '西游记'
pass

if __name__ == '__main__':
b = Book()
# 设置不存在属性值
setattr(b, 'title', "我是个标题")
# 获取不存在属性
print('b.title: ', b.title)

# ----------------------- 输出 -----------------------
b.title: 我是个标题

6.3 获取属性: getattr

class Book:
name = '西游记'
pass

if __name__ == '__main__':
b = Book()
# 获取不存在属性,不存在则给默认值
t = getattr(b, 'title', "默认值标题")
print("b.title:",t)
# ----------------------- 输出 -----------------------
b.title: 默认值标题

7.其他

7.1 输入:input

该函数接受一个标准输入数据,返回为 string 类型;

if __name__ == '__main__':
# 这里会等待输入
name = input("请输入姓名: ")
# 输出输入结果
print("姓名:", name)

# ----------------------- 运行 -----------------------
(py3.11) ➜ python test/localTest.py
请输入姓名: 张三丰
姓名: 张三丰

7.2 执行表达式: eval & exec

该函数用来执行一个字符串表达式,并返回表达式的值;

if __name__ == '__main__':
# 计算表达式
print("3 * 4 = ", eval("3 * 4"))
# 执行print输出
eval("print('hello world')")
# 使用exec执行复杂语句
expr = """
sum = x + y + z
print('{} + {} + {} = {}'.format(x, y, z, sum))
"""
exec(expr, {'x': 10, 'y': 11, 'z': 12})

# ----------------------- 运行 -----------------------
3 * 4 = 12
hello world
10 + 11 + 12 = 33

相比于evalexec可以执行更复杂的 Python 代码,如果被执行的表达式换行时,需要注意空格缩进,否则会报错: IndentationError: unexpected indent

7.3 哈希值: hash

if __name__ == '__main__':
for i in range(2):
print('---------------第{}次-----------------'.format(i + 1))
print("hash(100):", hash(100))
print("数字的哈希值:", hash(100))
print('hash("hello"):', hash("hello"))
print("hash(str([1, 2, 3])):", hash(str([1, 2, 3])))
print('hash(str(sorted({"name": "张三"}))):', hash(str(sorted({"name": "张三"}))))

# ----------------------- 输出 -----------------------
---------------第1次-----------------
hash(100): 100
数字的哈希值: 100
hash("hello"): -8543414832826730493
hash(str([1, 2, 3])): -2638161461043833854
hash(str(sorted({"name": "张三"}))): -5783648421303266172
---------------第2次-----------------
hash(100): 100
数字的哈希值: 100
hash("hello"): -8543414832826730493
hash(str([1, 2, 3])): -2638161461043833854
hash(str(sorted({"name": "张三"}))): -5783648421303266172

@注意:通过上面示例,会发现每次调用内置hash函数生成的值都不一样,推荐使用: hashlib.sha1