• Python(二) 函数的参数


      Python函数参数可以是默认参数、可变参数和关键字参数,对于函数的调用者来说,无需关注函数内部,只需要知道如何传递正确的参数,以及函数将返回什么样的值。

    1.位置参数

      自定义一个x*x的函数

    def p(x):
        return x*x
    # 对于p(x)函数,参数x是一个位置参数。
    # 当调用这个函数是,必须传入有且仅有的一个参数
    print(p(55))

    控制台输出的值为3025

    2.默认参数

      给位置参数赋值,设一个默认值。例如函数p1(x,n=3),调用函数p1是只需给位置参数x传递参数即可。

    def p1(x,n=3):
        s=1
        while n>0:
            n=n-1
            s=s*x
        return s
    print(p1(5))

      注意:必须是参数在前,默认参数在后,变化小的参数放在后面。变化小的参数可以作为默认参数。

      默认参数能降低函数的复杂度。

      例如写一个制定城市的用户注册的的函数,注册的信息包括:姓名,年龄,城市等信息。可以将城市信息设置成默认值。

      

    def reg(name,age,city='北京'):
        print('name:', name)
        print('age:', age)
        print('city:', city)
    # 只需传入参数name和age。
    reg('rose',18)

      若需要注册不别的城市,只需给默认参数传入指定值即可。

    def reg(name,age,city='北京'):
        print('name:', name)
        print('age:', age)
        print('city:', city)
    # 只需传入参数name和age。
    reg('rose',18)
    # 只有与默认参数不符的用户才需要提供额外的信息
    reg('jack',20,city='上海')

      默认参数很有用,但使用不当,也会掉坑里。默认参数有个最大的坑,演示如下:

    先定义一个函数,传入一个list,添加一个END再返回:

    当使用默认参数调用时,一开始结果也是对的。但是多次调用结果就不对了:

    def add_end(L=[]):
        L.append('END')
        return L
    print(add_end())
    print(add_end())
    print(add_end())

    控制台打印结果为:

    ['END']
    ['END', 'END']
    ['END', 'END', 'END']

    Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]

    定义默认参数要牢记一点:默认参数必须指向不变对象!

    3.可变参数

      可变参数就是传入的参数个数是可变的,可以是1个,2个或者是任意个,还可以是0个。

    def nums(numbers):
        sum=0
        for n in numbers:
            sum=sum+n*n
        return sum
    # 传入参数list
    print(nums([1,2,3,4]))
    # 传入参数tuple
    print(nums((1,2,3,4)))
    
    # 把函数的参数改为可变参数:在参数前面加*
    def nums(*numbers):
        sum=0
        for n in numbers:
            sum=sum+n*n
        return sum
    # 利用可变参数可以简化成:
    print(nums(1,2,3,4))

     4.关键字参数

      关键字参数允许你传入0个或任意个参数名的参数,这些关键字参数在函数内部自动组装成dict。

    def person(name,age,**kw):
        print('name:',name,'age:',age,'other:',kw)
    
    # 可以只传入必选参数
    person('Bob', 35)
    # 自动把关键字参数组装成dict
    person('Bob', 35,city='shanghai')

    运行结果:

    name: Bob age: 35 other: {}
    name: Bob age: 35 other: {'city': 'shanghai'}

    5.命名关键字参数

      如果要限制关键字参数的名字,就可以用命名关键字参数,命名关键字参数用一个特殊分隔符*,*后面的参数被视为命名关键字参数。

    # 命名关键字参数
    def person1(name,age,*,city,job):
        print(name,age,city,job)
    person1('rose',23,city='shanghai',job='worker')

    运行结果:

    rose 23 shanghai worker

      如果函数参数定义中已经有一个可变参数了,后面跟着的关键字参数就不再需要特殊分隔符了

    def person2(name,*age,city,job):
        print(name,age,city,job)
    person2('rose',23,city='shanghai',job='worker')

    运行结果:

    rose (23,) shanghai worker

    注意:命名关键字参数必须传入参数名,否则调用报错。

    6.参数组合

      在Python中定义函数,可以用必选参数,默认参数,可变参数,关键字参数和命名关键字参数这五种,可以组合使用,但注意的是,参数的顺序必须是:必选参数,默认参数,可变参数你,命名关键字参数和关键字参数。

      对于任意函数,都可以通过类似func(*args,**kw)的形式调用他。(命名关键字参数,关键字参数)

  • 相关阅读:
    敏捷开发中的sprint是什么意思_百度知道
    桐君堂_百度百科
    HSTS Preloading
    做CloudXNS产品运营的这半年 – CHINA Testers
    java~spring-ioc的使用
    java~api返回值的标准化
    java8的函数式接口
    redis使用场景和java测试案例
    springboot~注册bean的方法
    学生信息管理系统问题集锦
  • 原文地址:https://www.cnblogs.com/codeRose/p/7896901.html
Copyright © 2020-2023  润新知