找回密码
 会员注册
查看: 23|回复: 0

Python基础-自定义函数和匿名函数

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71922
发表于 2024-9-7 09:22:15 | 显示全部楼层 |阅读模式
🤵‍♂️个人主页:@艾派森的个人主页✍🏻作者简介:Python学习者🐋希望大家多多支持,我们一起进步!😄如果文章对你有帮助的话,欢迎评论💬点赞👍🏻收藏📂加关注+Python3函数函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。前面我们用过了很多python内置函数,比如print(),input()等。但你也可以自己创建函数,这被叫做用户自定义函数。 ython函数的分类Python函数分为如下几类:1.内置函数我们前面使用的str()、list()、len()等这些都是内置函数,可以拿来直接使用2.标准库函数我们可以通过import语句导入库,然后使用其中定义的函数3.第三方库函数Python社区也提供了很多高质量的库,下载安装这些库后,也是通过import语句导入,然后可以使用这些第三方库的函数4.用户自定义函数用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数。定义一个函数你可以定义一个由自己想要功能的函数,以下是简单的规则: -函数代码块以def关键词开头,后接函数标识符名称和圆括号()。-任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。-函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。-函数内容以冒号:起始,并且缩进。-return[表达式]结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回None。"""Python定义函数使用def关键字,一般格式如下:def函数名([参数列表]):'''文档字符串'''函数体/若干语句"""defsay_hello():print('Helloworld!')say_hello()'运行运行#带参数的函数defadd(a,b,c):'''完成三个数的加法,并返回他们的和'''sum=a+b+cprint(f"{a}、{b}、{c}三个数的和是:{sum}")returnsumresult=add(10,20,30)print(result)'运行运行 参数以下是调用函数时可使用的正式参数类型: -位置参数-关键字参数-默认参数'''位置参数位置参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。'''defself_introduction(name,age):#name和age叫做形参print(f'我叫{name},今年{age}岁了!')self_introduction('艾派森',10)#'艾派森'和'10'叫做实参'运行运行'''关键字参数关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。'''defself_introduction(name,age):print(f'我叫{name},今年{age}岁了!')self_introduction(name='艾派森',age=18)self_introduction(age=20,name='艾派森')'运行运行 '''默认参数调用函数时,如果没有传递参数,则会使用默认参数。'''defself_introduction(name,age,school='家里蹲大学'):print(f'我叫{name},今年{age}岁了,在{school}上学!')self_introduction(name='艾派森',age=18)self_introduction(name='艾派森',age=18,school='哈佛大学')'运行运行 #默认参数必须放在最后面,否则会报错defself_introduction(school='家里蹲大学',name,age,):print(f'我叫{name},今年{age}岁了,在{school}上学!')匿名函数  ython使用lambda来创建匿名函数。 所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。 -lambda只是一个表达式,函数体比def简单很多。-lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。-lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。'''lambda函数的语法只包含一个语句,语法如下:lambda[arg1[,arg2,.....argn]]:expression'''f=lambdax:x*xprint(f(5))'运行运行#匿名函数传入多个参数,也可以使用关键词传参f=lambdax1,x2:x1+x2print(f(10,20))print(f(x1=10,x2=20))'运行运行 eval()函数功能:将字符串str当成有效的表达式来求值并返回计算结果。 注:eval函数会将字符串当做语句来执行,因此会被注入安全隐患。 比如:字符串中含有删除文件的语句,那就麻烦大了。因此,使用时候,要慎重!!! 变量的作用域(全局变量和局部变量) 变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。 全局变量:1.在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。2.全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。3.要在函数内改变全局变量的值,使用global声明一下局部变量:1.在函数体中(包含形式参数)声明的变量。2.局部变量的引用比全局变量快,优先考虑使用3.如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量#【操作】全局变量的作用域测试n=50#全局变量deff():globaln#如果要在函数内改变全局变量的值,增加global关键字声明print(n)#打印全局变量n的值n=100f()print(n)#n已经由50经过函数f转变为100'运行运行#【操作】全局变量和局部变量同名测试a=50deff():a=10#同名的局部变量print(a)f()print(a)#a仍然是50,没有变化'运行运行递归函数1.递归(recursion)是一种常见的算法思路,在很多算法中都会用到 2.递归的基本思想就是“自己调用自己” 递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。 每个递归函数必须包含两个部分: -终止条件:表示递归什么时候结束。一般用于返回值,不再调用自己。-递归步骤:把第n步的值和第n-1步相关联。注:递归函数由于会创建大量的函数对象、过量的消耗内存和运算能力。在处理大量数据时,谨慎使用。#计算阶乘:根据用户输入的整数n,计算并输出n的阶乘值。deffact(n):#计算阶乘ifn==0:return1else:returnn*fact(n-1)num=eval(input("请输入一个正整数:"))print(fact(num))'运行运行 '''斐波那契数列(1、1、2、3、5、8、13、21、34、……)兔子繁殖问题:在700多年前,意大利著名数学家斐波那契在《算盘全集》中提到这样一个问题:一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,第n个月有多少对兔子?F(1)=1F(2)=1F(3)=F(1)+F(2)=1+1=2F(4)=F(2)+F(3)…………F(N)=F(N-2)+F(N-1)'''deffab(n):ifn
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 19:23 , Processed in 0.928605 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表