zoukankan      html  css  js  c++  java
  • python 吐血总结 【函数高级小结】

    函数高级

    闭包

    def fun1():
        x = 520
        def fun2():
            print(x)
    
    x = 1200
    fun1()
    print(x)

    # 内部函数包含对外部作用于而非全局作用域的引用

    装饰器

    不改变函数体的代码,并且不改变函数的调用方式,为函数添加功能,他本质就是一个函数附加被装饰器的函数里面。
    def login():
        return True
    
    
    def login_deco(func):
        def wrapper(*args,**kwargs):
            pre_login = login()
            if pre_login:
           # 调用shopping res
    = func(*args,**kwargs) return res return wrapper @login_deco def shopping(): pass

    装饰器进阶

    def jackson(x,y):
        def login_deco(func):
            print(x,y)
            def wrapper(*args,**kwargs):
                pre_login = login()
                if pre_login:
                    res = func(*args,**kwargs)
                    return res
            return wrapper
        return login_deco
    
    # shopping = login_deco(shopping)
    @jackson(1,2)
    def shopping():
        pass

    迭代器

    1、可迭代对象:具有__iter__方法的对象(Python中一切皆是对象)

    2、迭代器对象:具有__iter__和__next__方法

    注意:迭代器一定是可迭代对象、可迭代对象不一定是迭代器对象

    生成器

    自定义的迭代器、函数内部使用yield关键字、有yield关键字的函数只要调用、这个调用后的函数就是生成器。
    
    yield:接收函数返回值,但是会继续执行函数体代码
    
    return:接收函数返回值,但是会终止函数
    def f1():
        # yield是接收函数返回值,但是会继续执行函数体代码
        yield 1
        yield 2
        yield 3
    
    g = f1()
    # g就是一个迭代器
    
    for i in g:
        print(i)

    递归

    递归本质上就是函数调用函数本身,必须有结束条件,并且在递归的过程中,问题的规模必须都不断缩小
    #  斐波那契数列
    # 从第三项开始,每一项都等于前两项之和。 前两项可以写成 n-1 n-2
    # 0, 1, 1, 2, 3, 5, 8, 13
    
    def f(n):
        if n <=1:
            return n
        else:
            return (f(n-1) + f(n-2))

    for i in range(term):
      print(f(n))
    # 二分法
    def find_num(num,lis):
    
        if len(lis) == 1 and lis[0] != num:
            print('没找到')
            return
    
        mid_ind = int(len(lis) / 2)  # 中间索引
        mid_num = lis[mid_ind]  # 中间值
      # 左边
        if num < mid_num:
            lis = lis[:mid_ind]
            find_num(num,lis)
      # 右边
    elif num > mid_num: lis = lis[mid_ind + 1:] find_num(num, lis) else: print('find') lis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] find_num(20,lis)

    匿名函数

    匿名函数使用一次就失效了,一般不单独使用,于内置的各种函数连用
    lambda  参数 : 逻辑代码
    def sum(x,y):
          return x+y
    
    p = lambda x,y:x+y
    print(p(4,6))
    这里p就是一个函数,一个比较帅的函数,优雅的函数。

    其实lambda返回值是一个函数的地址,也就是函数对象。
  • 相关阅读:
    Windows 8.1更新变化
    Hibernate Criterion
    HDU 2795 Billboard(宣传栏贴公告,线段树应用)
    解决ccSvcHst.exe CPU占用超50%的问题,及其缘由
    设计模式之解释器模式(Interpreter)摘录
    中国软件开发project师之痛
    【翻译】ExtJS vs AngularJS
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    linux概念之内存分析
    java实现第四届蓝桥杯带分数
  • 原文地址:https://www.cnblogs.com/jackson669/p/13020006.html
Copyright © 2011-2022 走看看