zoukankan      html  css  js  c++  java
  • Python学习(八) —— 内置函数和匿名函数

    一、递归函数

      定义:在一个函数里调用这个函数本身

      递归的最大深度:997

    def func(n):
        print(n)
        n += 1
        func(n)    
    func(1)
    测试递归最大深度
    import sys
    print(sys.setrecursionlimit(10000))
    修改递归最大深度

    二、内置函数

      python提供了68个内置函数

      Built-in Functions  
    abs() dict() help() min() setattr()
    all() dir() hex() next() slice()
    any() divmod() id() object() sorted()
    ascii() enumerate() input() oct() staticmethod()
    bin() eval() int() open() str()
    bool() exec() isinstance() ord() sum()
    bytearray() filter() issubclass() pow() super()
    bytes() float() iter() print() tuple()
    callable() format() len() property() type()
    chr() frozenset() list() range() vars()
    classmethod() getattr() locals() repr() zip()
    compile() globals() map() reversed() __import__()
    complex() hasattr() max() round()  
    delattr() hash() memoryview() set()  

      1.作用域相关的内置函数:globals,locals

    def func():
        a = 1
        b = 2
        print(globals())  #查看全局变量
        print(locals())  #查看局部变量
    func()
    View Code

      2.迭代器/生成器相关的内置函数:range,iter,next 

    a = range(1,100,2)  #range是可迭代对象
    b = iter(a)  #iter得到迭代器
    print(next(b))  #打印迭代器第一个元素
    print(next(b))  #打印迭代器下一个元素
    View Code

      3.查看内置属性:dir

    print(dir(1))
    print(dir('abc'))
    print(dir(list))
    View Code

      4.判断函数是否可以调用:callable

    def a():print(1)
    print(callable(a))
    View Code

      5.帮助:help

    help(list)
    help(str)
    View Code

      6.导入模块:import

    import os
    import time
    import copy
    View Code

      7.打开文件:open

    with open('abc','r',encoding='utf-8') as f:
        print(f.read())
    View Code

      8.内存相关的内置函数:id,hash

    print(id('123'))  #打印内存地址
    print(id([1,2,3]))  #打印内存地址
    print(hash((1,2,3)))  #打印哈希值
    print(hash([1,2,3]))  #报错
    View Code

      9.输入输出相关的内置函数:input,print

    content = input('请输入内容:')  #input:与用户交互
    print(content)
    print('abc','def',sep='*',end='')  #sep=以...为分隔,end=以...为结尾
    print('ghj')
    
    #打印进度条
    import time
    for i in range(0,101,2):
        time.sleep(0.1)
        n = i // 2
        a = '
    %d%% : %s
    '%(i,'*'*n) if i == 100else '
    %d%% : %s'%(i,'*'*n)
        print(a,end='',flush=True)  #flush把光标移动到最前面,以空字符结尾
    View Code

      

      10.字符串类型代码的执行:exec,eval,compile

        eval()将字符串类型的代码执行并返回结果  

        exec()将字符串类型的代码执行

        compile()将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval语句进行求值

          参数说明:

          1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。

          2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。

          3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。

    code1 = '1+2+3'
    code2 = "print('abc')"
    print(eval(code1),eval(code2))
    print(exec(code1),exec(code2))
    # abc
    # 6 None
    # abc
    # None None
    View Code
    #流程语句使用exec
    code1 = """
    for i in range(10):
        if i % 2 == 1:
            print(i)
    """
    compile1 = compile(code1,'','exec')
    exec(compile1)
    
    #简单求值表达式用eval
    code2 = '1+2+3+4'
    compile2 = compile(code2,'','eval')
    print(eval(compile2))
    
    #交互语句用single
    code3 = "name = input('请输入命令:')"
    compile3 = compile(code3,'','single')
    eval(compile3)
    print(name)
    compile

      11.数字的数据类型相关:bool,int,float,comple(布尔值,整数,浮点数,复数)

    print(type(True))
    print(type(123))
    print(type(123.0))
    print(type(12+3j))
    
    #<class 'bool'>
    #<class 'int'>
    #<class 'float'>
    #<class 'complex'>
    View Code

      12.进制转换相关:bin,ort,hex(二进制,八进制,十六进制)

    print(bin(20))  #0b10100
    print(oct(20))  #0o24
    print(hex(20))  #0x14
    View Code

      13.数学运算相关:abs(求绝对值),divmod(求商余),round(精确小数),pow(幂运算)

    print(abs(-3))  #3
    
    print(divmod(5,3))  #(1,2)
    
    print(round(3.14159,4))  #3.1416
    
    print(pow(2,3))  #8
    View Code

      14.计算总数:sum(iterable,start=0)

    print(sum([1,2,3],2))  #2+1+2+3 = 8
    print(sum((4,5,6,7),10))  #10+4+5+6+7
    print(sum((),5))  #5
    View Code

      15.计算最大值:max(iterable,key=,default=)、max(*args,key=)

    print(max((1,-2,3,-4,5),default=0))  #5
    print(max([1,2,3,-5,-6],key=abs))  #-6
    print(max('A','a',))  #a
    print(max(1,2,3,-4))  #3
    View Code

      16.计算最小值:min(iterable,key=,default=)、min(*args,key=)

    print(min(1,2,3,4,-5,key=abs))  #-5
    print(min([1,-2,3,-4,5],default=0))  #-4
    print(min([],default=1))  #1
    View Code

       17.列表和元组:list,tuple

    a = range(8) 
    b = (i for i in range(5))  #一个生成器只能取一次值
    print(list(a))  #[0, 1, 2, 3, 4, 5, 6, 7]
    print(list(b))  #[0, 1, 2, 3, 4]
    print(tuple(a))  #(0, 1, 2, 3, 4, 5, 6, 7)
    print(tuple(b))  #()
    View Code

      18.列表和元组相关内置函数:reversed(接收可迭代对象,返回迭代器),slice(切片)

    l = [1,-5,3,4,-2,8]
    a = '123' 
    print(reversed(l))  #返回迭代器
    print(list(reversed(l)))  #[8, -2, 4, 3, -5, 1]
    print(list(reversed(a)))  #['3', '2', '1']
    print(l[slice(2,5,2)])  #[3,-2]
    View Code

      19.字符串相关:str,bytes:bytes(s,encoding='utf-8'),能在网络上传递的必须是字节

    a = '你好'
    print(bytes(a,encoding='gbk'))  #b'xc4xe3xbaxc3'
    print(bytes(a,encoding='utf-8'))  #b'xe4xbdxa0xe5xa5xbd'
    b = '世界'
    ret = bytes(b,encoding='utf-8')  
    print(ret.decode('utf-8'))  #世界
    View Code

      20.bytearray:bytearray(s,encoding='utf-8'),字节数组,修改字符串,不会改变字节数组的内存地址,适用于修改多处较长的字符串

    ret = bytearray('alex',encoding='utf-8')
    print(id(ret))    
    print(ret[0])  #97
    ret[0] = 65  
    print(ret)  #bytearray(b'Alex')
    print(id(ret))    
    View Code

      21.memoryview:memoryview(bytes('hello,eva',encoding='utf-8')),对bytes类型进行切片,不生成新的值

    ret = memoryview(bytes('你好',encoding='utf-8'))
    print(ret[:3])  #memory的内存地址
    print(len(ret))  #6
    print(bytes(ret[:3]).decode('utf-8'))  #
    View Code

      22.ord:字符按照unicode转数字

        chr:数字按照unicode转字符

        ascii:只要是ascii码中的内容,就打印出来,不是就转换成u

    print(ord('a'))  #97
    print(chr(97))  #a
    print(ord(''))  #20320
    print(chr(12345))  #
    print(ascii('*'))  #'*'
    print(ascii(''))  #'u7231'
    View Code

      23.rapper:用于%r格式化输出,打印字符串会把引号打印出来

    print(123)  #123
    print('123')  #123
    print(repr('123'))  #'123'
    print({'key:%r'%('value')})  #{"key:'value'"}
    View Code

      24.dict:字典,set:集合,forzenset:不可变集合,len:计算长度

      25.enumerate:枚举,会生成序列号

    for i in enumerate(range(5),1):
        print(i)
    
    #(1, 0)
    #(2, 1)
    #(3, 2)
    #(4, 3)
    #(5, 4)
    View Code

      26.all:接收一个可迭代对象,只要有一个为False,则返回False

        any:接收一个可迭代对象,只要有一个为True,则返回True

    print(all([1,2,3,None]))  #False
    print(any([1,0,{},'']))  #True
    View Code

      27.zip:拉链函数,接收多个可迭代对象,以短的为基准,进行匹配,返回一个迭代器

    print(zip([0,1,2,3,4],[5,6,'a','b']))  #返回迭代器
    print(list(zip([0,1,2,3,4],[5,6,'a','b'])))  #[(0, 5), (1, 6), (2, 'a'), (3, 'b')]
    print(list(zip([0,1,2,3],[5,6,7,8],['a','b'])))  #[(0, 5, 'a'), (1, 6, 'b')]
    View Code

      28.filter:筛选函数,前面接收函数名,后面接收可迭代对象,返回一个迭代器,只筛选结果为True的元素

        map:前面接收函数名,后面接收可迭代对象,返回一个迭代器,将可迭代对象按照函数的功能进行操作并把结果返回

    def func(x):
        return x and x.strip()
    ret = filter(func,['test',None,'','str',' ','END'])
    print(list(ret))  #['test', 'str', 'END']
    
    def func1(n):
        return n**2
    ret1 = map(func1,[1,2,-3,-4,5])
    print(list(ret1))  #[1, 4, 9, 16, 25]
    View Code

      29:sorted:从小到大排序,生成一个新列表,sort:从小到大排序,直接改变原列表的顺序

    l = [1,2,-3,-4,5]
    print(sorted(l))  #[-4, -3, 1, 2, 5]
    print(sorted(l,reverse=True))  #[5, 2, 1, -3, -4]
    print(l)  #[1, 2, -3, -4, 5]
    View Code

      

  • 相关阅读:
    java exception
    【洛谷P1627】 【CQOI2009】中位数
    切蛋糕
    【NOIP2015Day2T2】【洛谷P2679】子串
    【NOIP2017Day1T3】【洛谷P3953】逛公园
    【bzoj1082】【SCOI2005】栅栏
    搬砖
    花花的森林
    跳跳棋
    异或
  • 原文地址:https://www.cnblogs.com/Coufusion/p/7809683.html
Copyright © 2011-2022 走看看