zoukankan      html  css  js  c++  java
  • 内置函数 闭包

    内置函数 闭包

    内置函数

    匿名函数 lambda

    构建格式 (一句话函数)

    • 适用于简单的函数
    func = lambda a,b : a if a > b else b
    # lambda == def  a,b是形参 返回值用 ":"隔开  ":" 是返回值(可以加判断条件)
     print(func(5,2))
    
    func = lambda lis : (lis[0],lis[2])  # 返回值多个元素用元组表达
    print(func("sadas"))
    
    func = lambda : 3
    print(func()) # 3 (返回值)
    

    注意事项(格式化输出F/f'strings' )

    # 所以使用lambda 表达式会出现一些问题。
    # 解决方式:可将lambda嵌套在圆括号里面解决此问题。
    x = 5
    print(f'{(lambda x: x*2) (x)}')  # 10
    

    内置函数Ⅰ

    eval 执行字符串类型的代码,并返回最终结果 有返回值 (谨慎使用)

    print(eval("1+2")) # 脱掉str的外套, 进行int运算  # 打印结果 3
    

    exec 执行字符串类型的代码 代码流 过程 没有返回值 (谨慎使用)

    s ='''
    for i in [1,2,3]:
        print(i)
    '''  # 与eval相似 但没有返回值
    exec(s) # 1 2 3  
    print(exec(s)) # None
    

    hash 获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。

    print(hash(12322))
    print(hash('alex'))
    print(hash(True))
    '''
    12322
    4259238228040858354
    1''' # 打印结果
    

    help 函数用于查看函数或模块用途的详细说明。

    print(help(list))  # 就是按着ctrl 看函数内部解释运行原理
    print(help(str.split))
    

    callable() (对象是否可调用)

    • 函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
    name = 'alex'
    def func():
        pass
    print(callable(name))  # False
    print(callable(func))  # True
    

    int () ( "12" → 12 / 12.2 → 12 )

    • 函数用于将一个字符串或数字转换为整型。 将浮点型转化为整型
    print(int())  # 0
    print(int('12'))  # 12
    print(int(3.6))  # 3
    print(type(bin(3.6)))  # class"int" 
    

    float () ( 3→3.0 )

    • 函数用于将整数和字符串转换成浮点数。
    print(float(1)) # 1.0
    

    bin () ( 10 → 2 进制 )

    • 将十进制整数转换成二进制并返回。
    print(bin(100)) # 将十进制转化成二进制 0b1100100
    print(type(bin(3)))  # class"str" 
    

    oct () ( 10 → 8 进制 )

    • 将十进制转化成八进制字符串并返回。
    print(oct(10),type(oct(10)))  # 0o12 <class 'str'>
    

    hex () ( 10 → 16 进制 )

    • 将十进制转化成十六进制字符串并返回。
    print(hex(10),type(hex(10)))  #16进制 0xa <class 'str'> 10,11,12,13,14,15 分别用a,b,c,d,e,f表示
    

    divmod () (a // b , a % b ) 分页用

    • 计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
    print(divmod(7,2))  # (3, 1)
    print(divmod(2,2))  # (1, 0)
    

    round () (保留有效位数)

    • 保留小数的有效位数
    print(round(7/3,2))  # 2.33
    print(round(7/3))  # 2
    print(round(3.32567,3))  # 3.326
    

    pow () (x**y)

    • 求xy次幂。(三个参数为x**y的结果对z取余)
    print(pow(2,3))  # 8  (两个参数为2**3次幂)
    print(pow(2,3,3)) # 2(三个参数为2**3次幂,对3取余)
    

    ord () (查unicode中编码位置)

    • 输入字符找该字符在unicode中编码的位置
    # ord 输入字符找该字符编码的位置
    print(ord('a')) # 97
    print(ord('中')) # 20013
    

    chr () (查unicode中对应位置)

    • 输入位置数字找出其unicode中对应的字符
    # chr 输入位置数字找出其对应的字符
    print(chr(97)) # a
    print(chr(20013)) # 中
    

    repr () (%r 原形毕露)

    • 返回一个对象的string形式(原形毕露)。
    mag ="我叫%r" %(太白)
    print(mag)  # 我叫"太白"
    # %r  原封不动的写出来
    # name = 'taibai'
    # print('我叫%r'%name)
    
    # repr 原形毕露
    print(repr('{"name":"alex"}'))
    print('{"name":"alex"}')
    

    all () ( 判断可迭代对象 )

    • 判断可迭代对象中,全都是True才是True

    any () ( 判断可迭代对象 )

    • 判断可迭代对象中,有一个True 就是True
    # all  可迭代对象中,全都是True才是True
    # any  可迭代对象中,有一个True 就是True
    print(all([1,2,True,0]))
    print(any([1,'',0]))
    

    内置函数Ⅱ

    # sep:   打印多个值之间的分隔符,默认为空格
    # end:   每一次打印的结尾,默认为换行符 
    
    # file:  默认是输出到屏幕,如果设置为文件句柄,输出到文件
    print(1, 2, 3, sep='|') # 1|2|3
    
    print(1, 2, end=' ') # 1 2 3 4
    print(3, 4) # 两句话一起打印在一行
    
    f = open('log','w',encoding='utf-8')
    f.write('写入文件') == print('写入文件', file=f) 
    

    int():pass

    str():pass

    bool():pass

    set(): pass

    list()

    • 将一个可迭代对象转换成列表
    l1 = list('abcd')
    print(l1)  # ['a', 'b', 'c', 'd']
    print(list("abcd"))
    

    tuple()

    • 将一个可迭代对象转换成元组
    tu1 = tuple('abcd')
    print(tu1)  # ('a', 'b', 'c', 'd')
    

    dict()

    • 通过相应的方式创建字典
    # 创建字典的几种方式
    dic = {1: 2}
    # 字典推导式
    print({i: 1 for i in range(3)})
    dic = dict(one=1, two=2, three=3)
    # 从键
    dic = dict.fromkeys()
    

    abs() 返回绝对值

    print(abs(-10)) # 10
    

    sum(Iterable object) 求和

    print(sum([1,2,3])) # 6 
    print(sum((1,2,3),100)) # 106
    

    max / min() 求最值

    print(min([22, 11, 45, 2])) # 2
    # min / max 可加功能
    dic = {'a':3,'b':2,'c':1}
    # 将dic值最小的键返回。
    print(min(dic,key=lambda x : dic[x]))
    
    # 将dic值最小的值返回。
    print(dic[min(dic,key=lambda x : dic[x])])
    
    dic = {'a':['李业',67],'b':['怼哥', 95],'c':['方垚', 85]}
    
    # 将成绩最低的从属于的那个列表返回。
    print(dic[min(dic,key=lambda x : dic[x][1])])
    
    # 将成绩最低的分数返回。
    print(dic[min(dic,key=lambda x : dic[x][1])][1])
    

    reversed() 镜像

    • 将一个序列翻转, 返回翻转序列的迭代器
    print(reversed([1,2,3,4]))  # 返回值是一个迭代器(生成器)
    print(list(reversed([1,2,3,4]))) # [4,3,2,1]
    

    bytes()

    • 把字符串转换成bytes类型
    s1 = '太白'
    方法一:
    print(s1.encode('utf-8'))
    方法二:
    print(bytes(s1,encoding='utf-8'))
    
    解码:
    b1 = b'xe5xa4xaaxe7x99xbd'
    # 方法一:
    # print(b1.decode('utf-8'))
    # 方法二:
    print(str(b1, encoding='utf-8'))
    

    zip() 拉链方法

    • 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元祖组成的内容,如果各个迭代器的元素个数不一致,则按照长度最短的参数索引返回
    lst1 = [1,2,3]
    lst2 = ['a','b','c','d']
    lst3 = (11,12,13,14,15)
    print(zip(lst1)) # 结果是一个迭代器
    for i in zip(lst1,lst2,lst3):
        print(i)
    # 结果:
    (1, 'a', 11)
    (2, 'b', 12)
    (3, 'c', 13) 
    

    sorted排序函数 (默认从小到大)

    l1 = [2, 6, 4, 1, 3]
    #  列表原有的方法
    l1.sort()
    print(l1)  # [1, 2, 3, 4, 6]
    
    #  形成新列表
    print(sorted(l1)) # [1, 2, 3, 4, 6]
    print(l1) # [2, 6, 4, 1, 3]
    
    #  reverse : 是否是倒叙 ,True 倒叙  ; False 正序
    
    # 结合lambda 使用  (字典返回的是key)
    l1 = [('张一东', 80), ('张耳洞', 75), ('怼怼哥', 7), ('李业', 59)]
    print(sorted(l1,key=lambda x:x[1])) # 或者
    print(sorted(l1,key=lambda x:x[1],reverse=False))
    print(sorted(l1,key=lambda x:x[1],reverse=True))
    

    filter() 筛选过滤

    # 生成器表达式的筛选模式
    l1 = [56, 67, 12, 34, 78, 90,]
    print([i for i in l1 if i > 60]) # [67, 78, 90]
    # 返回值为True的留下来
    print(filter(lambda x: x>60,l1))  # 返回一个迭代器 / 生成器
    print(list(filter(lambda x: x>60,l1))) # [67, 78, 90]
    
    lst = [{'id':1,'name':'alex','age':50},
            {'id':1,'name':'wusir','age':17},
            {'id':1,'name':'taibai','age':16},]
    
    print(list(filter(lambda x:x['age']<30,lst))) 
    

    map() 统计可迭代类

    l1 = [56, 67, 12, 34, 78, 90,] 
    print([i**2 for i in l1])  # [3136, 4489, 144, 1156, 6084, 8100]
    print(map(lambda x:x**2,l1))  # 返回一个生成器
    print(list(map(lambda x:x**2,l1))) # [3136, 4489, 144, 1156, 6084, 8100]
    #  计算两个列表中相同位置的数据的和
    lst1 = [1, 2, 3, 4, 5]
    lst2 = [2, 4, 6, 8, 10]
    print(list(map(lambda x, y: x+y, lst1, lst2)) # [3, 6, 9, 12, 15]
    

    reduce() 统计类

    from functools import reduce # 先得调用
    ''' 
    第一次:x,y 1,2 求和 3 记录到内存
    第二次:x,y 3,3 求和 6 记录到内存
    第三次:x,y 6,4 .........'''
    print(reduce(lambda x,y: x+y,[1,2,3,4,5])) # 1+2+3+4+5 
    print(reduce(lambda x,y: 2*x+y, [1,2,3]))
    print(reduce(lambda x,y: x+y, ['alex','s','b']))  # 可以用字符串拼接  alexsb
    
    

    enumerate() 枚举

    解包和枚举
    s = "wtf"
    d = {}
    for i, d[i] in enumerate(s):
        pass
    print(d)# 打印结果: {0:"w",1:"t",2:"f"}
    

    闭包

    • 闭包就是内层函数中, 对外层函数(非全局)变量的调用(引用 / 改变). 叫闭包
    • 可以让一个局部变量(自由变量)常驻内存

    作用

    • 应用于装饰器
    • 最终的目的是保证了数据的安全
    • 可以保证外层函数中的变量在内存中常驻,供后面的程序使用

    闭包的形成条件

    • 闭包存在于嵌套函数中
    • 内层函数对外层函数非全局变量引用(改变)
    • 参考 : 函数名逐层返回直至返回到最外层

    特性

    • 闭包函数的空间不会随着函数函数的结束而消失
    • 被内层函数引用的(非全局)变量不会消失(常驻内存)

    自由变量

    • 外层函数被内层函数引用的变量被称为

    判断是不是闭包 == 是不是有自由变量

    print(外部函数名()._ code _.co_freevars 查看函数的自由变量)

    print(外部函数名()._ code _.co_varnames 查看函数的局部变量)

    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')
    
  • 相关阅读:
    Python基础-博客
    已开发程序查询
    新语法
    html基础
    python操作excel
    Selenium
    练习2---(request,ajax爬取头条数据)
    练习1---request+正则(猫眼电影)
    框架---scrapy(基本用法)
    框架---Scrapy (框架安装)
  • 原文地址:https://www.cnblogs.com/fanxss/p/11051626.html
Copyright © 2011-2022 走看看