活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
…
CSDN21天学习挑战赛——day6 python的函数进阶知识
前面,我们提到了python关于函数的一些基本知识,包括函数的定义以及一些函数定义和调用的注意事项,今天来看一下关于函数的进阶知识。
一、函数的参数和返回值
我们在写或借鉴程序的时候可以发现,有的函数在调用的时候会写入一个或多个参数(括号里的东西);也有的函数没有一个参数输入;也有的函数不仅有输入的参数,还有返回值。前面我们提到过函数的返回值的作用是让程序员能直观的看到函数的运行结果(它可以是算术运算结果,亦或是一串运行状态(error/ok))。参数则是用来起数据传递的作用。下面我们通过几个函数来加深一下函数的参数与返回值的概念:
1)两数的交换:
def nums(num1,num2):
num1 = num1+num2
num2 = num1-num2
num1 = num1-num2
return num1
return num2
a = 10
b = 20
nums(a,b)
print("a的值为:%d b的值为:%d" % (a,b))
这里我们运行程序时,可以发现,a和b的值并未能交换,因为每次return只能返回一个返回值。因此,我们写程序时,需要注意。我们可以更改程序:
def nums(num1,num2):
num1 = num1+num2
num2 = num1-num2
num1 = num1-num2
print("a的值为:%d b的值为:%d" % (num1,num2))
a = 10
b = 20
nums(a,b)
这时,程序正常运行,a和b的值正常交换。当然,我们也可以采用元组的方法简化程序:
def nums(num1,num2):
num1,num2 = num2,num1
print("a的值为:%d b的值为:%d" % (num1,num2))
a = 10
b = 20
nums(a,b)
这时,a和b的值正常交换。同时,我们也补充一下函数参数的一些概念:
1)可变参数和不可变参数:
不可变参数,即不论参数的数据类型是可变或不可变的,在函数内部对参数使用赋值语句,则不会改变或影响外部实参。
可变参数,如果参数的数据类型是可变的,如果在函数内部使用方法改变了参数的值,则会影响外部数据。
2)多值参数:当函数需要处理多个参数时,可以采用这种方法。
常用的多值参数有:在参数名前加一个表示可以接受元组。
在参数名前加两个表示可以接受字典。
3)缺省参数:函数定义时,给某个参数一个默认值,这种拥有默认值的参数称为缺省参数。
这里的默认值是常见的值,这样的目的是为了简化函数。一般缺省参数的位置位于所有参数最后不能放错位置。
二、函数的递归
这是函数中比较高级的操作,但是有点难受的是,一旦函数的出口没搞好,则会陷入死循环。其实,递归的本质就是函数自己调用自己,只是这种操作会大量损失运行空间。直接上程序示例,累加:
def addplus(num):
if num == 1:
return 1
adds = addplus(num-1)
return num + adds
a = 4
nums = addplus(a)
print("%d累加的值为:%d" % (a,nums))
其实,这里的本质就是4+3+2+1,只要在函数运行时,num每进入函数一次,都会减一,直到为1时,结束函数运行。
结语
今天没有结语。。。。。。