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可变参数传递值时 必须要连续 否则会报错 位置参数,可变参数 一定在关键字参数前面

总结

排序:位置参数在最前面 默认值参数在位置参数后 可变参数又位于默认值参数后 最后是关键字参数

posted @ 2024-01-12 22:52  f0r9  阅读(3)  评论(0编辑  收藏  举报  来源