Python语法day3-函数相关

Python语法day3-函数相关

  1. 函数的作用意义

    方便代码重用;分解任务简化程序逻辑;使代码更加模块化
  2. 函数的定义

    def 函数名(参数1,参数2,.....):
    	函数体
    	注意缩进
    	Python中使用缩进标注同一代码块
    	*参数,表示函数以元组的形式接受传进来的数据
    	**参数,表示函数以字典的形式接受传进来的数据
    
  3. 参数的拆包与装包

    拆包:将集合参数分解成单独的个体,称为拆包;
    装包:将传递进来的参数包装成一个集合,称为装包;
  4. 函数的返回值

    return 你要返回的值
    如果要返回多个元素,需要将其包装成一个集合,或者元组,或者字典,返回后进行拆包就可以了;
  5. 偏函数

    概念:很多多参数函数大多数场景下大部分的参数可能不要改变,为了简便操作,我们重新定义一个新函数,指定需要使用的函数的某个参数为某个固定的值,这个新函数就称为“偏函数”,下面代码中test2 就是test的偏函数;
    def test(a,b,c,d):
    	return a+b+c+c
    def test2(a,b,c,d = 2)
    	test(a,b,c,d)
    test2(a,b,c)
    	
    #还可以使用系统函数来创建偏函数
    import functools
    test2 = functools.partial(test, d = 2)
    test2(a,b,c)
    
  6. 高阶函数

    概念:当一个函数A的参数,就收的是另一个函数时,则把这个函数A称为是“高阶函数”,比如下图中的sorted函数接受了getkey这个函数为参数,那么sorted就是高阶函数;
    l =[{"a":"aa", "b":24},{"a":"ab", "b":21},{"a":"ba", "b":64}]
    def getkey(x):
    	return x["a"]
    sorted(l, key = getkey)
    
  7. 返回函数

    概念:函数内部的返回值是另外一个函数;
    def f(flag):
    	def f1(a,b,c)
    		return a+b+c
    	def f2(a,d,c)
    		return a-b+c
    	if flag == "+"
    		return f1
    	else
    		return f2
    		
    result = f("+")
    num = result(1,2,3)
    
  8. 匿名函数

    概念:没有名字的函数;
    语法:lambda 参数1,参数2,…:执行语句(执行语句只能有一句)
    #使用方法一:
    res = (lambda x,y : x+y)(1,2)
    print(res)
    
    #使用方法二:
    newFunc = lambda x,y : x+y
    res = newFunc(1,2)
    print(res)
    
  9. 闭包

    概念:函数嵌套的基础上,内层函数以及内层函数引用的外层变量整体称为“闭包”,下面案例中,inFunc(a,b)函数整体使用了外部函数的参数/变量,那么它整体就称为“闭包”;
    #案例1
    def outFunc(a,b)
    	def inFunc(a,b)
    		print(a+b)
    #案例2
    def outFunc()
    	a = 10
    	def inFunc()
    		nonlocal a
    		print(a)
    #注意事项
    1.若要在闭包内修改外部变量,需要使用nonlocal声明,否则为新变量定义
    
  10. 装饰器

    概念:在函数名及函数体不改变的前提下,为函数附加一些额外的代码;装饰器是一种设计模式,只要满足在不修改原本函数的基础上,增加额外功能就可以称为装饰器;
    在Python中可以直接在要装饰的函数之前使用“@”后面加上要装饰函数;
  11. 生成器函数

    概念:是一种特殊的迭代器(抽象层次更高);生成器只会遍历一次;遇到return语句会抛出迭代器停止异常;
    创建方式:
    1.把列表推导式的[]换成():
    l  = (i for i in range(1,100) if i % 2 == 0)
    for i in l:
        print(i)
    
    2.生成器函数:
    #函数中要包含yield语句
    #函数执行的结果就是一个生成器
    def test():
        print("xxx")
        for i in range(1, 100):
            yield i
            print(i, "+yield")
    g = test()
    print(next(g))
    print(next(g))
    
    产生数据的方式:
    通过访问迭代器的方式访问数据,三种方式:next(生成器), 生成器.-next-()和for in等三种方法;
    send(指定上一次挂起的yield语句的返回值)函数:
    第一次调用时要传一个None进去;
    相比于生成器.-next-(),send(参数)语句可以额外传递一个值给上一次操作被挂起的yield语句;
    关闭生成器:
    生成器.close();
    停止的原理是将生成器移动到最后一个来实现移动停止;

猜你喜欢

转载自blog.csdn.net/qq_35819160/article/details/84451433