Python函数的调用及参数传递 lambda

您所在的位置:网站首页 python接收外部参数 Python函数的调用及参数传递 lambda

Python函数的调用及参数传递 lambda

2023-04-14 19:37| 来源: 网络整理| 查看: 265

函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用,以此达到一次编写,多次调用的目的

使用函数可以实现代码的重用性

Python中函数定义使用def关键字 def 函数名称(参数列表): # 函数名不能以数字开头,单词之间用下划线连接 函数体 [return 返回值列表] # return可选 函数调用 通过函数名称进行调用函数 对函数的各个参数进行实际的赋值 函数执行 使用实际参数参于函数功能的实现 函数返回结果 函数执行结束后,如果使用return进行返回结果,则结果被返回到函数的调用处 如果函数没有返回值,则return可以省略 函数如果返回1个值,则直接返回原类型 函数可以返回多个值,结果为元组 函数的参数传递 形式参数:函数定义处的参数 实际参数:函数调用处的参数 位置参数 调用时的参数个数和顺序必须与定义的参数个数和顺序相同,可与关键字参数传参结合使用,但要放在关键字参数前面,否则程序会报错 关键字参数 函数调用时,使用“形参名称=值”的方式进行传参,传递参数顺序可以与定义时参数的顺序不同,参数的名称必须与函数定义时定义的参数名称相同 默认值参数 函数定义时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值 注意事项 所有位置参数必须出现在默认参数前,包括函数定义和调用 如果需要指定某些参数必须以关键字传参,则在位置形参和关键字形参中加入星号(*) 如果函数调用时可用位置参数和关键字参数,建议使用关键字参数 如果同时存在位置参数和默认值参数,默认值参数放后,否则报错 【函数定义时】 可变参数 个数可变的位置参数 函数定义时,在参数前加一个星(*para),只能定义一个 如果函数调用时输入了一个列表,只要在列表前加一个“*”,程序会自动解包,将列表中的每个参数转化为位置实参 函数调用时可接收任意个数的实际参数,并放到一个元组中 个数可变的关键字参数 函数定义时,在参数前加两个星(**para),只能定义一个 可以在传参的时候传一个字典,在字典前加“**”,程序会自动解包,将字典中的每对键值对转化为关键字实参 在函数调用时可接收任意多个“参数=值”形式的参数,并放到一个字典中 注意事项 并且同时使用para和**para时,必须para参数列要在**para前 变量的作用域 程序代码能访问该变量的区域根据变量的有效范围可分为 局部变量 在函数体内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会就成全局变量 全局变量 函数体外定义的变量,可作用于函数内外 递归函数 如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数 递归的组成部分 递归调用与递归终止条件,使用if...else函数来指明调用和终止条件 递归的调用过程 每递归调用一次函数,都会在栈内存分配一个栈帧, 每执行完一次函数,都会释放相应的空间 递归的优缺点 缺点:占用内存多,效率低下 优点:思路和代码简单 匿名函数lambda https://zhuanlan.zhihu.com/p/58579207 是指一类无需定义标识符(函数名)的函数或子程序。所谓匿名函数,通俗地说就是没有名字的函数,lambda函数没有名字,是一种简单的、在同一行中定义函数的方法。 lambda函数一般功能简单:单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。 lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。 lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的运算结果就是函数的返回值。 lambda函数实际生成了一个lambda对象。 lambda表达式的基本语法如下: lambda arg1,arg2,arg3… : arg1/arg2/arg3为函数的参数(函数输入),表达式相当于函数体,运算结果是表达式的运算结果。 例如: lambda x, y: xy;函数输入是x和y,输出是它们的积xy lambda:None;函数没有输入参数,输出是None lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算) lambda **kwargs: 1;输入是任意键值对参数,输出是1 #测试lambda函数 f=lambda a,b,c,d:a*b*c*d print(f(1,2,3,4)) #相当于下面这个函数 def test01(a,b,c,d): return a*b*c*d print(test01(1,2,3,4)) g=[lambda a:a*2,lambda b:b*3] print(g[0](5)) #调用 print(g[1](6)) 由于lambda语法是固定的,其本质上只有一种用法,那就是定义一个lambda函数。在实际中,根据这个lambda函数应用场景的不同,可以将lambda函数的用法扩展为以下几种: 将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。 例如,执行语句add=lambda x, y: x+y,定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。例如,执行add(1,2),输出为3。 将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。 例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambda x:None。这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。例如,执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。 将lambda函数作为参数传递给其他函数。 函数的返回值也可以是函数。例如return lambda x, y: x+y返回一个加法函数。这时,lambda函数实际上是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数。对应的,将包含嵌套函数的函数称之为外部函数。内部函数能够访问外部函数的局部变量,这个特性是闭包(Closure)编程的基础,在这里我们不展开。 部分Python内置函数接受函数作为参数,典型的此类内置函数有这些: filter函数:此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。sorted函数:此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。map函数:此时lambda函数用于指定对列表中每一个元素的共同操作。例如:map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。reduce函数 此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。另外,部分Python库函数也接收函数作为参数,例如gevent的spawn函数。此时,lambda函数也能够作为参数传入。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3