14 Python学习之常用内置函数
查看所有内置函数:
import builtins
print(dir(builtins))
运行结果:
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
常用内置函数
bin
bin的作用是将十进制转换成二进制
例1:
num = 154
print(bin(num))
运行结果:
0b10011010
oct
oct的作用是将十进制转换成八进制
例1:
num = 154
print(oct(num))
运行结果:
0o232
hex
hex的作用是将十进制转换成十六进制
例1:
num = 154
print(hex(num))
运行结果:
0x9a
round
将数字以四舍五入的方式返回,如果不指定小数精度,默认是0返回的是整数部分;小数精度最后一位是0,不显示
num = 10.2381028301
print(round(num))
print(round(num, 2))
print(round(num, 5))
运行结果:
10 # 不指定精度,返回整数
10.24 # 四舍五入
10.2381 # 最后一位是0 ,不显示
divmod
divmode是以元组的形式返回除法的商合余数
例1:
print(divmod(200, 3))
运行结果:
(66, 2)
pow
pow函数
如果参数是两个:是求x的y次方;
如果参数是三个,是求x的y次方与z的取余
例1:
print(pow(2, 5))
print(pow(2, 5, 3))
运行结果:
32
2
bytes
bytes主要用于不同编码直接的转换,数据流,在网络传输过程中用的比较多
例1:
str1 = '中国'
ret1 = str1.encode('utf-8')
print(ret1)
print(type(ret1))
# 使用bytes
ret2 = bytes(str1, encoding='utf-8')
print(ret2)
print(type(ret2))
运行结果:
b'\xe4\xb8\xad\xe5\x9b\xbd'
<class 'bytes'>
b'\xe4\xb8\xad\xe5\x9b\xbd'
<class 'bytes'>
ord
ord是输入一个字符找该字符的对应在编码表中的位置,默认是Unicode查找
例1:
str1 = '中'
ret = ord(str1)
print(ret)
运行结果:
20013
chr
chr 是输入位置数字,找出其对应的字符,默认是Unicode查找,该函数跟ord正好相反
例1:
str1 = 20013
ret = chr(str1)
print(ret)
运行结果:
中
repr
repr 是返回一个对象的string形式(原形毕露)占位符用%r表示
例1:
str1 = "20013"
ret = repr(str1)
print(ret)
name = '张三'
msg = '我叫 %r' % name
print(msg)
运行结果:
'20013'
我叫 '张三'
all
可迭代对象中全部是True结果才是True
例1:
li = [1, 2, '中', True, ''] # 列表中有空字符串,所以结果是False
ret = all(li)
print(ret)
运行结果:
False
any
可迭代对象中有一个是True结果就是True
例1:
li = ([0, '中', False, '']) # 列表中有'中'是True
ret = any(li)
print(ret)
运行结果:
True
sum
求可迭代对象的和(元素必须是基本数字),可指定初值,默认是0(详见官方文档)
例1:
li = [1, 2, 3, 4]
ret = sum(li)
print(ret)
ret2 = sum(li, 200) # 指定初值
print(ret2)
运行结果:
10
210
reversed
返回一个翻转后的迭代器,注意与列表的函数reverse的区别,内置函数返回的是一个迭代器,列表函数返回的是一个列表
例1:
li = 'afasdf'
ret = reversed(li)
print(ret)
print(li)
运行结果:
<reversed object at 0x7f838f58d400>
afasdf
例2:
li = [1, 2, 3, 4]
ret = reversed(li)
print(ret)
print(list(ret))
print(li)
运行结果:
<list_reverseiterator object at 0x7fc9f23193c8>
[4, 3, 2, 1]
[1, 2, 3, 4]
zip
创建一个迭代器,从每个iterable聚合元素。返回的长度,取决于传入的参数中最少的值
例1:
li = [1, 2, 3, 4]
tup = ('张三', '李四', '王五')
s1 = 'abcd'
ret = zip(li, tup, s1)
print(ret)
print(list(ret)) # 返回的结果长度是3,因为tup只有3
print(li)
print(tup)
print(s1)
运行结果:
<zip object at 0x7f503b31cbc8>
[(1, '张三', 'a'), (2, '李四', 'b'), (3, '王五', 'c')]
[1, 2, 3, 4]
('张三', '李四', '王五')
abcd
filter
filter类似于列表推导式的筛选模式,需要两个参数,第一个是函数,第二个是可迭代对象,返回结果是一个迭代器
例1:
li = [-1, 7, 3, 4, 5, 6, 2]
print([i for i in li if i > 3]) # 列表推导式
ret = filter(lambda i: i > 3, li) # 返回的是一个迭代器
print(list(ret))
运行结果:
[7, 4, 5, 6]
[7, 4, 5, 6]
map
map类似于列表推导式的循环模式,需要两个参数,第一个是函数,第二个是可迭代对象,返回结果是一个迭代器
print([i**2 for i in range(10)])
ret = map(lambda arg: arg**2, range(10))
print(ret)
print(list(ret))
运行结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
<map object at 0x7f21165dccf8>
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
callable
callable判断一个对象是否可以被调用
例1:
num = 10
def func():
pass
print(callable(func))
print(callable(num))
运行结果:
True
False
min 和 max
min是获取最小值,max是获取最大值,但是我们有时无法通过直接使用来获取想要的结果,因此需要用到函数的关键字参数key。凡是可以加key的函数:它会自动的将可迭代对象中的每个元素按照顺序传入key对应的函数中,按返回值比较大小
例1:
# 未使用key关键字参数的情况
dt = {'a': 3, 'b': 5, 'c': 0, 'd': 1}
print('未使用key的返回结果:', min(dt)) # 默认是按键的ASCII来进行比较
def func(args):
return dt[args] # 因为是按返回的值进行比较,所以取字典的值
print('使用了key的返回结果:', min(dt, key=func)) # 注意:这里只能是函数名,不能有调用
print('使用了匿名函数和key的返回结果:', min(dt, key=lambda i: dt[i]))
未使用key的返回结果: a
使用了key的返回结果: c
使用了匿名函数和key的返回结果: c
例2:
找出年龄最小的姓名
li = [('张三', 18), ('alex', 35), ('李四', 16)]
print(min(li)) # 默认是按照字典键的ASCII的值比较,不符合要求
# 匿名函数是获取每一次传入的数字,然后进行比较,返回最下的
print(min(li, key=lambda args: args[1])) # 使用lambda函数求出值最小的键
('alex', 35)
('李四', 16)
注意:凡是带关键字参数key的函数都可以这样使用
sorted
例1:
按年龄从大到小排序
li = [('张三', 18), ('alex', 35), ('big', 16)]
print(sorted(li, key=lambda args: args[1], reverse=True)) # reverse指定倒叙
[('alex', 35), ('张三', 18), ('big', 16)]