python_fullstack基础(九)-内置函数&匿名函数

内置函数&匿名函数

一、内置函数

截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。
python_fullstack基础(九)-内置函数&匿名函数_第1张图片

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)内的(就是0255)整数作参数,返回一个对应的字符
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 面向对象相关

1.5 反射相关

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 "", line 1, in 
>>>     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='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', 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]
'''

你可能感兴趣的:(python)