内置函数
内置函数,一般都是因为使用频率比较频繁或是元操作,所以通过内置函数的形式提供出来。
python 版本不同,其内容也有变化,例如之前Py2 vs. Py3 还存在 xrange() vs. range(), raw_input() vs. input(),现在只保留range()、input()。依据目前的python 3.8 版本,共计69个(实际上,only 42 of them are actually functions)。
按功能类型分类
类型 | 数量 |
---|---|
数学运算 | 7 |
类型转换 | 24 |
序列操作 | 8 |
对象操作 | 9 |
反射操作 | 8 |
变量操作 | 2 |
交互操作 | 2 |
文件操作 | 1 |
编译执行 | 5 |
装饰器相关 | 3 |
注:其分类的对象操作和反射操作中,有自省的东西,见之前的博客——《Python 自省与反射》,文件操作和交互操作也可以合并,因为参照的别的博客文章,所以,还是宏观掌握,实际应用为主,也懒得自己重新分类了。
数学运算
函数名 | 功能简介 |
---|---|
abs() | 返回一个数的绝对值 |
divmod() | 返回两个数值的商和余数 |
max() | 返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的 |
min() | 返回可迭代对象中的元素中的最小值或者所有参数的最小值 |
pow() | 返回两个数值的幂运算值或其与指定整数的模值 |
round() | 对浮点数进行四舍五入求值 |
sum() | 对元素类型是数值的可迭代对象中的每个元素求和 |
类型转换
函数名 | 功能简介 |
---|---|
bool() | 根据传入的参数的逻辑值创建一个新的布尔值 |
int() | 根据传入的参数创建一个新的整数 |
float() | 根据传入的参数创建一个新的浮点数 |
complex() | 根据传入参数创建一个新的复数 |
str() | 返回一个对象的字符串表现形式(给用户) |
bytearray() | 根据传入的参数创建一个新的字节数组 |
bytes() | 根据传入的参数创建一个新的不可变字节数组 |
memoryview() | 根据传入的参数创建一个新的内存查看对象 |
ord() | 返回Unicode字符对应的整数 |
chr() | 返回整数所对应的Unicode字符 |
bin() | 将整数转换成2进制字符串 |
oct() | 将整数转化成8进制数字符串 |
hex() | 将整数转换成16进制字符串 |
tuple() | 根据传入的参数创建一个新的元组 |
list() | 根据传入的参数创建一个新的列表 |
dict() | 根据传入的参数创建一个新的字典 |
set() | 根据传入的参数创建一个新的集合 |
frozenset() | 根据传入的参数创建一个新的不可变集合 |
enumerate() | 根据可迭代对象创建枚举对象 |
range() | 根据传入的参数创建一个新的range对象 |
iter() | 根据传入的参数创建一个新的可迭代对象 |
slice() | 根据传入的参数创建一个新的切片对象 |
super() | 根据传入的参数创建一个新的子类和父类关系的代理对象 |
object() | 创建一个新的object对象 |
序列操作
函数名 | 功能简介 |
---|---|
all() | 判断可迭代对象的每个元素是否都为True值 |
any() | 判断可迭代对象的元素是否有为True值的元素 |
filter() | 使用指定方法过滤可迭代对象的元素 |
map() | 使用指定方法去作用传入的每个可迭代对象的元素,生成新的可迭代对象 |
next() | 返回可迭代对象中的下一个元素值 |
reversed() | 反转序列生成新的可迭代对象 |
sorted() | 对可迭代对象进行排序,返回一个新的列表 |
zip() | 聚合传入的每个迭代器中相同位置的元素,返回一个新的元组类型迭代器 |
对象操作
函数名 | 功能简介 |
---|---|
help() | 返回对象的帮助信息 |
dir() | 返回对象或者当前作用域内的属性列表 |
id() | 返回对象的唯一标识符 |
hash() | 获取对象的哈希值 |
type() | 返回对象的类型,或者根据传入的参数创建一个新的类型 |
len() | 返回对象的长度 |
ascii() | 返回对象的可打印表字符串表现方式 |
format() | 格式化显示值 |
vars() | 返回当前作用域内的局部变量和其值组成的字典,或者返回对象的属性列表 |
反射操作
函数名 | 功能简介 |
---|---|
import() | 动态导入模块 |
isinstance() | 判断对象是否是类或者类型元组中任意类元素的实例 |
issubclass() | 判断类是否是另外一个类或者类型元组中任意类元素的子类 |
hasattr() | 检查对象是否含有属性 |
getattr() | 获取对象的属性值 |
setattr() | 设置对象的属性值 |
delattr() | 删除对象的属性 |
callable() | 检测对象是否可被调用 |
变量操作
函数名 | 功能简介 |
---|---|
globals() | 返回当前作用域内的全局变量和其值组成的字典 |
locals() | 返回当前作用域内的局部变量和其值组成的字典 |
交互操作
函数名 | 功能简介 |
---|---|
print() | 向标准输出对象打印输出 |
input() | 读取用户输入值 |
文件操作
函数名 | 功能简介 |
---|---|
open() | 使用指定的模式和编码打开文件,返回文件读写对象 |
编译执行
函数名 | 功能简介 |
---|---|
compile() | 将字符串编译为代码或者AST对象,使之能够通过exec语句来执行或者eval进行求值 |
eval() | 执行动态表达式求值 |
exec() | 执行动态语句块 |
repr() | 返回一个对象的字符串表现形式(给解释器) |
breakpoint() | 调用 sys.breakpointhook() ,直接传递 args 和 kws ,在调用时直接进入调试器中 |
装饰器
函数名 | 功能简介 |
---|---|
property() | 标示属性的装饰器 |
classmethod() | 标示方法为类方法的装饰器 |
staticmethod() | 标示方法为静态方法的装饰器 |
按使用频度分类
Python 有几十个内置函数和类,数百个工具捆绑在Python的标准库中,以及PyPI上的数千个第三方库。任何人都不可能记住所有这些东西。
但其实不止是对Python的学习,对所有要掌握的技能而言, 建议对你的知识进行分类:
1.我应该记住的东西,这样我就能很好地理解它们; 2.我应该知道的东西,这样我以后才能更有效地查找它们; 3.我根本不应该为之烦恼的东西,除非有一天我需要它们 。
(道理都懂,但知易行难,新手小白,如果没高手带着飞,哪里会提前知道呢,该踩的坑,一个也不能少,修行在个人,多学习,多总结就好,总会慢慢变强的。)
估计大多数Python开发人员只需要大约30个内置函数,但是哪30个取决于你实际使用Python做什么。
依据上述方法论,以鸟瞰的方式来看看Python中的所有的69个内置函数。
可以把这些内置组件分成五类:
众所周知: 大多数python初学者会因为需要而很快地接触到这些内置组件
初学者所忽略的: 了解这些函数很有用,但是当你是Python新手时,就会很容易忽略它们
稍后再学习的: 了解这些内置组件通常很有用,但是当/如果你需要它们时,你就会找到它们
也许最终会学的: 这些东西迟早会派上用场,但只是在特定的情况下
你可能不需要这些: 除非你在做一些相当专业的事情,否则你不太可能会需要这些
类别1和类别2中的内置函数几乎是所有Python程序员最终都应该学习的基本内置函数。
类别3和类别4中的内置函数是专门的内置函数,它们通常非常有用,但是你对它们的需求会根据你对Python的使用情况而有所不同。
类别5是神秘的内置函数,当你需要它们时,这可能非常方便,但是许多Python程序员可能永远都不需要它们。
如此分类下来,则可以看到
10 Commonly known built-in functions
print
len
str
int
float
list
tuple
dict
set
range
Built-ins overlooked by new Pythonistas
bool
enumerate
zip
reversed
sum
min and max
sorted
any and all
The 5 debugging functions
breakpoint
dir
vars
type
help
Learn it later
open
input
repr
super
property
issubclass and isinstance
hasattr, getattr, setattr, delattr
classmethod, staticmethod
next
Maybe learn it eventually
iter
callable
filter and map
id, locals, globals
round
divmod
bin, oct, hex
abs
hash
object
You likely don’t need these
ord and chr
exec and eval
compile
bytes and bytearray and memoryview
ascii
frozenset
__import __
format
pow
complex
注:巧了,上述前两类10+10+5 = 25个,再加我根据经验,在后面几类加粗的6个函数,共31个,大佬就是大佬,毕竟过来人,果然应付一般的Python开发,30个左右即可。
源码阅读的问题
Q: 有的python内置函数,在PyCharm 这个IDE中,用ctrl+b 查看源码时,为什么函数内容就是一个pass?
A:你看到的只是用来生成文档和给静态分析工具看的假代码,这些函数的真正实现在解释器里,一般看不到源代码。
Python的解释器有c、 java、 python等多种实现,官方提供的默认实现是CPython,因此,作为解释器标准实现的一部分,那些内置函数也是用c语言实现的,也就是说,正常情况下你是连pass也看不到的。PyCharm这个IDE,维护着一个对当前解释器中所有函数,类型等东西的索引,这样就可以进行定义跳转一类的操作。但是对内置函数来说,找不到对应的实现,只有文档 pydoc 可用。PyCharm就根据文档自动地生成这些函数的签名,也就是内容为pass 占位符的函数。而这些函数的具体实现需要到python的源代码(官方的github仓库)中去找,也可以参考官方文档 Extending and Embedding the Python Interpreter,看看 c 写的东西是怎么被python使用的。