zoukankan      html  css  js  c++  java
  • 可变长参数

    可变长参数

    可变长参数:指的是在调用函数时,传入的参数个数可以不固定

    调用函数时,传值的方式无非两种,一种是位置实参,另一种是关键字实参,因此形参也必须得有两种解决方法,以此来分别接收溢出的位置实参(*)与关键字实参(**)

    一、可变长形参之*

    形参中的*会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给*后的参数。需要注意的是:*后的参数名约定俗成为args。

    def sum_self(*args):
        res = 0
        for num in args:
            res += num
        return res
    
    
    res = sum_self(1, 2, 3, 4)
    print(res)
    
    10
    

    二、可变长实参之*

    实参中的会将*后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带*的,它就是位置实参,应该马上打散成位置实参去看。

    def func(x, y, z, *args):
        print(x, y, z, args)
    
    
    func(1, *(1, 2), 3, 4)
    
    1 1 2 (3, 4)
    

    三、可变长形参之**

    形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数。需要注意的是:**后的参数名约定俗成为kwargs。

    def func(**kwargw):
        print(kwargw)
    
    
    func(a=5)
    
    {'a': 5}
    

    四、可变长实参之**

    实参中的会将**后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带**的,它就是关键字实参,应该马上打散成关键字实参去看。

    def func(x, y, z, **kwargs):
        print(x, y, z, kwargs)
    
    
    func(1, 3, 4, **{'a': 1, 'b': 2})
    
    1 3 4 {'a': 1, 'b': 2}
    

    五、可变长参数应用

    def index(name, age, sex):
        print(f"name: {name}, age: {age}, sex: {sex}")
    
    
    def wrapper(*args, **kwargs):
        print(f"args: {args}")
        print(f"kwargs: {kwargs}")
        index(*args, **kwargs)
    
    
    wrapper(name='nick', sex='male', age=19)
    
    args: ()
    kwargs: {'name': 'nick', 'sex': 'male', 'age': 19}
    name: nick, age: 19, sex: male
    

    六、命名关键字形参

    现在有一个需求:函数的使用者必须按照关键字实参传。

    def register(x, y, **kwargs):
        if 'name' not in kwargs or 'age' not in kwargs:
            print('用户名和年龄必须使用关键字的形式传值')
            return
        print(kwargs['name'])
        print(kwargs['age'])
    
    
    register(1, 2, name='nick', age=19)
    
    nick
    19
    

    命名关键字形参:在函数定义阶段,*后面的参数都是命名关键字参数。
    特点:在传值时,必须按照key=value的方式传值,并且key必须命名关键字参数的指定的参数名。

    def register(x, y, *, name, gender='male', age):
        print(x)
        print(age)
    
    register(1, 2, x='nick', age=19)  
    # TypeError: register() got multiple values for argument 'x'
    
  • 相关阅读:
    hadoop再次集群搭建(3)-如何选择相应的hadoop版本
    48. Rotate Image
    352. Data Stream as Disjoint Interval
    163. Missing Ranges
    228. Summary Ranges
    147. Insertion Sort List
    324. Wiggle Sort II
    215. Kth Largest Element in an Array
    快速排序
    280. Wiggle Sort
  • 原文地址:https://www.cnblogs.com/Dr-wei/p/11871594.html
Copyright © 2011-2022 走看看