第十三天

匿名函数

func = lambda a,b:a+b

lambda 相当于 def 定义函数

a,b 形参

a+b 返回值


def func(a,b):

​ return a+b

print(func(1,2))

例子

#接受一个可切片的数据,返回索引为0和2对应的值
func2=lambda a:(a[0],a[2])
print(func2([11,22,33,44]))

接受两个int参数 将较大的返回

func=lambda a,b: a if a>b else b 

内置函数

1. bin(100) 10-->2

2. cot(10) 10-->8

3. hex(10) 10-->16

4. divmod(10,3) #(3,1) 10除以3 商3余1

5. round(3.14545455,2) 保留浮点数的小数位数 3.14

6.求x* *y次幂 (三个参数为x**y的结果对z取余)

pow(2,3) 8

pow(2,3,3) 2 余2

7. bytes

s1="小屋"

b=s1.encode("utf-8")

print(b)

b=bytes(s1,encoding="utf-8")

print(b) 两个一样

8.ord 输入字符找出该字符编码的位置 print(ord("a")) 97

9.chr 输入位置数字找字符

10.repr()返回一个对象的string形式(原形毕露)

s1="小屋"

print(repr(s1))

特殊用法

msg= "我叫%s"%(s1) # 我叫小屋

msg= "我叫%r"%(s1) #我叫'小屋'

11.all可迭代对象 全是True 才是True

12.any可迭代对象 一个是True 就是True

13.sep设置分隔符

14.end 设置尾部的字符 默认换行

print(self,*args,sep="",end="\n",file=None)

print(1,2,3,4,5,sep="|") # 1|2|3|4|5

print(1,end=" ")

print(2) # 1 2

15.list

l1=[1,2,3,4]

l2=list() #空列表

l2=list("123123156456")

16.dic 创建字典的方式

直接创建

元组的解构

dic=dict([(1,"one"),(2,"two")])

dic=dict(one=1,two=2)

update

fromkeys

字典推导式

17.abs()绝对值

18.sum()求和

19.reverse()翻转

l1.reverse()

l1=[i for i in range(10)]

obj=reverse(l1)

print(list(obj))

20.zip拉链方法***

l1=[1,2,3,4,5]

tul=("x","y","z")

s1="dasdsadasd"

obj=zip(l1,tul,s1)

for i in obj :

​ print(i)

print(list(obj))

纵向排列的形成一个元祖

(1, 'x', 'd')
(2, 'y', 'a')
(3, 'z', 's')

21.min max

min()

l1=[1,2,3,4,564654,7,9,-1]

print(min(l1))

凡是可以加key的.它会自动的将可迭代对象中的每个元素按照顺序传入key对应的函数中

以返回值比大小


// 以绝对值 方式返回最小值

print(min(l1,key=abs))

//求出值最小的键值对

print(min(dic)) #按照 键

print(min(dic.values()))   #按照键值 比大小

#2
def func(a):
    return dic[a]
print(min(dic,key=func))

#3
print(min(dic,key=lambda a:dic[a]))   
以关键字比较大小,返回的不是你比较的那个值  



l1=[("q",1),("b",-555),("w",11)]
c=min(l1,key=lambda x :x[-1])
print(c)

#// ('b', -555)

22.sorted 加key

l1=[("q",1),("b",-555),("w",11)]

print()

l1=[("q",1),("b",56),("w",11)]

print(sorted(l1,key=lambda x :x[-1])).

$// [('q', 1), ('w', 11), ('b', 56)]

23.filter 列表推导式的筛选模式

l1=[1,2,3]

print([i for i in l1 if i >2 ]) 返回的是列表

ret = filter(lambda) x : x>2,l1) 返回的是迭代器

print(list(ret))

24.map 列表推导式的循环模式

l1=[1,2,3]

print([i**2 for i in range(1,4)])

ret = map(lambda x:x**2,range(1,4))

print(list(ret))

25.reduce

from functools import reduce

def func(x,y):

​ return x+y

l=reduce(func,[1,2,3,4])

print(l)

  1. x 1 y 2 记录3
  2. x 3 y 3 记录 6
  3. x 6 y 4 记录10

返回10

闭包

def make_averager():
    series = []

    def averager(new_value):
        series.append(new_value)
        total = sum(series)
        return total / len(series)

    return averager

avg = make_averager()
print(avg(100000))

print(avg(110000))
print(avg(120000))


def make_averager():
​
    series = []
    def averager(new_value):
        series.append(new_value)
        total = sum(series)
        return total/len(series)
​
    return averager
avg = make_averager()
# 函数名.__code__.co_freevars 查看函数的自由变量
print(avg.__code__.co_freevars)  # ('series',)
当然还有一些参数,仅供了解:

# 函数名.__code__.co_freevars 查看函数的自由变量
print(avg.__code__.co_freevars)  # ('series',)
# 函数名.__code__.co_varnames 查看函数的局部变量
print(avg.__code__.co_varnames)  # ('new_value', 'total')
# 函数名.__closure__ 获取具体的自由变量对象,也就是cell对象。
# (<cell at 0x0000020070CB7618: int object at 0x000000005CA08090>,)
# cell_contents 自由变量具体的值
print(avg.__closure__[0].cell_contents)  # []

闭包的定义:

\1. 闭包是嵌套在函数中的函数。

\2. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用。

闭包的作用:保存局部信息不被销毁,保证数据的安全性。

闭包的应用

  1. 可以保存一些非全局变量但是不易被销毁、改变的数据。
  2. 装饰器。

series = []
def averager(new_value):
series.append(new_value)
total = sum(series)
return total / len(series)
return averager
avg = make_averager()
print(avg(100000))
print(avg(110000))
print(avg(120000))

#下面的结果就不对了:
print(make_averager()(100000))
print(make_averager()(110000))
print(make_averager()(120000))

posted @ 2020-02-27 23:02  小丁变优秀  阅读(216)  评论(1)    收藏  举报