zoukankan      html  css  js  c++  java
  • 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)  
    
  • 相关阅读:
    linux开机启动服务的修改与查看
    我从百度来30万IP的经验
    JavaScript静态页面值传递之Cookie篇
    采用HttpModules来重写URLs(实践篇)
    JavaScript,5种调用函数的方法
    [JS]详尽解析window.event对象
    mysql锁定单个表的方法
    mysql常见错误提示及解决方法
    浏览器Chrome 3.0.195.21 Final
    svn windows和linux安装笔记
  • 原文地址:https://www.cnblogs.com/west-yang/p/12630079.html
Copyright © 2011-2022 走看看