本文为 Python 学习笔记,讲解函数。欢迎在评论区与我交流👏
文章目录
函数的创建和调用
demo:
def calc(a, b):
c = a + b
return c
result = calc(10, 20)
print(result)
函数的参数传递
函数调用的参数传递
位置实参
def calc(a, b):
c = a + b
return c
result=calc(10, 20)
print(result)
关键字实参
res=calc(b=10, a=20)
print(result)
函数调用的参数传递内存分析图
因为 Python 中给变量赋值是让变量指向值的地址,因此在函数结束回收变量空间时,对局部变量的修改会消失:
def fun(arg1, arg2):
print('arg1', arg1)
print('arg2', arg2)
arg1=100
arg2.append(10)
print('arg1', arg1)
print('arg2', arg2)
return
n1=11
n2=[22, 33, 44]
print('n1', n1)
print('n2', n2)
fun(n1, n2)
print('n1', n1)
print('n2', n2)
输出结果:
如果是不可变对象,在函数内修改不会影响实参的值,arg1 修改为 100,不会影响 n1 的值
如果是可变对象,在函数内修改会影响实参的值,arg2 修改为 append(10),会影响到 n2 的值
函数的返回值
如果函数返回值为多个,则返回元组
函数的参数定义
函数定义默认值参数
print 源码定义:
这里 end
为 \n
换行,因此 print
默认换行。
个数可变的位置参数
定义函数时无法事前确定实参个数。使用 *
定义,结果为元组:
print
函数也有该参数,因此 print
中可输出任意多的值。
个数可变的位置参数在一个函数中只能有一个。下面的代码会报错:
个数可变的关键字参数
定义函数时无法事先确定关键字实参个数,使用 **
定义,结果为字典:
个数可变的关键字参数也只能有一个:
一个函数中同时有个数可变的关键字形参和个数可变的位置形参时,个数可变的位置形参要放在个数可变的关键字形参之前:
def fun2(*args1, **arg2):
pass
函数的参数总结
将序列中的每个元组都转换为位置实参:
def fun(a, b, c):
print('a=', a)
print('b=', b)
print('c=', c)
fun(10, 20, 30)
lst=[11, 22, 33]
fun(*lst)
将字典中的每个键值对都转换为关键字实参:
dic={'a':111, 'b':222, 'c':333}
fun(**dic)
*
强制后面的参数只能使用关键字参数传递 :
def func4(a, b, *, c, d):
print('a=', a)
print('b=', b)
print('c=', c)
print('d=', d)
# func4(10, 20, 30, 40) # 报错
func4(10, 20, c=30, d=40)
变量的作用域
局部变量使用 global
定义变为全局变量:
def fun():
global age
age=20
fun()
print(age)
递归函数
def fac(n):
if n==1:
return 1
else:
res=n*fac(n-1)
return res
print(fac(6))
总结
有用的话点个赞加关注吧 😉