python基础 day13 匿名函数、内置函数、闭包

一、匿名函数

一句话函数,比较简单的函数

  • 构建匿名函数
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)  
原文地址:https://www.cnblogs.com/west-yang/p/12630079.html