• 路飞学城Python-Day9


    【23.函数-高阶函数】
    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称为高阶函数
    如果一个函数可以接收另一个函数,这个函数就称为高阶函数

    def func(x,y):
        return x+y
    def calc(x):
        return x
    f = calc(func)
    print(f(5,9))
    示例

    输出结果

    总结
    1.接收一个或多个函数作为输入
    2.return返回另外一个函数

    【24.递归介绍】
    什么是递归?
    递归就是在函数的过程中调用自己

    def recursion(n):
        recursion(n+1)
        print("这就是递归")
    recursion(1)
    示例

    输出结果

    python在调用的过程中超过了最大递归层的限制
    print(sys.getrecursionlimit())
    sys.getrecursionlimit(1500)#修改最大递归层数的限制

    总结
    递归调用就是不断的在函数自己里再执行,一直不结束,直到把内存撑爆了,所以需要有限制机制,于是python内部就加上了函数的限制

    【25.函数-递归与栈的关系】
    递归的本质,函数的调用时通过栈来执行的,栈就像是一个容器,内部是有数据大小限制的
    每执行一次函数就会往栈里放内容,不断的放在栈里就容易溢出,只有函数结束以后,栈才会处理垃圾数据

    【26.递归的作用】
    可以用来解决复杂的数学问题,比如斐波那契数列等
    使用递归的场景

    def calc(n):
        v = int(n /2)
        print(v)
        if int(v) == 0:
            return 'Done'
        calc(v)
    calc(10)
    需求:使用10整除2,直到得到0为止

    输出结果

    【27.递归的特性总结】
    递归是层级进入执行,函数执行完结束也是层级结束的


    1.必须有一个明确的结束条件,要不就会变成死循环了,最终撑爆系统
    2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    3.递归执行效率不高,递归层次过多会导致栈溢出

    【28.递归的作用】
    递归的作用,斐波那契数列,汉诺塔,求阶乘等

    def factoial(n):
        if n == 1:
            return 1
        return n * factoial(n-1)
    print(factoial(4))
    阶乘,每递归一次就要算一次阶乘

    输出结果

    【29.尾递归优化】
    有没有优化的方式可以优化递归的效率?

    def cal(n):
        print(n)
        return cal(n+1)
    cal(1)
    尾递归示例

    尾递归就是在函数执行的时候直接用return调用,第一层调用第二层函数的时候,使用return直接结束第一层函数的执行,就是层层之间互相不再有对应的关系
    也就是说当没有必要保留每一层的数据的时候,就可以直接用return调用下一层的函数,不再对栈有多余的占用

    然而尾递归优化并不是所有的语言都是支持的,在C语言里是支持的,但是再python里是没有任何用的,python不会有尾递归优化的

    【30.函数-内置方法1,2,3,4,5】
    python里有几十种内置方法
    abs()>>取绝对值 函数返回数字的绝对值
    dict()>>把一个数据转换成字典
    help()>>查看帮助
    min()>>方法返回给定参数的最小值,参数可以为序列
    max()>>方法返回给定参数的最大值,参数可以为序列
    setattr()>>【面向对象详细讲】函数对应函数 getatt(),用于设置属性值,该属性必须存在
    all()>>函数用于判断给定的可迭代参数(元祖或列表) iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。元素除了是 0、空、FALSE 外都算 TRUE

    li = [1,2,3,4]
    all(li)#这里会返回True
    li.append(0)
    all(li)#这里会返回False
    示例

    any()>>any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True
    bool()>>判断输入的值是不是True
    dir()>>打印当前文件存在的所有变量,包括你自定义的和python解释器自带的
    hex()>>十六进制,将一个数字转换为十六进制的表达方式
    next()
    slice()>>切片
    divmod()>>求整除和余数,先得到结果再返回余数
    id()>>返回传入的内存地址
    object()>>
    sorted()>>排序,可以对字典的value排序,用在列表里的排序,sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作
    ascii()>>返回一个可打印的对象字符串方式表示
    enumerate() >>枚举法用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
    input()>>用户交互输入
    oct()>>将输入的数字转换为八进制
    staticmethod()>>返回函数的静态方法【以后会讲】
    bin()>>转换为二进制
    eval() >>函数用来执行一个字符串表达式,并返回表达式的值,将字符串解析成代码(只能处理单行的代码)
    exec()>>和eval功能相同,而且能执行多行代码,exec是没有返回值的
    int()>>将数字转换为整数,不能转换的就报错
    open()>>打开文件
    str()>>将数字或字符转换为字符串形式
    isintance()>>【面向对象】
    ord()>>通过字符串返回在ascii表中的位置
    chr()>>通过ascii表中的位置返回字符串对应值
    sum()>>求和
    bytearray()>>返回一个新字节数组,这个数组里的元素是可变的(原内存地址修改,不是重开辟内存空间)
    map()>>根据提供的函数对指定序列做映射,可以用来求列表内的元素自乘(配合lambda函数)list(map(lambda x:x+3,[1,2,3,4,5]))
    filter()>>过滤,找到符合条件的值--list(filter(lambda x:x>3,[1,2,3,4,5]))
    pow()>>返回输入的数字的幂级数
    super()>>【面向对象讲】
    bytes()>>返回输入的二进制数
    float()>>浮点数
    iter()>>生成迭代器
    print()>>print(*objects, sep=' ', end=' ', file=sys.stdout)

    objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
    sep -- 用来间隔多个对象,默认值是一个空格。
    end -- 用来设定以什么结尾。默认值是换行符 
    ,我们可以换成其他字符串。
    file -- 要写入的文件对象
    print可以直接把字符串打印到文件里
    msg = '小邋遢'
    f = open("ptint_to_file",'w')
    print('真呀真邋遢',sep = '|',end = "")
    print内部参数解读

    tuple()>>转换为元祖
    callable()>>判断一个东西是否可调用,可以判断变量是否是函数
    len()>>判断字符串的长度
    property()>>【面向对象】
    type()>>判断参数的数据类型
    frozenset()>>返回一个冻结的集合,冻结后集合不能再添加或删除任何元素
    vars()>>打印当前所有的变量
    locals()>>在函数的内部执行,打印当前函数的所有的局部变量
    globals()>>无论在函数内部还是外部都打印全局的变量
    zip()>>函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表,只能是一一对应的关系

    l1 = [1,2,3,4]
    l2 = ['a','b','c','d']
    print(list(zip(l1,l2)))
    示例:

    Win a contest, win a challenge
  • 相关阅读:
    一些鲜为人知的编程真相
    一些鲜为人知的编程真相
    Ruby 1.9不会杀死Python
    Boost.Asio和ACE之间关于Socket编程的比较
    Effective C++第17条:要在单独的语句中使用智能指针来存储由new创建的对象
    Ruby 1.9不会杀死Python
    Boost智能指针——weak_ptr
    对象生死劫 - 构造函数和析构函数的异常
    Protocol Buffers:Google 的数据交换格式
    根据出生日期计算年龄
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/9276237.html
Copyright © 2020-2023  润新知