读廖雪峰的 Python 教程小结--------Python函数

本文详细介绍了Python函数中的五种参数类型:位置参数、默认参数、可变参数、关键字参数及命名关键字参数。通过实例展示了每种参数类型的使用方法及其特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实Python的函数不难,重点不是在函数的调用,和函数的定义。我觉得重点在与定义函数的时候定义函数参数
主要分:
1. 位置参数
2. 默认参数
3. 可变参数
4. 关键字参数
5. 命名关键字参数


位置参数,就是普通的函数的定义啊

    def abs(x):
        if x>0:
            return x
        else:
            return -x


    def max(x , y):
        if x>y:
            return x
        else:
            return y

默认参数,给某个参数给上默认值

但是有几点需要注意的:

  1. 必选参数在前,默认参数在后,否则Python的解释器会报错;
  2. 是如何设置默认参数。当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
    def power(x , n=2):
        i=0
        sum=1
        while i>n:
            sum = sum*x
        return sum

当有多个默认参数的时候,调用的时候要按照默认参数的顺序调用,当然也可以不按照顺序,但是调用的时候就要做一些改变
比如:

    def setStudent(name , age=8 , city="Guangzhou"):
        print("name:%s" % name)
        print("age :%s" % age)
        print("city:%s" % city)

    >>>setStudent("KIM")
    ....
    ....
    >>>setStudent("KIM" , 9 , "Shanghai")
    ....
    ....
    >>>setStudent("KIM" , city="Beijing") #跳过了age

最后要注意的是:默认参数必须指向不变对象!!!


可变参数,就是参数是不定的,你可以给任意的参数数量

    #只需要在参数前加上一个*,就变成可变参数了
    #在函数内部,参数numbers接收到的是一个tuple
    #即是numbers是一个tuple(数组)
    def max(*numbers):
        max=0
        for n in numbers:
            if n > max:
                max = n
        return max

调用方法也有几种:
Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去

    >>>max(5,6,9,7)
    ...
    ...
    >>>L=[1,2,3,4]
    >>>T=(2,3,4,5)
    >>>max(*L)
    ...
    ...
    >>>max(*T)
    ...
    ...

关键字参数

关键字参数其实和可变参数差不多,只不过可变参数是把参数自动组装为一个tuple,而关键字参数在函数内部自动组装为一个dict

  • 可变参数———–tuple
  • 关键字参数——–dict

在参数前面家两个*,就是关键字参数
当然我们调用的时候,传入参数的形式也是以键值对的方式传入

    def setPersonInfo(name , age , **kw):
        pass


    >>>setPersonInfo("KIM" , 8)
    ...
    ...
    >>>setPersonInfo("KIM" , 8 , city="Beijing" , job="teacher")
    ...
    ...
    >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, city=extra['city'], job=extra['job'])
    ...
    ...
    >>> person('Jack', 24, **extra)
    ...
    ...

**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。


命名关键字参数

简单理解命名关键字参数就是关键字参数的升级版,关键字参数不能限制输入参数的,而命名参数可以限制(可以看出命名关键字参数是定长的)

关键字参数*kw不同,命名关键字参数需要一个特殊分隔符,*后面的参数被视为命名关键字参数

    def setPersonInfo(name , age , * , city , job):
        pass

#必须要键值对方式传入,并且是规定好的,不能任意,否则会报错
>>> person('Jack', 24, city='Beijing', job='Engineer')

当然也有特殊情况,比如说:
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了

    def person(name, age, *args, city, job):
        pass

看出如果在可变参数后边的位置参数其实是命名关键字参数,要以键值对方式传入,否则会被当做可变参数的

    >>>person("KIM" , 8 , city="Guangzhou" , job="teacher")
    ...
    ...
    >>>person("KIM" , 8 , "傻瓜" , city="Guangzhou" , job="teacher")
    ...
    ...

当然命名关键字参数也可以具有默认值,那在调用的时,就可不传入有默认值的参数

    def person(name, age, *args, city="Guangzhou", job):
            pass

    def person(name, age, * , city="Guangzhou", job):
            pass


    >>>person("KIM" , 8 , job="teacher")
    ...
    ...

总结

位置参数————普通参数
默认参数————给参数默认值,调用的时候可以不传参数
可变参数————不定参数的个数 ,以tuple方式传入, *args
关键字参数———和可变参数差不多 , 以 dict 方式传入 **kw
命名关键字参数—–关键字参数的升级版,参数定长,以dict传入,但是必须以规定的参数名传入 ,*,job

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值