Python学习超简单第二弹:函数
Python快乐学习、快乐成长
- 函数
- 1、函数的定义与调用
- 2、形参和实参
- 2.1 形参
- 2.2 实参
- 3、默认参数和关键字参数
- 3.1 默认参数
- 3.2 关键字参数
- 4、不定长参数
- 5、拆分参数列表
- 6、返回值
- 7、import模块
- 8、全局变量__name__和系统模块
- 8.1全局变量
- 8.1系统模块
- 9、 from...import
- 10、包
- 11、猴子补丁和第三方模块获取安装
- 11.1猴子补丁(Monkey Patch)
- 11.1第三方模块
- 12、变量的作用域和局部变量
- 13、全局变量和global关键字
- 14、nonlocal关键字
- 15、递归函数
- 16、高阶函数和lambda函数
- 17、闭包
- 18、装饰器
- 结尾
函数
1、函数的定义与调用
定义函数,即根据函数的输入、输出和数据处理完成函数代码的编写。定义函数只是规定了函数会执行什么操作,但并不会真正去执行。
调用函数,即真正去执行函数中的代码,是指根据传入的数据完成特定的运算,并将运算结果返回到函数调用位置的过程。
defCalcNum():#定义名字为calcNum的函数CalcNum()#调用函数CalcNum2、形参和实参
2.1 形参
形参的全称是形式参数,即定义函数时函数名后面的一对小括号中给出的参数列表。
defCalcNum(i1,i2):#定义名字为calcNum的函数2.2 实参
实参的全称是实际参数,即在调用函数时函数名后面的一对小括号中给出的参数列表。
CalcNum(i3,i4)#调用函数CalcNum3、默认参数和关键字参数
3.1 默认参数
函数的默认参数就是缺省参数,即当调用函数时,如果没有为某些形参传递对应的实参,则这些形参会自动使用默认参数值。
defPersonInfo(name,country='中国'):#参数country的默认参数值为'中国’PersonInfo('ZHANG')#这里没有给country传实参值,但因为有默认参数所以不会出错PersonInfo('Zhang','美国')#给country传了实参,则不再使用默认参数3.2 关键字参数
在调用函数时,除了前面那种通过位置来体现实参和形参的对应关系的方法(即位置参数),还有一种使用关键字参数的方法,其形式为“形参=实参”。
defPersonInfo(name,chineselevel='良好',country='中国')PersonInfo(country='美国',chineselevel='一般',name='John')#正确示例PersonInfo(name='David','良好','美国')#即第一个参数使用了关键字参数形式、后两个参数使用了位置参数形式,则系统会报错4、不定长参数
不定长参数,即在调用函数时可以接收任意数量的实参,这些实参在传递给函数时会被封装成元组(位置参数)或字典(关键字参数)形式。
def 函数名([普通形参列表,] *不定长参数名 [,普通形参列表]):
函数体
或
def 函数名([普通形参列表,]**不定长参数名):
函数体
提示:“*不定长参数名” 表示这个不定长参数对应的是一组位置参数;而 “**不定长参数名” 表示这个不定长参数对应的是一组关键字参数。
defPersonInfo1(name,*args):#定义函数PersonInfo1defPersonInfo2(name,**args):#定义函数PersonInfo2#使用PersonInfo1('李晓明','良好','中国')PersonInfo2('李晓明',中文水平='良好',国家='中国')#打印姓名: 李晓明 ,其他:('良好','中国')姓名: 李晓明 ,其他:{'中文水平':'良好','国家':'中国'}5、拆分参数列表
如果一个函数所需要的参数已经存储在了列表、元组或字典中,则可以直接从列表、元组或字典中拆分出来函数所需要的这些参数。
defPersonInfo(name,chineselevel,country):#定义函数PersonInfod={'country':'中国','chineselevel':'良好','name':'ZHANG'}PersonInfo(**d)提示:**d的作用是把字典d中的所有元素拆分出来作为PersonInfo的实参,即等价于PersonInfo(country=‘中国’, chineselevel=‘良好’, name=‘ZHANG’)
6、返回值
return语句
defCalcNum(i1,i2):returni1*i2#通过return语句将计算i1和i2的乘积7、import模块
当要使用一个模块中的某些功能时,我们可以通过import方式将该模块导入。
import module1
import module2
…
import moduleN
或
import module1,module2, …, moduleN
新建calc.py:
defCalcNum(i1,i2):returni1*i2新建main.py导入模块
importcalc#导入calc模块calc.CalcNum(5,10)#调用calc模块中的CalcNum函数,计算乘积8、全局变量__name__和系统模块
8.1全局变量
每个模块中都有的一个全部变量__name__。
name__的作用是获取当前模块的名称,如果当前模块是单独执行的,则其__name__的值就是__main;否则,如果是作为模块导入,则其__name__的值就是模块的名字。
calc.py文件:
print(__name__)#输出:__main__main.py文件:
importcalcprint(__name__)#输出:calc模块单独运行和作为模块导入时其__name__的值是不同的;
8.1系统模块
可以直接导入系统提供的模块,使用其中的功能。
importsys#导入系统提供的sys模块9、 from…import
除了使用import将整个模块导入,也可以使用from import将模块中的标识符(变量名、函数名等)直接导入当前环境,这样我们在访问这些标识符时就不再需要指定模块名。
语法格式:
from 模块名 import 标识符1, 标识符2, …, 标识符N
fromcalimportCalNum#导入cal 模块中的CalNumfromcalimport*#导入cal 模块中所有标识符10、包
如果要使用sound包的effects子包的echo模块,则可以通过下面方式导入:
importsound.effects.echo也可以使用from import方式导入包中的模块,如:
fromsound.effectsimportecho使用from import也可以直接导入模块中的标识符,如:
fromsound.effects.echoimportechofilter11、猴子补丁和第三方模块获取安装
11.1猴子补丁(Monkey Patch)
猴子补丁是指在运行时动态替换已有的代码,而不需要修改原始代码。
例如,在使用第三方模块时,模块中的某些方法可能无法满足我们的开发需求。此时,我们可以在不修改这些方法代码的情况下,通过猴子补丁用一些自己编写的新方法进行替代,从而实现一些新的功能。
11.1第三方模块
第三方模块的获取与安装有多种方法,其中最推荐的一种方法是使用pip工具;
命令格式:
pip install 模块名称
为了加快安装包下载速度,可以指定从国内镜像完成安装包的下载和安装,如将前面安装numpy的pip命令改为:
pip install numpy -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com
12、变量的作用域和局部变量
按照作用域的不同,Python中的变量可分为局部变量和全局变量。
局部变量:在一个函数中定义的变量就是局部变量(包括形参),其作用域是从定义局部变量的位置至函数结束位置。
13、全局变量和global关键字
在所有函数外定义的变量就是全局变量,其在所有函数中都可以使用。
在一个函数中使用global关键字,可以声明在该函数中使用的是全局变量、而非局部变量。
14、nonlocal关键字
在Python中,函数的定义可以嵌套,即在一个函数的函数体中可以包含另一个函数的定义。通过nonlocal关键字,可以使内层的函数直接使用外层函数中定义的变量。
15、递归函数
递归函数是指在一个函数内部通过调用自己来完成一个问题的求解。
deffac(n):#定义函数facifn==1:#如果要计算1的阶乘,则直接返回1(结束递归调用的条件)return1returnn*fac(n-1)#将计算n!分解为n*(n-1)!print(fac(5))#调用fac函数计算5的阶乘并将结果输出到屏幕16、高阶函数和lambda函数
高阶函数是指把函数作为参数的一种函数。
defFunAdd(f,x,y):#定义函数FunAddreturnf(x)+f(y)#用传给f的函数先对x和y分别处理后,再求和并返回lambda函数也称为匿名函数,是一种不使用def定义函数的形式,其作用是能快速定义一个简短的函数。
lambda [参数1[, 参数2, …, 参数n]]: 表达式
defFunAdd(f,x,y):#定义函数FunAddreturnf(x)+f(y)#用传给f的函数先对x和y分别处理后,再求和并返回print(FunAdd(lambdax:x**2,3,-5))#调用函数FunAdd,计算3的2次方+(-5)的二次方17、闭包
如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了闭包。
18、装饰器
利用装饰器,可以在不修改已有函数的情况下向已有函数中注入代码,使其具备新的功能。
结尾
记录自己的快乐学习日志,也祝贺观看到这的小伙伴早日学有所成,财富自由💰💰。
记得点赞👍、收藏👋呀!!!
