12 Day Python之内置函数&匿名函数

内置函数&匿名函数

一、内置函数

截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。

   

内置函数

   

abs()

divmod()

input()

open()

staticmethod()

all()

enumerate()

int()

ord()

str()

any()

eval()

isinstance()

pow()

sum()

basestring()

execfile()

issubclass()

print()

super()

bin()

file()

iter()

property()

tuple()

bool()

filter()

len()

range()

type()

bytearray()

float()

list()

raw_input()

unichr()

callable()

format()

locals()

reduce()

unicode()

chr()

frozenset()

long()

reload()

vars()

classmethod()

getattr()

map()

repr()

xrange()

cmp()

globals()

max()

reversed()

zip()

compile()

hasattr()

memoryview()

round()

__import__()

complex()

hash()

min()

set()

 

delattr()

help()

next()

setattr()

 

dict()

hex()

object()

slice()

 

dir()

id()

oct()

sorted()

exec 内置表达式

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'))
>>> 10exec() 将字符串类型的代码执行并返回结果,没有返回值,简单流程控制
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]
'''
原文地址:https://www.cnblogs.com/lidaxu/p/8195503.html