内置函数
一、内置函数
什么是内置函数?就是python给你提供的,拿来直接用的函数,比如print,input等等,截止到python版本的3.6.2,python一共提供了68个内置函数,有一些我们已经用过了,有一些还没有用过,还有一些需要学完了面向对象才能继续学习的,今天我们就认识一下python的内置函数(本节详细介绍的有51个):
作用域相关 |
locals() |
数字相关 |
bool() |
字符串相关 repr() 下篇介绍 |
str() |
globals() |
int() |
format() |
|||
迭代器/生成器 |
range() |
float() |
bytes() |
||
next() |
complex() |
bytearray() |
|||
iter() |
数学运算 |
abs() |
memoryview() |
||
字符串类型代码执行 |
eval() |
divmod() |
ord() |
||
exec() |
round() |
chr() |
|||
compile() |
pow(a,b) |
ascii() |
|||
输入/输出 |
input() |
sum() |
列表和元组 |
list() |
|
print() |
min() |
tuple() |
|||
内存相关 |
hash() |
max() |
reversed() |
||
id() |
进制转换 |
bin() |
slice() |
||
文件操作 |
open() |
oct() |
其他相关 sorted() filter() map() 下篇介绍 |
len() |
|
模块 |
__import__() |
hex() |
enumerate() |
||
帮助 |
help() |
数据集合相关 |
dict() |
all() |
|
调用 |
callable() |
set() |
any() |
||
查看内置属性 |
dir() |
frozenset() |
zip() |
1、作用域相关:
locals() 返回当前作用域中的名字
globals() 返回全局作用域中的名字
2、迭代器/生成器相关:
range() 生成数据
next() 迭代器向下执行一次,其内部实际使用了__next__()方法返回迭代器的下一个项目
iter() 获取迭代器,其内部实际使用的是__iter__()方法来获取迭代器
3、字符串类型代码的执行:
eval() 执行字符串类型的代码,并返回最终结果(重在返回),示例如下:
print(eval("2+2")) # 结果为:4 n = 8 print(eval("2+n")) # 结果为:10 def func(): print(666) eval("func()") # 结果为:666
exec() 执行字符串类型的代码,没有返回,示例如下:
exec(""" for i in range(10): print(i) """) exec(""" def func(): print("我是周杰伦") func() """)
compile() 将字符串类型的代码编译,代码对象能够通过exec语句来执行或者eval来进行求值,示例如下:
""" 参数说明: 1. resource 要执行的代码,动态代码片段 2. 文件名,代码存放的文件名,当传入了第一个参数的时候,这个参数给空就可以了 3. 模式,取值有3个: 1)exec:一般放一些流程语句的时候 2)eval:resource只存放一个求值表达式的时候 3)single:resource存放的代码有交互的时候,mode应为single """ code1 = "for i in range(10):print(i)" c1 = compile(code1, "", mode="exec") exec(c1) code2 = "1+2+3" c2 = compile(code2, "", mode="eval") a = eval(c2) print(a) code3 = "name = input('请输入你的名字:')" c3 = compile(code3, "", mode="single") exec(c3) print(name) # pycharm里的报错信息. 不一定是对的
注意:有返回值的字符串形式用eval(),没有返回值的字符串形式的代码用exec(),一般很少用compile()
4,输入和输出相关:
input() 获取用户输入的内容
print() 打印输出
5,内存相关:
hash() 获取到对象的哈希值(可哈希的有int,str,bool,tuple)
目的是为了存储. 计算之后是一个数字. hash值尽量的不要重复(在某些特定环境下hash可能会重复)
id() 获取到对象的内存地址
6,文件操作相关:
open() 用于打开一个文件,创建一个文件句柄
7,模块相关:
__import__() 用于动态加载类和函数
8,帮助:
help() 用于查看函数或模块用途的详细说明
9,调用相关:
callable() 用于检查一个对象是否是可调用,如果返回True,object有可能调用失败,但如果返回False,那调用绝对不会成功
10,查看内置属性:
dir() 查看对象的内置属性和方法,访问的是对象中的__dir()__方法
11,基础数据类型相关:
1)数字相关:
bool() 将给定的数据转换成bool值,如果不给值,返回False
int() 将给定的数据转换成int值,如果不给值,返回0
float() 将给定的数据转换成float值,也就是小数
complex() 创建一个复数,第一个参数为实部,第二个参数为虚部,或第一个参数直接用字符串来描述复数
2)进制转换:
bin() 将给的参数转换成二进制
oct() 将给的参数转换成八进制
hex() 将给的参数转换成十六进制
3)数学运算:
abs() 返回绝对值
divmod() 返回商和余数,以元组的形式(商,余数)返回
round() 四舍五入
pow(a,b) 求a的b次幂,如果有三个参数,则求完次幂后对第三个数取余
sum() 求和
print(sum([1,2,3,4])) # 结果为:10 print(sum([1,2,3,4], 5)) # 结果为:15 # sum函数中至少要有一个参数,且是可迭代对象
min() 求最小值
max() 求最大值
4)和数据结构相关:
列表和元组:
list() 将一个可迭代对象转换成列表
tuple() 将一个可迭代对象转换成元组
reversed() 将一个序列翻转,返回翻转序列的迭代器
slice() 列表的切片,如下示例:
st = "大家好,我是小麻花" s = slice(1, 5, 2) print(st[s]) # 结果为:家,
字符串相关:
str() 将数据转化成字符串
format() 与具体数据相关,用于计算各种小数,精算等,如下示例:
# 字符串 print(format('test', '<20')) # 左对齐 print(format('test', '>20')) # 右对齐 print(format('test', '^20')) # 居中 # 数值 print(format(3, 'b')) # 转换成二进制 print(format(97, 'c')) # 转换成unicode字符 print(format(11, 'd')) # 十进制 print(format(11, 'o')) # 八进制 print(format(11, 'x')) # 十六进制(小写字母) print(format(11, 'X')) # 十六进制(大写字母) print(format(11)) # 和d一样 # 浮点数 print(format(123456789, 'e')) # 科学计数法,默认保留6位小数 print(format(123456789, '0.2e')) # 科学计数法,保留2位小数(小写) print(format(123456789, '0.2E')) # 科学计数法,保留2位小数(大写) print(format(1.23456789, 'f')) # 小数点计数法,默认保留6位小数 print(format(1.23456789, '0.2f')) # 小数点计数法,保留2位小数 print(format(1.23456789, '0.10f')) # 小数点计数法,保留10位小数 print(format(1.23456789e+10000, 'F')) # 小数点计数法 结果为:INF(表示无穷大)
bytes() 把字符串转化成bytes类型,如下示例:
s = "你好" bs = s.encode("utf-8") print(bs) # 结果为:b'\xe4\xbd\xa0\xe5\xa5\xbd' s1 = bs.decode("utf-8") print(s1) bs = bytes(s, encoding="utf-8") print(bs) # 结果为:b'\xe4\xbd\xa0\xe5\xa5\xbd'
bytearray() 返回一个新字节数组,这个数组里的元素是可变的,并且每个元素的值的范围是[0,255],如下:
ret = bytearray('alex', encoding="utf-8") print(ret[0]) # 结果为:97 print(ret) # 结果为:bytearray(b'alex')
memoryview() 查看bytes在内存中的情况,如下示例:
s = memoryview("麻花藤".encode("utf-8")) print(s) # 结果为:<memory at 0x0000000002640048>
ord() 输入字符找该字符编码的位置,如下示例:
chr() 输入位置数字找出对应的字符,如下示例:
ascii() 是ascii码中的返回该值,不是就返回\u…,如下示例:
# 找到对应字符的编码位置 print(ord('a')) # 结果为:97 print(ord('中')) # 结果为:20013 # 找到对应编码位置的字符 print(chr(97)) # 结果为:a print(chr(20013)) # 结果为:中 # 在ascii码中就返回这个值,如果不在就返回\u... print(ascii('a')) # 结果为:'a' print(ascii('好')) # 结果为:'\u597d'
repr() (下节介绍)
数据集合相关:
dict() 创建一个字典
set() 创建一个集合
frozenset() 创建一个冻结的集合,冻结的集合不能进行添加和删除操作(可哈希)
其他相关:
len() 返回一个对象中的元素的个数
sorted() 对可迭代对象进行排序操作(下节介绍)
enumerate() 获取集合的枚举对象,如下示例:
lst = ['alex','wusir','taibai'] for index,el in enumerate(lst): # 默认显示元素索引 print(index,el) # 结果为: # 0 alex # 1 wusir # 2 taibai lst = ['alex','wusir','taibai'] for index,el in enumerate(lst,100): # 也可以指定序号开始的位置 print(index,el) # 结果为: # 100 alex # 101 wusir # 102 taibai
all() 可迭代对象中全部是True,结果才是True(如果可迭代对象为空,则返回True),如下示例:
any() 可迭代对象中有一个是True,结果就是True(如果可迭代对象为空,则返回False),如下示例:
print(all([1,2,True,0])) # 结果为:False print(all([])) # 结果为:True print(any([1,'',0])) # 结果为:True print(any([])) # 结果为:False
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同(遵循水桶效应,即长度取决于最短的列表长度),如下示例:
l1 = [1,2,3] l2 = ['a','b','c','5'] l3 = ['*','**',(1,2,3)] print(zip(l1,l2,l3)) # 结果为:<zip object at 0x000000000264D208> for i in zip(l1,l2,l3): print(i) # 结果为 # (1, 'a', '*') # (2, 'b', '**') # (3, 'c', (1, 2, 3))
filter() 过滤(下节介绍)
map() 会根据提供的函数对指定序列做映射(下节介绍)