- 如果需要返回值,使用保留字return和返回值列表,函数可以没有return语句,函数体结束后,会将控制权返回给调用者。
- 函数不能直接运行,必须调用
- def<函数名>(<非可选参数列表>,<可选参数>,=<默认值>)
.
#n的阶乘,这里是4的阶乘
def fac(n):
s=1
for i in range(1,n+1):
s*=i
return s
print(fac(4))
输出结果为:
24
#return可以返回多个值
>>> a,b=3,4
>>> a
3
>>> b
4
在函数中这种赋值同样也存在
函数的作用域
局部变量
python的局部变量只在函数内部起作用,出了函数就不起作用了
def discounts(price,rate):
final_price = price * rate
return final_price
old_price = float(input("请输入原价:"))
rate = float(input("请输入折扣率:"))
new_price =discounts(old_price,rate)
print("打折后的价格是:", new_price)
输出结果为:
请输入原价:100
请输入折扣率:0.8
打折后的价格是: 80.0
如果我们想输出局部变量final_price,我们试一下
def discounts(price,rate):
final_price = price * rate
return final_price
old_price = float(input("请输入原价:"))
rate = float(input("请输入折扣率:"))
new_price =discounts(old_price,rate)
print("打折后的价格是:", new_price)
print(final_price)
输出结果为:
请输入原价:300
请输入折扣率:0.8
打折后的价格是: 240.0
NameError: name 'final_price' is not defined
显示报错说final_price 并没有被定义,像final_price,price,rate这些都是局部变量,一但出了函数就不发挥作用了
全局变量
- 全局变量指在函数之外定义的变量,在 程序执行全过程有效,全局变量在函数内部使用时,必须提前使用保留字global声明,语法如下:
global<全局变量>
n=2 #n是全局变量
def multiply(x,y=10):
global n
return x*y*n #使用全局变量n
s = multiply(99,2)
print(s)
输出结果为:
======================== RESTART: C:/python3.8/3.192.py ========================
396
- 当在函数内部,全局变量和局部变量定义相同时,没有使用保留字global声明也是局部变量.函数内部局部变量优先,函数外部只能使用全局变量。
n=2 #是全局变量
def multiply(x,y=10):
n =x*y
return n #此处不是全局变量
s = multiply(99,2)
print(s)
print(n) #不改变外部全局变量的值
输出结果为:
198
2
函数的递归
- 函数的形成:函数的自我调用
- python 函数的自我调用不是死循环,有上限,官方规定上限是1000
def fun():
print("你好,函数")
fun()
print(fun())
输出:
File "C:/python3.8/3.17.py", line 2, in fun
print("你好,函数")
RecursionError: maximum recursion depth exceeded while pickli
递归的应用
- 树形结构遍历——从根节点找到子节点——把每一个子节点当做根节点来找
- 我们操作系统的文件夹系统就是一个树形结构
- 使用递归来遍历“爱学习的me”这个文件夹—拿到"爱学习的me"这个文件夹和文件夹的名字
.
#求n的阶乘
def fac(n):
#递归终止条件
if n ==0:
return 1
#递归
res = fac(n-1)*n
return res
print(fac(5))
输出结果为:120