zoukankan      html  css  js  c++  java
  • Day3-Python基础3--默认参数和参数组

    一、默认参数

    先看下下面的代码:

     1 def stu_register(name,age,country,course):
     2     print("----注册学生信息------")
     3     print("姓名:",name)
     4     print("age:",age)
     5     print("国籍:",country)
     6     print("课程:",course)
     7  
     8 stu_register("王山炮",22,"CN","python_devops")
     9 stu_register("张叫春",21,"CN","linux")
    10 stu_register("刘老根",25,"CN","linux")

    发现 country 这个参数 基本都 是"CN", 就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单。

    1 def stu_register(name,age,course,country="CN"):

    这样,这个参数在调用时不指定,那默认就是CN,指定了的话,就用你指定的值。这里的country就是个默认参数。

    二、参数组

    之前我们传参数,都是传一个固定参数,不能多也不能少,但是如果说我们需要非固定参数怎么办呢?好吧,于是就衍生出了,以下两种传参方式:

    1. 非固定位置参数传参(*args)
    2. 非固定关键字传参(**kwargs)

    下面我们就来说说这两种方式传参:

    1、非固定位置参数传参

    1)功能:接收N个位置参数,转换成元组的形式。

    2)定义,代码如下:

    1 def test(*args): #形参必须以*开头,args参数名随便定义,但是最好按规范来,定义成args
    2     print(args)
    3  
    4 test(1,2,3,4,5) #输入多个位置参数
    5  
    6 #输出
    7 (1, 2, 3, 4, 5)  #多个参数转换成元组

    3)传入列表

     1 def test(*args):
     2     print(args)
     3  
     4 print("-------data1-----")
     5 test() #如果什么都不传入的话,则输出空元组
     6 print("-------data2-----")
     7 test(*[1,2,3,4,5])  #如果在传入的列表的前面加*,输出的args = tuple([1,2,3,4,5])
     8 print("-------data3-----")
     9 test([1,2,3,4,5])  #如果再传入的列表前不加*,则列表被当做单个位置参数,所以输出的结果是元组中的一个元素
    10  
    11 #输出
    12 -------data1-----
    13 ()
    14 -------data2-----
    15 (1, 2, 3, 4, 5)
    16 -------data3-----
    17 ([1, 2, 3, 4, 5],)

    4)位置参数和非固定位置参数

    1 def test(x,*args):
    2     print(x)  #位置参数
    3     print(args)  #非固定参数
    4  
    5 test(1,2,3,4,5,6)
    6  
    7 #输出
    8 1
    9 (2, 3, 4, 5, 6) 

    第1个参数x,被当做位置参数,剩下的被当做非固定位置参数

    5)关键字和非固定位置参数

     1 def test(x,*args):
     2     print(x)
     3     print(args)
     4  
     5 test(x=1,2,3,4,5,6)
     6  
     7 #输出
     8   File "D:/PycharmProjects/pyhomework/day3/非固定参数/非关键字参数.py", line 21
     9     test(x=1,2,3,4,5,6)
    10             ^
    11 SyntaxError: positional argument follows keyword argument #位置参数在关键字参数后面

    因为x=1是关键字参数,*args是位置参数,而关键字参数不能再位置参数前面的。

    2、非固定关键字传参(**kwargs)

    1)功能:把N个关键字参数,转换成字典形式

    2)定义:

    1 def test(**kwargs): #形参必须以**开头,kwargs参数名随便定义,但是      最好按规范来,定义成kwargs
    2     print(kwargs)
    3  
    4 test(name="maqing",age=27) #传入多个关键字参数
    5  
    6 #输出
    7 {'name': 'maqing', 'age': 27} #多个关键字参数转换成字典 

    3)传入字典:

    1 def test(**kwargs): #形参必须以**开头,kwargs参数名随便定义,但是最好按规范来,定义成kwargs
    2  print(kwargs)
    3  
    4 test(**{"name":"maqing","age":27}) #传入多个关键字参数
    5  
    6 #输出
    7 {'name': 'maqing', 'age': 27} #多个关键字参数转换成字典 

    要传入字典,在传入关键字参数的前面要加上**

    4)配合位置参数:

     1 def test(name,**kwargs):
     2     print(name)
     3     print(kwargs)
     4  
     5 print("------data1-----")
     6 test("maqing") #1个位置参数
     7 print("------data2------")
     8 test("maqing",age=27,sex="M") #1个位置参数,两个关键字参数
     9 print("------data3------")
    10 test(name="maqing",age=27,sex="M") #3个关键字参数
    11  
    12 #输出
    13 ------data1-----
    14 maqing #输出1个位置参数
    15 {}  #没有输入关键字参数,所以输出空字典
    16 ------data2------
    17 maqing  #第1个位置参数
    18 {'age': 27, 'sex': 'M'} #剩下关键字参数,转换成1个字典
    19 ------data3------
    20 maqing  #第1个关键字参数
    21 {'age': 27, 'sex': 'M'} #剩下的关键字参数,转换成1个字典

    5)位置参数、关键字和非固定关键字参数

     1 def test(name,age=27,**kwargs):
     2     print(name)
     3     print(age)
     4     print(kwargs)
     5  
     6 print("----------data1--------")
     7 test("maqing",sex='M',hobby='tesl')
     8 print("----------data2--------")
     9 test("maqing",27,sex='M',hobby='tesl')
    10 print("----------data3--------")
    11 test("maqing",sex='M',hobby='tesl',age=27) #age关键字参数放到最后,也可以的
    12  
    13 #输出
    14 ----------data1--------
    15 maqing
    16 27   #不传,显示默认参数
    17 {'sex': 'M', 'hobby': 'tesl'}
    18 ----------data2--------
    19 maqing
    20 27  #传位置参数
    21 {'sex': 'M', 'hobby': 'tesl'}
    22 ----------data3--------
    23 maqing
    24 27   #关键字参数,放在前后并没有影响
    25 {'sex': 'M', 'hobby': 'tesl'}

    6)位置参数、关键字参数、非固定位置参数和非固定关键字参数

     1 def test(name,age=27,*args,**kwargs):
     2     print(name)
     3     print(age)
     4     print(args)
     5     print(kwargs)
     6      
     7 print("-------第1种传参--------")
     8 test("maqing",20,1,2,3,4,sex="m",hobby="tesla")
     9 print("-------第2种传参--------")
    10 test("maqing",20,*[1,2,3,4],**{'sex':"m",'hobby':"tesla"})
    11  
    12 #输出
    13 -------第1种传参--------
    14 maqing #传name位置参数
    15 20   #给age传位置参数
    16 (1, 2, 3, 4)  #非固定位置参数,以转换成元组
    17 {'sex': 'm', 'hobby': 'tesla'}  # 非固定关键字参数,转换成字典
    18 -------第2种传参---------
    19 maqing
    20 20
    21 (1, 2, 3, 4)  #以列表的形式传入,在列表前加*
    22 {'sex': 'm', 'hobby': 'tesla'} #以字典的形式传入,在字典前加**

     

  • 相关阅读:
    顺序栈用C语言实现
    对队列的操作和算法
    对链表的操作与算法
    对动态数组的操作与算法
    链表
    冒泡排序
    指针之动态分配内存
    字符串匹配KMP算法
    DS二叉树--层次遍历
    DS图--最小生成树
  • 原文地址:https://www.cnblogs.com/bldly1989/p/6558101.html
Copyright © 2011-2022 走看看