python 之 内置函数
那些每天要翻好几次的内置函数
python 为我们提供了68个内置函数,真的不多
函数名字 | 用法 | |
1.abs() | 取绝对值 | |
2.dict() | 把数据转换成字典 | |
3.help() | 帮助 | |
4.min() | 取最小值 | |
5.setattr() | ||
6.all() | 1,如果列表中都为true,返回true; 2,空列表返回true(空列表的bool值是False) | |
7.any() | 1,列表中任意一个值是true, 返回true 2,空列表返回False | |
8.dir() | 打印当前程序所有变量,元素 | |
9.hex() | 转成16进制 | |
10.next() | ||
11.slice() | 切片(三个元素开始结束和步长),先定义切片的规则,再调用 | |
12.divmod() | 余数除,整除商和余数 | |
13.sorted() | 排序,指定元素,指定方法(时间16:00)自己制定规则 | |
14.ascii() | ||
15.enumerate() | 遍历,枚举 | |
16.input() | ||
17.oct() | 十进制转转八进制 | |
18.staticmethod() | ||
19.bin | 十进制转二进制 | |
20.eval() | 按照解释器的规则把字符串转代码,只能处理单行代码 | |
21.exec() | 可以执行多行,拿不到返回值(和eval的区别) | |
22.int() | ||
23.open() | ||
24.str() | ||
25.bool() | ||
26.isinstance() | isinstance(object, classinfo) 函数来判断一个对象是否是一个已知的类型,类似 type()。 | |
27.ord() | 返回asicc码表中的位置 | |
28.sum() | 求和 | |
29.bytearray() | 把字符串在原内存变成可修改的类型,修改之前需要转码 | |
30.filter() | 返回你需要的值,过滤。对于序列中的元素进行筛选,最终获取符合条件的序列 | |
31.map() | 根据函数做指定序列的映射,遍历序列,对序列中每个元素进行操作,最终获取新的序列。 | |
32.reduce()python3在模块里, | 函数会对参数序列中元素进行累积操作。对于序列内所有元素进行累计操作(模块functools) | |
33.issubclass() | ||
34.pow() | 求x的y次方,如果有z,取 | |
35.super() | 函数是用于调用父类(超类)的一个方法。 | |
36.bytes() | ||
37.float() | 转换成浮点类型 | |
38.iter() | ||
39.print() | 默认换行符结尾,end=可以指定结尾方式 | |
39.print() | 1,end= 以什么结尾, 2,sep= 以什么分割,中间符号 3,file=可以写入文件 4,flush | |
40.tuple | 变成元祖 | |
41.callable() | 判断是否可以调用 | |
42.format() | 格式化功能 | |
43.len() | 长度 | |
44.property | 函数的作用是在新式类中返回属性值。 | |
45.type() | 查看类型 | |
46.chr() | ||
47.frozenset() | 不可变集合 | |
48.list() | 列表 | |
49.range() | 创建一个集合 | |
50.vars() | 当前变量名单,打印变量名还有值(打印值这是和dir的区别) | |
51.local() | 打印函数所有局部变量 | |
52.globals() | 打印函数所有全局变量 | |
53.Classmethod() | ||
54.getattr() | ||
55.repr() | 显示形式变了 | |
56.zip() | 两个列表整合成一个,一一对应,无对应则抛弃 | |
57.compile() | 编译代码 | |
58.reversed() | 默认式反转 | |
59.__import__() | ||
60.complex() | 转换成复数 | |
61.hasattr() | ||
62.max() | ||
63.round() | 保留几位小数 | |
64.delattr() | ||
65.hash() | 把一个字符串按特征以算法变成一串数字 | |
66.memoryview() | 用于大量数据进行copy时. | |
67.set() | 把一个列表变成集合 | |
68.id() | 查看内存地址 |
68个都在这里了,一点都不多
这样看真的很累,那么分个类吧!!
酱紫,把棕色的整理好,就行了,没办法,能力有限,反射相关,和面向对象相关以后补上来
从少的开始吧
作用域相关
获取局部变量和全局变量,得到的是一个字典
globals()--获取全局变量的字典
locals()--获取执行命令所在命名空间内的局部变量的字典
迭代器/生成器相关
range(start, stop[, step])
Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
Python3 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表,返回的变量类型为列表。
Python2 range() 函数返回的是列表。
iter()函数用来生成迭代器。
next()返回迭代器的下一个项目。
其他
字符串类型代码的执行
eval(source,globals,locals)执行字符串类型的python代码,并返回结果
res = eval('1+2+3+4') print(res)
exec(object,globals,locals)执行存储在字符串或者文件中的python代码(当然包括多行代码),返回值None
相比eval,可以执行更复杂的代码
res = exec('1+2+3+4') print(res) exec('print(1+2+3+4)')
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
source:字符串或AST对象,表示需要进行编译的python代码
filename:指定需要编译的代码文件,如果不是文件读取代码则传递一些可辨认的值。
mode:用于标识必须当做那类代表来编译;如果source是由一个代码语句序列组成,则指定mode=‘exec’,如果source由单个表达式组成,则指定mode=‘eval’;如果source是由一个单独的交互式语句组成,则指定modo=‘single’。
必须要指定mode,不然肯定会报错。
s = """ #一大段代码 for x in range(10): print(x, end='') print() """ code_exec = compile(s, '<string>', 'exec') # 必须要指定mode,指定错了和不指定就会报错。 code_eval = compile('10 + 20', '<string>', 'eval') # 单个表达式 code_single = compile('name = input("Input Your Name: ")', '<string>', 'single') # 交互式 a = exec(code_exec) # 使用的exec,因此没有返回值 b = eval(code_eval) c = exec(code_single) # 交互 d = eval(code_single) print('a: ', a) print('b: ', b) print('c: ', c) print('name: ', name) print('d: ', d) print('name; ', name) #执行前,name 是报错的状态
>>> #流程语句使用exec >>> code1 = 'for i in range(0,10): print (i)' >>> compile1 = compile(code1,'','exec') >>> exec (compile1) 3 7 >>> #简单求值表达式用eval >>> code2 = '1 + 2 + 3 + 4' >>> compile2 = compile(code2,'','eval') >>> eval(compile2) >>> #交互语句用single >>> code3 = 'name = input("please input your name:")' >>> compile3 = compile(code3,'','single') >>> name #执行前name变量不存在 Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> name NameError: name 'name' is not defined >>> exec(compile3) #执行时显示交互命令,提示输入 please input your name:'pythoner' >>> name #执行后name变量有值 "'pythoner'"
输入和输出
input()函数接受一个标准输入数据,返回为 string 类型。
print(self, *args, sep=' ', end='\n', file=None)
file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件 sep: 打印多个值之间的分隔符,默认为空格 end: 每一次打印的结尾,默认为换行符,设置为空,就不换行了(2.0是在末尾加逗号) flush: 立即把内容输出到流文件,不作缓存
打印进度条
import time for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #打印多少个'*' per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num) print(per_str,end='', flush=True) #小越越 : \r 可以把光标移动到行首但不换行(\r 是回车)
内存相关
id(o) o是参数,返回一个变量的内存地址
hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。
hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。
*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变
数据类型相关
type()type(o) 返回变量的数据类型
文件操作相关
f = open(file,mode=,encoding=)打开一个文件,返回一个文件操作符(文件句柄)
操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)(w+并没有什么卵用)
可以用encoding指定编码.
模块导入相关
__import__(name[, globals[, locals[, fromlist[, level]]]])
__import__() 函数用于动态加载类和函数 。
如果一个模块经常变化就可以使用 __import__() 来动态载入。
帮助方法相关
help()
在控制台执行help()进入帮助模式。
可以随意输入变量或者变量的类型。
输入q退出或者直接执行help(o),o是参数,查看和变量o有关的操作。。。
和调用相关
callable(o)
callable(o),o是参数,看这个变量是不是可调用。
如果o是一个函数名,就会返回True
查看参数所属类型的所有内置方法
dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量
vars()当前变量名单,打印变量名还有变量的值(打印值,这是和dir的区别)
和数据类型相关
和数字相关
数字——数据类型相关:bool,int,float,complex(转化成复数形式)
数字——进制转换相关:bin,oct,hex
数字——数学运算:abs,divmod,min,max,sum,round,pow
和数据结构相关
列表和元组:list和tuple
列表和元组相关的:reversed,slice
字符串相关的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr
字典和集合:dict,set,frozenset
字典和集合相关:len,sorted,enumerate,all,any,zip,filter,map
数字——数据类型相关
bool,int,float,complex(转化成复数形式)
bool 将给定参数转换成布尔值,返回True 和 Flase
int
float
complex
数字——进制转换相关
bin,oct,hex
bin将一个整型或者长整型转成二进制
oct将一个整数转换成八进制
hex用于将十进制转换成16进制
数字——数学运算
abs,divmod,min,max,sum,round,pow
abs 求绝对值
divmod 返回商和余数
m = divmod(8, 3) print(m)
min
max
sun
round 指定浮点数,转换成指定位数的小数点位数
pow 函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z
和math模块的 math.pow()相似
print(pow(2, 3, 2)) # 等同于 print(eval('2**3%2'))
列表和元组
list和tuple
list
tuple
列表和元组相关的
reversed,slice
reversed 反转可迭代对象
slice函数实现切片对象,主要用在切片操作函数里的参数传递。
slice(start, stop[, step])参数:开始,结束,步长
字符串相关的
str,
format,格式化 格式化字符串famat用法
bytes,bytes是Python 3中特有的,Python 2 里不区分bytes和str。
函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本
bytes([source[, encoding[, errors]]])
bytearry,bytearray和bytes不一样的地方在于,bytearray是可变的。
memoryview,函数返回给定参数的内存查看对象
ord,返回字符在编码表里的数值
ord()函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
chr,用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
print(ord('0'), ord('1'), ord('a')) # 转换成编码 print(chr(0x30), chr(0x31), chr(0x61)) # 十六进制 print(chr(48), chr(49), chr(97)) # 十进制
ascii, ascii(object)
ascii() 函数类似 repr() 函数, 返回一个表示对象的字符串,
但是对于字符串中的非 ASCII 字符则返回通过 repr() 函数使用 \x, \u 或 \U 编码的字符。
生成字符串类似 Python2 版本中 repr() 函数的返回值。
repr,函数将对象转化为供解释器读取的形式。
repr(object)
返回一个对象的 string 格式。
字典和集合
dict,
set,函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
frozenset 冷冻集合,不可变集合
字典和集合相关
len,
sorted, 语法sorted(iterable, key=None, reverse=False)
函数对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,
而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
元数据不变
reverse = True 降序 , reverse = False 升序(默认)
enumerate,遍历可迭代对象
all, 语法 all(iterable)
用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
有一个Flase 返回Flase
元素除了是 0、空、FALSE 外都算 TRUE。
注意:空元组、空列表返回值为True,这里要特别注意。
any,语法 any(iterable)
函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,
如果有一个为 True,则返回 True。
如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true。
zip,语法 zip([iterable, ...])
函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
可以是一个或者多个对象
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,
利用 * 号操作符,可以将元组解压为列表。
>>>a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) # 打包为元组的列表 [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) # 元素个数与最短的列表一致 [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式 [(1, 2, 3), (4, 5, 6)]
filter,
对于序列中的元素进行筛选,最终获取符合条件的序列
li = [11, 22, 33] new_list = filter(lambda arg: arg > 22, li)
map,
遍历序列,对序列中每个元素进行操作,最终获取新的序列。
li = [11, 22, 33] new_list = map(lambda a: a + 100, li)
reduce,
对于序列内所有元素进行累计操作(python3需要调用模块functools)
import functools
li = [11, 22, 33] result = functools.reduce(lambda arg1, arg2: arg1 + arg2, li)
总结
大神推荐的总结 但是在这里,我还是以自己的一点经验之谈,把几个平时工作中相对更常用的方法推荐一下,请务必重点掌握: 其他:input,print,type,hash,open,import,dir str类型代码执行:eval,exec 数字:bool,int,float,abs,divmod,min,max,sum,round,pow 序列——列表和元组相关的:list和tuple 序列——字符串相关的:str,bytes,repr 序列:reversed,slice 数据集合——字典和集合:dict,set,frozenset 数据集合:len,sorted,enumerate,zip,filter,map