一、默认参数

先看下下面的代码:

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

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

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

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

二、参数组

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

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

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

1、非固定位置参数传参

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

2)定义,代码如下:

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

3)传入列表

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

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

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

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

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

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

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

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

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

2)定义:

 def test(**kwargs): #形参必须以**开头,kwargs参数名随便定义,但是      最好按规范来,定义成kwargs
print(kwargs) test(name="maqing",age=27) #传入多个关键字参数 #输出
{'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)配合位置参数:

 def test(name,**kwargs):
print(name)
print(kwargs) print("------data1-----")
test("maqing") #1个位置参数
print("------data2------")
test("maqing",age=27,sex="M") #1个位置参数,两个关键字参数
print("------data3------")
test(name="maqing",age=27,sex="M") #3个关键字参数 #输出
------data1-----
maqing #输出1个位置参数
{} #没有输入关键字参数,所以输出空字典
------data2------
maqing #第1个位置参数
{'age': 27, 'sex': 'M'} #剩下关键字参数,转换成1个字典
------data3------
maqing #第1个关键字参数
{'age': 27, 'sex': 'M'} #剩下的关键字参数,转换成1个字典

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

 def test(name,age=27,**kwargs):
print(name)
print(age)
print(kwargs) print("----------data1--------")
test("maqing",sex='M',hobby='tesl')
print("----------data2--------")
test("maqing",27,sex='M',hobby='tesl')
print("----------data3--------")
test("maqing",sex='M',hobby='tesl',age=27) #age关键字参数放到最后,也可以的 #输出
----------data1--------
maqing
27 #不传,显示默认参数
{'sex': 'M', 'hobby': 'tesl'}
----------data2--------
maqing
27 #传位置参数
{'sex': 'M', 'hobby': 'tesl'}
----------data3--------
maqing
27 #关键字参数,放在前后并没有影响
{'sex': 'M', 'hobby': 'tesl'}

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

 def test(name,age=27,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs) print("-------第1种传参--------")
test("maqing",20,1,2,3,4,sex="m",hobby="tesla")
print("-------第2种传参--------")
test("maqing",20,*[1,2,3,4],**{'sex':"m",'hobby':"tesla"}) #输出
-------第1种传参--------
maqing #传name位置参数
20 #给age传位置参数
(1, 2, 3, 4) #非固定位置参数,以转换成元组
{'sex': 'm', 'hobby': 'tesla'} # 非固定关键字参数,转换成字典
-------第2种传参---------
maqing
20
(1, 2, 3, 4) #以列表的形式传入,在列表前加*
{'sex': 'm', 'hobby': 'tesla'} #以字典的形式传入,在字典前加**

 

Day3-Python基础3--默认参数和参数组的更多相关文章

  1. python中的函数(定义、多个返回值、默认参数、参数组)

    函数定义 在python中函数的定义以及调用如下代码所示: def test(x): y = x+1 return y result = test(2) print(result) 多个返回值的情况 ...

  2. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

  3. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  4. Python进阶-函数默认参数

    Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 ...

  5. Python - 默认参数传参陷阱

    def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) print(list1) # [10] list2 ...

  6. Day3 Python基础学习——文件操作、函数

    一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...

  7. Python基础之函数参数

    一.实参 1.实参分类: 2.实参基础代码: def fun01(a, b, c): print(a) print(b) print(c) # 位置传参:实参与形参的位置依次对应 fun01(1, 2 ...

  8. python基础之函数参数,名称空间,以及函数嵌套

    函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...

  9. C/C++ Python的函数默认参数

    发现C/C++  Python的函数可以使用默认参数,来减少传参时候的参数个数. 但是:这样的默认参数最好是不变对象! #include <stdio.h> #include <st ...

随机推荐

  1. 12.常见模块time、json模块

    1.time模块 import time #python中最基本的时间模块 time.time() #时间戳 (1970年1月1日00:00:00后经过的浮点秒数) time.localtime(ti ...

  2. QT应用程序设置图标

    一.纯Qt 1.下载图标:app.ico 2.新建记事本,输入:IDI_ICON1 ICON DISCARDABLE"app.ico":改变名字为jude.rc 3.将两个文件放在 ...

  3. MATLAB更换字体后 中文显示乱码问题

    MATLAB的脚本代码默认宋体显示,对于大多数720P的显示器来说,无论是中文还是英文,显示效果都非常差.Windows环境下,Consolas是一种比较理想的英文代码字体. Consolas 字体是 ...

  4. java进阶之-Maven,svn,git,maven合拼多个项目

    git的使用介绍(写很容易懂得哦) maven合拼多个项目(写得很好哦) MAVEN作用:统一开发规范与工具:统一管理jar包 1.下载MAVEN  下载绿色版的面安装 2.环境配置 eclipse想 ...

  5. js获取css样式方法

    一.CSS样式共有三种:内联样式(行间样式).内部样式.外部样式(链接式和导入式) <div id="a" style="width: 100px;height: ...

  6. MYSQL进阶学习笔记一:MySQL编码设定,会话变量和全局变量!(视频序号:进阶_1-3)

    知识点一:MySQL编码设定(1-2) 服务器编码设定: 查看MySQL服务器端的编码格式: SHOW VARIABLES LIKE ‘char%’; 设定编码格式: SET NAMES ‘utf8’ ...

  7. JavaWeb -- 邮件收发

    smtp协议: telnet smtp.qq.com 25 ehlo kevin auth login eGlhbmdqaWU1NUBxcS5jb20= a2V2aW5feGlhbmc1NQ== ma ...

  8. (转)Nova中的compute_node

    如需转载,请标明原文出处以及作者 陈锐 RuiChen @kiwik *2015/2/4 22:44:22 * 写在最前面: 这段时间连续改了几个scheduler和resource_tracker相 ...

  9. Linux系统用户/用户组/文件权限相关

    目录一.Linux系统用户/用户组权限相关二.Linux系统文件权限相关 一.Linux系统用户/用户组权限相关 .命令:usermod 用法:usermod [-agGus] user args ‘ ...

  10. Secret Code

    Secret Code 一.题目 [NOIP模拟赛A10]Secret Code 时间限制: 1 Sec  内存限制: 128 MB 提交: 10  解决: 6 [提交][状态][讨论版] 题目描述 ...