一、匿名函数
一句话函数,比较简单的函数
- 构建匿名函数
func1 = lambda a,b: a + b
print(func1(1,2))
# 接受一个可切片的数据,返回索引为0与2的对应的元素(元组形式)
func1 = lambda a: (a[0], a[2])
print(func1([0, 1, 2, 3, 4]))
# 写匿名函数,接受两个int参数,将较大的数据返回
func1 = lambda a, b: a if a > b else b
print(func1(9, 6))
二、内置函数
python 提供了68个内置函数
重要:abs() enumerate() filter() map() max() min() open() range() print() len() list() dict() str() float() reversed() set() sorted() sum() tuple() type() zip() dir()
classmethod() delattr() getattr() hasattr() issubclass() isinstance() object() property() setattr() staticmethod() super()
次要:all() any() bytes() callable() chr() complex() divmod() eval() exec() format() frozenset() globals() hash() help() id() input() int() iter() locals() next() oct() ord() pow() repr() round()
- eval() 剥除字符串的外壳
print(eval('2 + 4')) # 6
print(eval('[1, 2, 3]')) # [1, 2, 3]
print(eval('[1, 2], [3, 4]')) # ([1, 2], [3, 4])
print(eval("{'name': 'jason', 'age': 18}, [1, 2, 3], 'aloha'")) # ({'name': 'jason', 'age': 18}, [1, 2, 3], 'aloha')
- callable 判断一个对象是否可被调用
name = 'jason'
def func(a):
for i in range(a):
return i
print(callable(name)) # False
print(callable(func)) # True
- int float complex
print(int(3.7)) # 3
print(float(3.5)) # 3.5
print(complex(1, 2)) # (1+2j)
- bin oct hex
# bin 十进制转化成二进制
print(bin(58)) # 0b111010
# oct 十进制转化成八进制
print(oct(857)) # 0o1531
# hex 十进制转化成十六进制
print(hex(15)) # 0xf
# divmod 计算除数和被除数的值,以元组形式返回
print(divmod(10, 3)) # (3, 1)
# round 保留浮点数的小数位数
print(round(3.1415926, 2)) # 3.14
# pow
print(pow(2, 3)) # 8
print(pow(2, 3, 5)) # 3 # 2 ** 3 % 5
# bytes
s1 = '三上悠亚'
b1 = s1.encode('utf-8')
b2 = bytes(s1, encoding='utf-8')
print(b1) # b'xe4xb8x89xe4xb8x8axe6x82xa0xe4xbax9a'
print(b2) # b'xe4xb8x89xe4xb8x8axe6x82xa0xe4xbax9a'
# ord 输入字符,找到该字符编码的位置
print(ord('b')) # 98
print(ord('森')) # 26862 # Unicode
# chr 输入位置,找字符
print(chr(98)) # b
print(chr(26862)) # 森 # Unicode
# repr 返回一个对象的string 形式
s1 = '三上悠亚'
print(s1) # 三上悠亚
print(repr(s1)) # '三上悠亚'
msg = '我爱%r' % s1
print(msg) # 我爱'三上悠亚'
# all any
# all 可迭代对象中全部为True,才返回True
list1 = [1, 2, [1, 2], 'jason', True, '']
list2 = [1, 2, [1, 2], 'jason', True]
print(all(list1)) # False
print(all(list2)) # True
# any 可迭代对象中有一个True ,就返回True
list3 = [False, '', 1]
list4 = [False, '']
print(any(list3)) # True
print(any(list4)) # False
# abs 绝对值
print(abs(-5)) # 5
# sum 求一个可迭代对象的和
l1 = [i for i in range(101)]
print(sum(l1)) # 5050
print(sum(l1, 5)) # 5055 # 设置初始值5
# reversed 返回的是翻转的新的迭代器,不会修改原列表
l1 = [i for i in range(10)]
l2 = reversed(l1)
print(list(l2)) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# 区别于reverse()
list1 = [i for i in range(5)]
list1.reverse()
print(list1)
# zip 拉链方法,以最短的结束
l1 = [1, 2, 3, 4, 5]
l2 = ['jason', 'carly', 'dog']
l3 = 'aloha'
obj = zip(l1, l2, l3)
print(list(obj)) # [(1, 'jason', 'a'), (2, 'carly', 'l'), (3, 'dog', 'o')]
- min max
l1 = [32, 45, 77, 35, 75, -9, -34]
print(min(l1)) # -34
print(min(l1, key=abs)) # -9
# 凡是可以加key的,它会自动的将可迭代对象中的每个元素按照顺序传入key对应的函数中。
# 以返回值比较大小
dic = {'a': 3, 'b': 2, 'c': 1}
# 求出值最小的键值对
print(min(dic)) # a # min默认按照字典的键去比较大小
def func(k):
return dic[k]
print(min(dic, key=func)) # c
# print(min(dic, key=lambda a: dic[a]))
list1 = [('jason', 24), ('carly', 20), ('dog', 2)]
print(min(list1)) # ('carly', 20)
def func(li):
for i in li:
return i[-1]
print(min(list1, key=lambda i: i[-1]))
- sorted 排序 不会改变原列表顺序
list1 = [('jason', 96), ('carly', 80), ('dog', 66)]
print(sorted(list1, key=lambda x: x[-1])) # 默认从低到高
print(sorted(list1, key=lambda x: x[-1], reverse=True)) # 从高到低
- filter 列表推导式的筛选模式
li = [1, 2, 6, 3, 5, 9, 12, 7]
# print([i for i in li if i > 5] # [6, 9, 12, 7] # 返回的是列表
ret = filter(lambda x: x > 5, li) # 返回的是迭代器
print(list(ret))
- map 列表推导式的循环模式
li = [1, 4, 9, 16, 25, 36]
print([i**2 for i in range(1, 6)]) # 返回的是列表
ret = map(lambda x: x**2, range(1, 6)) # 返回的是迭代器
print(list(ret))
- reduce
from functools import reduce
def func(x, y):
return x + y
result = reduce(func, range(1, 101))
print(result)
三、闭包
- 什么是闭包?
1.闭包只能存在嵌套函数中
2.内层函数对外层函数非全局变量的引用(使用),就会形成闭包。
被引用的非全局变量也称作自由变量,这个自由变量会与内层函数产生一个绑定关系
自由变量不会在内存中消失 - 闭包有什么作用?
保证数据的安全性
def func():
list1 = []
def aver(new_number):
list1.append(new_number)
result = sum(list1) / len(list1)
return result
return aver
av = func()
print(av(10))
print(av(12))
print(av(17))
# 如何判断闭包?
print(av.__code__.co_freevars) # ('list1',)
- 如何判断闭包?
print(av.__code__.co_freevars)