day18 内置函数和匿名函数

一、内置函数的复习

 1、三种从迭代器中取值的方法

#1、 print(list(ret))
#2、 next,__next__
#3、 for

2、相关内置函数

(1)reversed和reverse的区别

l=[1,2,3,54,6,3]
ret=reversed(l)
print(ret)
print(list(ret))
#两者的区别,reversed返回迭代器,不返回原来的列表,
# 不改变原来的列表,生成一个新的序列迭代器
# (一个一个取值的时候节省内存)
l.reverse()
print(l)
#reverse 返回None 是在原本的基础上修改的

(2)slice  切片

l=[1,2,3,54,6,3,5,6,3]
l1=slice(3,6,2)  #l[3:6:2] 语法糖
print(l[l1]) #[54, 3]

3、字符串

(1)format

print(format("test","<20"))   #左对齐
print(format("test",">20"))    #右对齐
print(format("test","^20"))     #居中对齐

整型数字可以提供的参数

浮点数可以提供的参数

计数方法

(2)bytes

#网络编程的时候,能在网络上传递的必须是字节
ret=bytes("你好",encoding="utf-8")
#中间是网络传输过程
print(ret.decode(encoding="utf-8"))

(3)bytearrary

ret=bytearray("alex",encoding="utf-8")
# 对比较长的字符串做修改是,指定某一处进行修改,不会改变这个bytearray的内部地址
print(id(ret))   #35639960
print(ret[0])  #97
ret[0]=65
print(ret)   #bytearray(b'Alex')
print(id(ret))  #35639960

(4)menmoryview

# menmoryview 只能对bytes切片
ret=memoryview(bytes("你好",encoding="utf-8"))
print(ret) #
print(len(ret)) #6
print(ret[:3]) #
print(bytes(ret[:3]).decode("utf-8")) #
print(bytes(ret[3:]).decode("utf-8")) #

(5)ord    字符按照Unicode转数字

        chr  数字按照Unicode转字符

print(ord("a")) #97

print(chr(97)) #a

(6)ascii  只要是ascii码中的内容,就打印出来,不是就转换成u

print(ascii("a")) #'a'

print(ascii(34)) #34

 (6)reper 做字符串拼接的时候使用

print(repr("1"))  #'1'
print(repr("name:%r"%("金老板")))  #"name:'金老板'

4、数据集合

(1)dict  字典

  (2)set

  (3) frozenset  转变成可哈希的(不可变的类型)

5、相关内置函数

  (1)len

  (2)enumerate  枚举

l=["笔记本","phone","apple","banana"]
for j,i in enumerate(l,1):
print(j,i)

  (3)all

print(all([1,2,3,4,0]))  #False
print(all([1,2,3,4]))  #True
print(all([1,2,3,None])) #False
print(all([1,2,3," "])) #True

   (4)any

与开始的数据有关系
print(any([True,None,False]))   #True
print(any([False,None,False]))  #False

  (5)zip

print(list(zip([1,2,3,4],[2,3,4,5])))
# [(1, 2), (2, 3), (3, 4), (4, 5)]

  (6)filter   过滤函数,例子求列表中大于10的元素

def is_odd(x):
    if x>10:
        return True
ret=filter(is_odd,[1,2,3,4,23,45,6,123])
print(list(ret))
#[23, 45, 123]
求列表中大于10 的数字
# filter 就是一个可迭代对象,想要有一个新的内容集,是从原可迭代对象中筛选出来的
def is_not_empty(s):
    return s and s.strip()
ret=filter(is_not_empty,["1sad","  sdsf"," ","sfdsgf"])
print(list(ret))
利用filter删除空字符串
import math
def is_sqr(x):
    return math.sqrt(x)%1==0
ret=filter(is_sqr,range(1,101))
print(list(ret))
过滤1~100中平方根是整数的数

  (7)map

fliter和map

参数很相:都是一个函数名+可迭代对象

返回值页很相近,都是返回可迭代对象

区别:

filter 是做筛选的,结果还是原来在可迭代对象中的项

map 是对可迭代对象中的每一项做操作的,结果不一定是原来在可迭代对象中的项

# 返回绝值,新内容等于原内容的个数
ret=map(abs,[-1,-3,-6,3,54,6])
print(list(ret))
# [1, 3, 6, 3, 54, 6]
def func(x):
    return x**2
ret=map(func,[1,2,3,4])
print(list(ret))
# [1, 4, 9, 16]
求各项的平方

 (8)sorted  

  sort一个直接修改原列表的顺序,节省内存

     sorted 是生成一个新的列表,不改变原来的列表

    key=func

print(sorted([-2,-3,2,3],reverse=True))  #[3, 2, -2, -3]
print(sorted([1,2,3,-4,-23,34],key=abs))  #[1, 2, 3, -4, -23, 34]
print(sorted(([1,322,34,23],"ssd"),key=len))  #['ssd', [1, 322, 34, 23]]
使用默认函数

 新内容:匿名函数

例子:

# 第一种
def add1(x,y):return x+y
ret=add1(3,2)
print(ret)
# 第二种
add=lambda  x,y:x+y
print(add(1,2))
函数和匿名函数的对比例子
dic={"k1":10,"k2":100,"k3":30}
print(max(dic.values()))  #100
print(max(dic))   #k3
print(max(dic,key=lambda k:dic[k])) #k2
求字典中的最大值
def func(x):
    return x**2

ret=map(lambda x:x**2,[1,2,3,4,5])
print(list(ret))
使用map求平方
def func(num):
    return num>99and num<1000
ret=filter(func,[124,3,5456,456,12])
print(list(ret))
# [124, 456]
ret2=filter(lambda num:(num>99 and num<1000),[124,3,5456,456,12,243])
print(list(ret2))
# [124, 456, 243]
def func(num1):
    if num1>10:
        return True
ret=filter(lambda  num1:num1>10,[1,23,34,12,2])
print(list(ret))
# [23, 34, 12]
ret1=filter(lambda num:True if num>10 else False,[1,2243,354,4,5,34])
print(list(ret1))
# [2243, 354, 34]
使用filter 

比较常用的max  min  map  filter

 面试题:

1、

d=lambda p:p*2
t=lambda p:p*3
x=2
x=d(x)
x=t(x)
x=d(x)
print(x)

2、现有两元组是((“a”),(“b”)),(("c'),("d")),

 请使用python中匿名函数生成列表[{'a': 'c'}, {'b': 'd'}]

t1=(("a"),("b"))
t2=(("c"),("d"))
#t3=zip(t1,t2)
print(list(map(lambda  t:{t[0]:t[1]},zip(t1,t2))))
# [{'a': 'c'}, {'b': 'd'}]

 3、

def multipliers():
    return (lambda x:i*x for i in range(4))
print([m(2) for m in multipliers()])
# [0, 2, 4, 6]

原文地址:https://www.cnblogs.com/number1994/p/8011625.html