Python函数基础-函数调用,定义,参数,递归

时间:2023-03-08 20:34:28
Python函数基础-函数调用,定义,参数,递归

Python内置了很多函数供调用,eg

求绝对值函数abs()

>>>abs(-1)
1
>>>abs(1)

求和函数sum(),sum(iterable,start),第一个参数必须是可以迭代对象,listtuple。

>>>sum([1,2,3],4)
10
>>>sum((1,2,3),4)
10

类型转换函数,int(),float(),str(),bool()

>>>int(12.34)
12
>>>float('12.34')
12.34
>>>str(123)
''
>>>bool(1)
Ture
>>>bool('')
False

这些内置函数都可以指向我们定义的变量,使用时直接调用变量名即可。

定义函数:要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

def s_su(i):
if x == 5:
return x*x
   elif x == 6:
     return x+x
 return >>>s_su(5)
>>>s_su(6)
>>>s_su(7)
5
error
None#返回为空不显示

函数的参数

在定义s_su(i)这个函数的时候,传入了一个形参i,并不是真正的变量,在调用才传入了实参5,6,7这些;

函数并不指定为一个参数,可以有很多,但是在一个函数中最好不要定义太多  这样容易弄混淆。

比如要计算1*2*3*4*5的值,一个参数是可以实现的

程序1:像这样:

def calc(x):
s = 1
while x > 0:
s = s * x
x = x - 1
return s
>>>calc(5)
120

但是两个参数会让程序更加简单,比如计算一个数的平方 可以return x*x,但是很多之后写出来表达式很麻烦

def calc(x,y)
s = 1
while y > 0:
y = y-1
s = s * x
return s
>>>calc(2,2)
4
>>>calc(3,3)
27

还可以把参数设为默认值,计算固定的数字平方值

def calc(x,y=2)
s = 1
while y > 0:
y = y-1
s = s * x
return s
>>>calc(5)
25

一个函数可以调用其他函数,同时也可以调用自身,调用自身成为递归函数

像程序1也可以实现递归

但是调用自身就变得更简洁了

一开始代码是这样写的,

def calc(x):
return x * calc(x-1)

觉得没什么问题,运行时一直报错RecursionError: maximum recursion depth exceeded

--->>>调用超过最大深度,Python默认最大深度是995次

然后才明白不加上限定条件的话 x的值会取负数导致超过最大递归深度

修改一下

def calc(x):
if x == 1:
return 1
return x * calc(x-1)

限定了递归到x=1结束调用,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

尾递归: