(函数)
函数就是把代码打包好的的不同形状的积木,到时可以直接调用以形成作品。之前使用的BIF就是python已经封装好的函数。
函数的定义:def function(x,y): 语句块
定义好以后,可以直接使用function()调用函数内容。
括号中的x和y是函数的参数,方便函数的书写;注意参数尽量不要太多,同时写好注释。
形参和实参:形参就是小括号里面的参数,实参是函数调用过程中传递进来的参数。
函数文档:与注释类似,用来描述函数的功能;与注释不同的是函数文档可以通过特殊属性__doc__获取,或者通过help()获取。
关键字参数:在传入实参时指定形参的变量名,防止因为顺序问题导致参数混乱。
默认参数:在函数定义时即对参数进行了赋值。
收集参数:在参数前面加上*,用来收集大量的参数并将其打包成一个元组。如果一个函数中有收集参数,建议将其他参数设置为默认参数,否则python会把其算为收集参数。当收集参数打包完成,需要调用时也需要用*进行解包。**是收集参数打包成字典,前面已经了解过了。
返回值:return,python可以动态确定函数类型,同时也可以返回不同类型的值。
变量的作用域:变量有全局变量和局部变量之称,全局变量是在函数外部定义,可以在全局调用;局部变量是在函数内部定义,出了这个函数就无效了。在函数内部修改全局变量是不会成功的。
global关键字:可以在将局部变量声明为全局变量。
内嵌函数:即在函数中嵌套函数,包含外部函数和内部函数。
闭包:是函数式编程的一个重要语法结构,即在内部函数中对外部作用域(不是全局)对变量进行引用,那么内部函数就称之为闭包。与全局变量和局部变量类似,内部函数也不可以修改外部函数的变量,如果需要修改需要使用关键字nonlocal,其用法和global一样。
Lambal表达式:创建匿名函数,直接定义并使用函数,其语法g=lambel x :2*x+1,调用时直接g(1)=3。其优点可以省下函数定义的过程,使得代码更加简洁;一般用于全局只需要调用一两次的函数。
BIF之filter:filter时一个过滤器函数,其有两个参数,第一个参数为none时,输出第二个参数中true的值;第一个参数为函数时,将第二个参数中的元素依次作为函数参数进行计算,返回结果为true 的输出。
BIF之map:map()在编程里面一般作映射来解释,其也有两个参数,将第二个参数带入第一个参数中,返回其计算结果。
递归:从原理上来说就是函数调用自身的一个过程,一定要注意设计好停止节点,否则会崩溃,如果卡住了,使用ctrl+c进行停止。
汉诺塔:汉诺塔是一个典型的递归模型——有三根柱子xyz,x上有n个大小不一,顺序排列的圆盘,需要将其移动到z上,且一次只能移动一个,大圆盘不能在小圆盘之上。可以将游戏分为三个步骤,1是将前n-1个盘子从x移到y上,确保大的在下;2是将剩下一个移到z上;3是将剩下n-1个盘子从y移到z上。然后出现像个新的问题上1和3怎么执行?那么我们可以将1分解成将x上的n-1个盘子通过z移到y上;将3分解成将y上的n-1个盘子通过x移动z上。通过这两个分解,又会得到相似的问题,所以这就明显符合递归的定义。算法如下:
def hanoi(n,x,y,z):
if n==1;
print(x,’—>’,z)
else
hanio(n-1,x,z,y)
print(x,’—>’,z)
hanoi(n-1,y,x,z)
n = int(input(‘输入汉诺塔的层数:’))
hanoi(n,’x’,’y’,’z’)
`