内置函数&匿名函数
一、内置函数
截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。
内置函数 |
||||
unicode() |
||||
object() |
||||
1、内置函数分类
为了方便总结记忆,将68个内置函数进行了功能分类,共分成了6大类:
1. 基础数据类型相关
2. 作用域相关
3. 迭代器、生成器相关
4. 面向对象相关
5. 反射相关
6. 其他
接下来逐个类进行介绍:
1.1 基础数据类型相关
①数字——数据类型相关: bool() 用于将给定参数转换为布尔类型,如果没有参数,返回 False。 int() 用于将一个字符串或数字转换为整型。 float() 用于将整数和字符串转换成浮点数。 complex() 用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数 ②数字——进制转换相关: bin() 返回一个整数 int 或者长整数 long int 的二进制表示。 oct() 将一个整数转换成8进制字符串。 hex() 于将10进制整数转换成16进制,以字符串形式表示。 ③数字——数学算: abs() 返回数字的绝对值。 divmod() 把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) min() 返回给定参数的最小值,参数可以为序列 max() 返回给定参数的最大值,参数可以为序列 sum() 对可迭代对象进行求和计算 ★round() 返回浮点数的四舍六入五留双 pow() 返回 xy(x的y次方)的值 ④序列——列表和元组相关的: list() 用于将元组转换为列表。 tuple() 将列表转换为元组。 ⑤序列——字符串相关的: str() 将对象转化为字符串形式 format() 格式化编辑字符串 bytes() 返回一个新的数组对象,这个数组对象不能对数组元素进行修改。 ☆bytearry() 返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256 ret = bytearray('alex',encoding='utf-8') print(id(ret)) print(ret[0]) ret[0] = 65 print(ret) print(id(ret)) ☆memoryview() 返回给定参数的内存查看对象(Momory view)。 ret = memoryview(bytes('你好',encoding='utf-8')) print(len(ret)) print(bytes(ret[:3]).decode('utf-8')) ord() 以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值 chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符 ascii() 类似 repr() 函数, 返回一个表示对象的字符串 print(ascii('abc')) >>> 'abc' print(ascii('我')) >>> 'u6211' repr() 将对象转化为供解释器读取的形式 print(ascii('abc')) >>> 'abc' print(ascii('我')) >>> '我' ⑥序列: reversed() 反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器 slice() 实现切片对象,主要用在切片操作函数里的参数传递 ⑦数据集合——字典和集合: dict() 用于创建一个字典 set() 用于创建一个集合 frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素 ⑧数据集合: len() 返回对象(字符、列表、元组等)长度或项目个数 sorted() 对所有可迭代的对象进行排序操作;内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 enumerate() 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中 all() 用于判断给定的可迭代参数 iterable 中的所有元素是否不为 0、''、False 或者 iterable 为空,如果是返回 True,否则返回 False。 any() 用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回 False,如果不都为空、0、false,则返回 True。 zip() 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表 ☆filter() 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表 ☆map() 根据提供的函数对指定序列做映射
1.2 作用域相关
# ①globals() 获取全局变量的字典 # ②locals() 获取执行本方法所在命名空间内的局部变量的字典
1.3 迭代器、生成器相关
# ①range() 创建一个整数列表,一般用在 for 循环中 # ②next() 调用可迭代对象或迭代器的next方法,取到一个元素 # ③iter() 将可迭代对象转化称迭代器
1.4 面向对象相关
None
1.5 反射相关
None
1.6 其他
①eval() 将字符串类型的代码执行并返回结果,有返回值,有结果的简单计算 print(eval('1+2+3+4')) >>> 10 ②exec() 将字符串类型的代码执行并返回结果,没有返回值,简单流程控制 print(exec("1+2+3+4")) >>> None # 没有返回值,所以不能像eval一样输出返回结果 exec("print('hello,world')") >>> hello,world ③ compile() 将字符串类型的代码编译,代码对象能够通过exec语句来执行或者eval()进行求值 流程语句使用exec code1 = 'for i in range(0,6): print (i)' compile1 = compile(code1,'','exec') exec (compile1) >>> 1 >>> 3 简单求值表达式用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() 输入 s = input("请输入内容 : ") #输入的内容赋值给s变量 print(s) #输入什么打印什么。数据类型是str >>> 请输入内容 : python >>> python ⑤print() 输出 def print(self, *args, sep=' ', end=' ', file=None): # known special case of print """ print(value, ..., sep=' ', end=' ', file=sys.stdout, flush=False) file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件 sep: 打印多个值之间的分隔符,默认为空格 end: 每一次打印的结尾,默认为换行符 flush: 立即把内容输出到流文件,不作缓存 """ ⑥type(o) 返回变量o的数据类型 ⑦id(o) o是参数,返回一个变量的内存地址 ⑧hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。 t = (1,2,3) l = [1,2,3] print(hash(t)) #可hash print(hash(l)) #会报错 ''' 结果: TypeError: unhashable type: 'list' ''' ⑨open() 打开一个文件,返回一个文件操作符(文件句柄) 操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+) 可以用encoding指定编码 ⑩__import__导入一个模块 import time os = __import__('os') print(os.path.abspath('.')) ⑪help() 在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型,输入q退出 ⑫callable(o),o是参数,看这个变量是不是可调用。 def func():pass print(callable(func)) #参数是函数名,可调用,返回True print(callable(123)) #参数是数字,不可调用,返回False >>> True >>> False ⑬dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量 print(dir(list)) #查看列表的内置方法 print(dir(int)) #查看整数的内置方法
二、匿名函数
1、定义
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数
# 例子 def sqr(n): return n**n print(sqr(10)) # 换成匿名函数 sqr = lambda n:n**n print(sqr(10))
2、语法
# 函数名 = lambda 参数 :返回值
- 参数可以有多个,用逗号隔开
- 匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
- 返回值和正常的函数一样可以是任意数据类型
# 匿名函数举例 res = filter(lambda x:x>10,[5,8,11,9,15]) for i in res: print(i) >>> 11 >>> 15
★面试题★
# 1.下面程序的输出结果是: d = lambda p:p*2 t = lambda p:p*3 x = 2 x = d(x) x = t(x) x = d(x) print x >>> 24 # 2.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}] # 答案 print(list(map(lambda tup:{tup[0]:tup[1]},zip((('a'),('b')),(('c'),('d')))))) ''' 3.以下代码的输出是什么?请给出答案并解释。 def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) 请修改multipliers的定义来产生期望的结果。 ''' # 答案 ''' 将return [lambda x:i*x for i in range(4)]修改为 return (lambda x:i*x for i in range(4)), 则可以将答案[6,6,6,6]修改为预期答案[0,2,4,6] '''