一、内置函数
 
内置函数的思维导图
 
1、print(self,*args,sep=' ',end='\n',file=None)
print('张颖', '张娜', '张梦', '张悦', end = ' ')   # 以什么为结尾,默认是回车
# 张颖 张娜 张梦 张悦

print('张颖', '张娜', '张梦', '张悦', sep = '_')  #  连接符,默认是空格
# 张颖_张娜_张梦_张悦

2、hash()  数字算出来就是数字本身,其他的数据类型算完依托很长的数字 

print (hash(12345)) # 12345
print(hash('你是谁')) # 1399596852175174770
3、id()  查看内存地址
4、help()   # 查看帮助
5、callable()  查看函数是否能够调用
def func():
    print('as')

an = ''

print(callable(func)) # True
print(callable(an)) # False
6、dir()  此类型的数据可以执行哪些方法(函数)
7、count()  计数
8、bin()  转化成二进制   oct()   转化成八进制   hex()  转化成十六进制    
9、divmod()   计算商和余数   
10、round()   如果是奇数,正常四舍五入,若是偶数 会五舍六入
11、pow()  # pow(4,4) 4 的4 次方
12、 enumerate()   列出可迭代的索引和元素
lis = ['中国','美国','日本']
# for i in range(lis):
#      print(i,lis[i])

# enumerate(iterable[, start]) -> iterator for index, value of iterable
for i, el in enumerate(lis,1):
        print(i,el)

13、all()  any()    

print(all([1, 3, 5, 'ha'])) # and

print(any([1, False, None])) # or

14、zip()   # 拉链函数  水桶效应 

lst1 = ["赵四", "刘能", "香秀"]
lst2 = ["刘晓光", "王小利"] # 水桶效应
lst3 = ["街舞", "磕巴", ""]
z = zip(lst1, lst2, lst3)
print(list(z))

#[('赵四', '刘晓光', '街舞'), ('刘能', '王小利', '磕巴')]
15、iter()   获取迭代器,内部使用的是__iter__()方法来获取迭代器
       next()  迭代器函数  迭代器向下执行一次,内部实际使用了__next__()方法返回迭代器的下一个项目
 
二、匿名函数
匿名函数的统一的名字:<lambda>
fn = lambda a, b: a+b
fn = fn(3, 4)
print(fn)
使用场景:配合着sorted,map,filter
 
1、sorted() 排序函数,
    语法:sorted(Iterable,key=None,reverse=False)
 
   Iterable :可迭代对象
   key:排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素传递给这个        函数的参数,根据函数运算的结果进行排序
 
    reverse:是否倒叙,True:倒叙,False:正序
 
自己去定义排序的规则
lst = [34,56,78,32,12,34,90]
print(sorted(lst))
# 按名字长度排序
names = ['张颖一','','关谷神奇','阿苏','慕容东方晓']

def func(s):
    return len(s) # 返回长度
# 执行流程
# 把可迭代对象中的每一项拿出来,作为参数传递给后面的key函数
# 函数返回数字,根据数字进行排序
s = sorted(names,key=func)
print(s)

# ['影', '阿苏', '张颖一', '关谷神奇', '慕容东方晓']

# 另一种方法
print(sorted(names,key=lambda s : len(s)))
2、filter  过滤函数
语法:filter(function,Iterable)
    function:用来筛选的函数,在filter中会自动把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据
    Iterable:可迭代对象
names = ['张颖一','张影','关谷神奇','阿苏','慕容东方晓']
# 过滤掉姓张的人
# 把可迭代对象打开,把内部元素一个一个的传递给前面的函数,由这个函数决定此项是否保留
f = filter(lambda name : not name.startswith(''),names)
print("__iter__" in dir(f)) # 可迭代对象
for el in f:
    print(el)
3、map 映射函数
语法:map(function,iterable)可以对可迭代对象中的每一个元素进行映射,分别去执行function
def func(e):
    return e ** 2

lst = [2,45,67,32,6]

mp = map(func,lst)
print(mp)
print(list(mp))

# 用lambda
m = map(lambda i : i **2 , lst)
print(list(m))

 

# 计算两个列表中相同位置的和

lst1 = [2,4,6,8,9]
lst2 = [1,3,5,7,10]
m = map(lambda x,y : x + y,lst1,lst2)
print(list(m))

4、eval()   执行字符串类型的代码,并返回最终结果

print(eval("2+2")) # 4
n = 8
print(eval("2+n")) # 10

def func():
    print(666)
eval("func()") # 666

5、exec() 执行字符串类型的代码

exec('''
for i in range(10):
    print(i)
''')
6、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+4+8"
c2 = compile(code2,"", mode="eval")
a = eval(c2)
print(a)

code3 = "name = input('请输入你的名字:')"
c3 = compile(code3,"", mode="single")
exec(c3)
print(exec(c3))

有返回值的字符串形式的代码用eval(),没有返回值的字符串形式的代码用exec(),一般很少用到compile() 

posted on 2018-12-12 21:56  古鲁月  阅读(173)  评论(0编辑  收藏  举报