基础内置函数
约 2332 字大约 8 分钟
2025-04-04
内置函数(BIF)不需要 import 就能用。这一节按用途分块走一遍:判断/转换/数学/进制/格式化/IO,重点不是把每个函数都记住,而是知道“遇到哪类问题去找哪个函数”。
- all / any:批量真值判断
- callable / hash:可调用与可哈希检测
- chr / ord / bin / oct / hex / int(s, base):编码与进制
- divmod / pow / abs / round / sum:常用数学
- format / repr:格式化与原貌
- print 的 sep/end/file 关键字
- 1用 all([1, 2, '']) 和 any([0, '', None]) 验证“all 要求全真,any 要求至少一个真”。
- 2对 list、tuple、dict 跑一次 hash() —— 看到 list 报 TypeError,体会“可哈希必须不可变”。
- 3用 divmod(2025, 7) 一次拿到商和余数,比写 // 和 % 两步更地道。
- 4试 print('a', 'b', sep='-', end='!\n') 改写默认分隔和结尾。
- 5永远不要用 eval/exec 处理外部输入 —— 如果一定要解析,用 ast.literal_eval。
内置函数(BIF, built-in function)是 Python 内置的、不需要导入就能直接使用的函数,用来进行各种基本运算
all
all 函数用来判断可迭代对象中是否所有的元素都为 True:
python playground
print(all([1, 2, 32, 43, 5])) # Trueany
any 函数与用来判断可迭代对象中的元素是否有一个为 True:
python playground
print(any([1, 2, 3, 0, 1, 0])) # Truecallable
callable 函数用来判断变量是否可以被调用:
python playground
def func():
pass
print(callable(func)) # Truebytes
bytes 函数可以将字符串编码为二进制形式,它的功能和字符串的 .encode() 方法十分类似,更推荐使用字符串的 .encode() 方法:
python playground
print('你好'.encode('utf-8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(bytes('你好', encoding='utf-8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd'chr 和 ord
chr 函数根据当前编码(Python 3 中为 Unicode)解码为字符,ord 为 chr 方法的逆运算,用来将字符编码为数字:
python playground
print(chr(20320)) # 你
print(ord('你')) # 20320complex
complex 函数用来将一对数字转换为复数形式,第一个数作为复数的实部,第二个数为复数的虚部:
python playground
print(complex(20, 3)) # (20+3j)divmod
divmode 函数会将一对数字做商,第一个参数做被除数,第二个参数做除数,返回值为一个元组,元组的第一个元素是商,第二个元素是余数:
python playground
print(divmod(20, 3)) # (6, 2)eval 和 exec
这两个函数用来执行字符串中的代码。其中,eval 函数可以执行单行字符串代码,exec 函数可以执行多行字符串代码:
python playground
msg = 'print(1)'
eval(msg) # 1
msg2 = """ # 禁用
def func():
print("太厉害了")
func()
"""
exec(msg2) # 太厉害了注意这两个函数在日后的编程中是被禁止使用的,因为有可能会出现被恶意注入的 Bug。
frozenset
frozenset 可以生成一个冻结的不可变的集合:
python playground
dic = {frozenset({1, 2, 3, 4}): 1}
print(dic) # {frozenset({1, 2, 3, 4}): 1}既然能做字典的键,就说明冻结集合是一个不可变数据,基本用不到
hash
hash 函数用来判断一个数据是否可哈希。如果可哈希,会返回该数据的哈希值;如果不可哈希,会报错:
python playground
print(hash('12'))
print(hash(12))
print(hash(True))
# print(hash([1, 2]))
print(hash((1, 2)))
# print(hash({1: 2}))
# print(hash({1, 2}))help
help 函数可以查看帮助信息(基本用不到):
python playground
help(list) # 使用 help 函数不需要打印进制转换函数
bin、oct 和 hex 三个函数分别能将十进制数转换为二进制、八进制和十六进制数;int 方法则能将各种进制数转换为十进制数:
python playground
print(bin(10)) # 0b1010
print(oct(10)) # 0o12
print(hex(30)) # 0x1e
print(int('0x1e', 16)) # 30 将十六进制数转为十进制,0x 可以不加
print(int('1e', 16)) # 30
print(int('0o11', 8)) # 9
print(int('0b11', 2)) # 3、pow
pow 函数用来进行幂运算,返回的结果是前一个数的后一个数次幂:
python playground
print(pow(3, 4)) # 3 ** 4 = 81repr
repr 函数用来显示打印出来的字符串两端的双引号,即令字符串原形毕露:
python playground
print('123') # 123
print(repr('123')) # '123'round
round 函数用来将小数取整,取整规则是四舍六入五成双,也可以指定保留的小数位数:
python playground
print(round(3.4)) # 3
print(round(3.5)) # 4
print(round(3.6)) # 4
print(round(4.4)) # 4
print(round(4.5)) # 4
print(round(4.6)) # 5
print(round(3.14159265397932384626, 3)) # 3.142abs
abs 用来求数字的绝对值:
python playground
print(abs(-6))format
format 函数用来格式化字符串,与字符串的 .center() 方法类似:
python playground
s = '你好'
s1 = format(s, '>20') # 靠右
s2 = format(s, '<20') # 靠左
s3 = format(s, '^20') # 居中
print(s1, s2, s3, sep='\n')也可以用来进行数字的进制转换:
python playground
s = 18
print(format(s, '08b')) # 00010010 08 的意思是总共八位,不足的用 0 补齐,b 指的是要转换为二进制 bin
print(format(s, '08o')) # 00000022 oct
print(format(s, '08x')) # 00000012 hex
print(format(s, '08d')) # 00000018 decimalformat 方法对于转换 ip 地址会很有用。
sum
sum 函数用来求一个可迭代对象中元素的总和:
python playground
print(sum[1, 2, 3, 4])dir
dir 函数用来查看当前对象有哪些方法:
python playground
print(dir(list))print
print 函数我们已经非常熟悉了,用来将内容打印出来。我们还需要了解的是 print 有两个比较重要的关键字参数:sep 和 end。
sep 用来规定 print 中多个元素以什么间隔开,默认值为一个空格 ' ';end 用来规定 print 函数打印完全部内容后以什么为结尾,默认为换行符 \n。
我们可以通过修改 sep 和 end 的值来实现不同的打印输出效果:
python playground
print('alice', 'tom', '太亮', sep='-', end=' ')
print('bob')我们可以利用 print 的这两个参数实现打印九九乘法表:
python playground
for i in range(1, 10):
for j in range(1, 10):
if i > j:
print(f'{i} * {j} = {i * j}', end=' ')
elif i == j:
print(f'{i} * {j} = {i * j}')输出的结果是这样的:
除了能将信息打印到屏幕上,print 也可以将信息写入到文件中:
f = open('test', 'a', encoding='utf-8')
print('alice', file=f)屏幕上没有打印出任何内容,但是出现了一个名为 test 的文件,文件中的内容为 alice
input
在 Python 中,用 input() 函数实现用户和程序间的交互。input 是输入的意思。使用示例如下:
qq_user = input('QQ 账号:') # 坑 --> 阻塞
qq_pwd = input('QQ 密码:')
print(qq_user, qq_pwd)当程序运行到 input 语句时,会发生阻塞,等待用户进行输入。程序会一直保持阻塞状态,除非用户输入内容或终止程序。
需要注意的是,在 Python 3 中 input 获取的内容全都是字符串。因为这样的原因,下面的程序会报错:
num = input('请输入数字:')
print(num + 5)这两行代码的本意是,当用户输入一个数字之后,程序自动输出一个比输入数字大 5 的数字。但是因为 input 获取的内容是字符串,字符串是不能和整型数字进行加和操作的,故而程序报错。我们可以使用 tpye() 函数查看变量的数据类型。
num = input('请输入数字:')
print(type(num)) # <class 'str'>int 和 str
通过使用 int() 函数可以将字符串转化为整型数据。同样地,也可以使用 str() 函数,把整型数据转换成字符串
python playground
a = int('12') # 字符串转成整型
b = str(23) # 整型转成字符串需要注意的是,使用 int() 函数将字符串转换为整型时,字符串中的内容必须全部都是数字,否则会报错:
>>> int('abc123')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc123'那么我们上面的例子就可以改成这个样子:
num = input('请输入数字:')
a = int(num)
print(a + 5)这样的话,当我们输入一个数字之后,通过 int() 函数,输入内容转换成为整型,然后就可以进行加和操作了:
请输入数字:3
8也可以把 inpu() 操作直接放到 int() 函数中:
num = int(input('请输入数字:'))
print(num + 5)- all/any 是批量真值检查的利器;空可迭代时 all 返回 True、any 返回 False(边界值要记牢)。
- 数值场景常用:divmod 一步拿商和余、pow(a, b, mod) 带模幂、round 用银行家舍入(4.5→4)。
- 进制:bin/oct/hex 转字符串,int(s, base) 反向解析;用 format(n, '08b') 控位宽。
- eval/exec 处理任意字符串 = 远程代码执行风险,禁用;要解析字面量用 ast.literal_eval。
- print 的 sep/end/file 三个关键字常被忽略 —— 控分隔、结尾、输出目标,一次性满足。
版权所有
版权归属:Shuo Liu
