python函数参数
python使用def定义函数
根据函数的参数不同 可以区分为:
位置参数
该参数出现在函数的参数部分中 按序传递接收参数 默认写在函数定义的参数最前端
例:
输入三角形的三个边 以此来计算面积
def is_triangle(a,b,c):
if max(a,b,c)>a+b+c-max(a,b,c):
return False
else:
return True
def triangle_area(a,b,c):
print(f"输入的三边分别是 {a} {b} {c} ")
if is_triangle(a,b,c):
p=(a+b+c)/2
tare=(p*(p-a)*(p-b)*(p-c))**0.5
else:
return None
return tare
a,b,c=map(int,input("输入三边 逗号隔开").split(","))
print(triangle_area(a,b,c))
可以看到 函数参数对应的位置参数与传入参数一致 依次排开 当然 我们也可以指定参数的内容
比如:
triangle_area(c=9,a=11,b=8) #在这一传参过程中指定了对应参数的对应值
可以看到 对应参数的值并不是按序传递 而是根据参数名传递
默认值参数
在规定函数的参数时 可以赋予默认值以此来 避免繁琐的输入
(默认情况默认值参数在位置参数后面)
例:
求圆的面积
import math
#默认值参数
def area_circle(r,pi=math.pi):
print(f"半径是{r},pi是{pi}")
return pi*(r**2)
print(f"圆的面积是{area_circle(3):.2f}")
print(f"圆的面积是{area_circle(3,3.14):.2f}")
print(f"圆的面积是{area_circle(3,3.1415):.2f}")
当不传递值时 pi的值默认为math.pi
可变参数
有时会传递大量的参数 我们不能一个一个的将参数的值依次赋值 太麻烦了 可以采用可变参数 或者传递容器的方式来解决问题 可变参数实际上就是传递了一个元组tuple
默认位置在最后面 如果写在位置参数之前 那么后面的位置参数就变成了 命名关键字参数
例:
排序
def sort(*args):
args=list(map(int,args))
print("排序前",args)
for i in range(len(args)):
for j in range(i+1,len(args)):
if args[i]>=args[j]:
args[j],args[i]=args[i],args[j]
return args
print(f"排序结果是{sort(4,3,1,5,2,7,9)}")
在排序过程中一定要将元组改变成列表 因为元组是无法修改的 通过map函数将元组tuple压缩 然后将其改为一个列表 然后进行排序
传参也可以传递一个列表
args=[4,3,1,5,2,7,9]
print(f"排序结果是{sort(*args)}")
也可以排序
关键字参数
可变参数传递值无法区分 关键字参数就像是传递一个字典 对应的值会有自己的键
打印信息:
def print_info(**kwargs):
for k,v in kwargs.items():
print(f"键{k} :值:{v}")
print_info(name="无敌青菜侠",age="5",character="无敌难吃",gender="植物")
可以传递字典
列如:
dic={
"name":"渔网袜青菜",
"character":"又骚又难吃",
"gender":"植物",
}print_info(**dic)
命名关键字参数
在关键字参数中 无法确认用户的输入 ,命名关键字参数 规定必须输入的值 命名关键字参数也可以与默认值参数结合
例
def print_info(age,cla,*args,name,gender):
print(f"年龄:{age} 教室:{cla} 姓名:{name} 性别:{gender} 其它{args}")
print_info(18,"四年级",1,2,3,4,5,6,name="苹果",gender="水果")
参数传递时 必须补上 name="苹果",gender="水果" 否则无法执行成功 注意在args可变参数传递值时 必须要连续 否则会报错 位置参数,可变参数 一定在关键字参数前面
总结
排序:位置参数在最前面 默认值参数在位置参数后 可变参数又位于默认值参数后 最后是关键字参数