Python - 函数形参之必填参数、缺省参数、可变参数、关键字参数的详细使用
Python函数形参
- 必传参数:平时最常用的,必传确定数量的参数
- 缺省参数:在调用函数时可以传也可以不传,如果不传将使用默认值
- 可变参数:可变长度参数
- 关键字参数:长度可变,但是需要以kv对形式传参
必填参数和缺省参数的结合
# 必填参数a,缺省参数b
def test1(a, b=3):
print(a, b) test1(0)
test1(0, 1)
执行结果
0 3
0 1
实际的函数栗子
str.index(sub, start=None, end=None)
知识点
声明函数时,当同时存在必填参数和缺省参数,形参的顺序必须是 (必填参数 , 缺省参数),不能缺省参数在前
可变参数
def test2(num, num2=2, *args):
print(num, num2, args) test2(1)
test2(1, 3)
test2(1, 3, 3, 3, 3, 3, 3)
test2(1, *(2, 3, 4, 5))
test2(1, *[2, 3, 4, 5])
执行结果
1 2 ()
1 3 ()
1 3 (3, 3, 3, 3, 3)
1 2 (3, 4, 5)
1 2 (3, 4, 5)
知识点
- args是一个元组类型
- 可变参数可不传,也可以传很多个值
- *(2, 3, 4, 5) ,在元组or列表前面加一个 * ,代表将里面的每个元素独立出来,单独作为一个形参传进去
- 声明函数时,缺省参数可以放在可变参数后面,但是不建议这样写;建议形参的顺序是:( 必填参数 , 缺省参数 , 可变参数 )
不懂*(1,2,3)可以看看这段代码
print(*(1, 2, 3, 4))
# 输出1 2 3 4
关键字参数
def test3(a, b=2, **kwargs):
print(a, b, kwargs) test3(1)
test3(1, 3)
test3(1, **{"key": "value"})
test3(1, 3, **{"key": "value", "key1": "val", "key2": 'val2'})
test3(1, name="yy", key="value")
test3(1, 3, name="yy", key="value")
test3(1, name="yy", key="value",b=222222)
# test3(1, 22222,name="yy", key="value",b=222222) 会报错,因为第二个值已经传给缺省参数b了
执行结果
1 2 {}
1 3 {}
1 2 {'key': 'value'}
1 3 {'key': 'value', 'key1': 'val', 'key2': 'val2'}
1 2 {'name': 'yy', 'key': 'value'}
1 3 {'name': 'yy', 'key': 'value'}
1 222222 {'name': 'yy', 'key': 'value'}
知识点
- kwargs是一个字典类型
- 关键字参数可传可不传
- 传值的时候需要传键值对,如果要传dict需要在前面加上 ** ,表示将这个dict的所有key-value当成独立的关键字参数(变成key=value)传入到kwargs,而修改kwargs不会影响原来的dict
- 不用dict的话也可以直接 key=value 的写法,如果和缺省参数重名,若前面没有传值的话,会当成缺省参数传值;若有的话会直接报错
- 声明函数时,缺省参数不可以放在可变参数后面
实际的函数栗子
这是 requests.get() 方法的最终调用函数,可以看到除了method、url是必传参数,还能通过kwargs传很多个参数

四种参数类型都有的函数
def test4(a, b=2, *args, **kwargs):
print(a, b, args, kwargs) test4(1)
test4(1, 1)
test4(1, *(1, 2, 3, 3, 4,))
test4(1, *(1, 2, 3, 3, 4,), cc=123, c=123) lists = ["a", "b"]
dicts = {"key": 123}
test4(1, *lists, **dicts)
执行结果
1 2 () {}
1 1 () {}
1 1 (2, 3, 3, 4) {}
1 1 (2, 3, 3, 4) {'cc': 123, 'c': 123}
1 a ('b',) {'key': 123}
知识点
当四种类型都有的时候,参数顺序一定是:( 必填参数 , 缺省参数 , 可变参数 , 关键字参数 )
Python - 函数形参之必填参数、缺省参数、可变参数、关键字参数的详细使用的更多相关文章
- python函数—形参、实参、位置参数、关键字参数
1.通过def function_name([parameter]): 定义,函数一遇到return即结束运行.如果函数没有定义返回值,则返回None,如果定义了一个返回值,则返回该对象,如果一个re ...
- python函数——形参中的:*args和**kwargs
python函数——形参中的:*args和**kwargs 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照关键字传值把多余的传值以字典的方式呈现 *args:(表示的就是将 ...
- 关于strcpy函数形参类型的解析和指针作为输入型输出型参数的不同
在C语言中,字符串一直都是热点,关于strcpy函数大家都很熟悉,但是真正了解的很少,一旦用到总会报一大堆莫名其妙错误,今天我就来给大家详细剖析一下strcpy函数. 虽然不能看到strcpy的内部实 ...
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...
- Python 函数参数*expression 之后为什么只能跟关键字参数
python 为何要设计这种? 正确: def f(a=2,b=2,c=3): return a+b+c print(f(*(1,1),c=1)) 错误: def f(a=2,b=2,c=3): re ...
- python函数形参中的*args和**kwargs
转载:https://www.cnblogs.com/xuyuanyuan123/p/6674645.html 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照关键字传值把多余的 ...
- python 函数形参四种格式
1:f(a,b) 2:f(a,b=value)有默认值的参数必须在后面 3:f(*a)多个参数直接传进一个元组 4:f(**a)以keys=values 形式给参数,传入转换为字典 def test( ...
- python函数的用法
python函数的用法 目录: 1.定义.使用函数 1.函数定义:def 2.函数调用:例:myprint() 3.函数可以当作一个值赋值给一个变量 例:a=myprint() a() 4.写r ...
- python之函数形参、实参、可变长参数整体使用和分类
形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...
随机推荐
- open()操作文件
open()函数用来读取.写文件 参数解释: r:只读 w:只写,此时进行读,会报错 a:只追加 r+:可读可写 w+:可读可写 a+:可读可写 rb\rb+\wb\wb+\ab\ab+ 针对二进制文 ...
- Mybatis工作流程及其原理与解析
Mybatis简介: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBat ...
- JS的时间差换算(String to 自己想要的时间格式)
JS的时间差换算(String to 标准的时间格式) 1.字符串到标准时间格式: 字符串: var time1="2018-05-11 00:00:00" var time2=& ...
- xampp安装后启动apache出现端口占用问题
apache默认监听电脑80端口,当端口被占用时,xampp无法正常启动apache.我们需要将端口解除占用再启动. xampp报错: Problem detected!19:36:24 [Apach ...
- myecplise上将工程部署到应用下时,经常出现 An internal error occurred during: "Add Deployment". java.lang.NullPointEx
myecplise上将工程部署到应用下时,经常出现 An internal error occurred during: "Add Deployment". java.lang.N ...
- ubuntu16.04安装mysql5.6
apt-get install software-properties-commonsudo add-apt-repository 'deb http://archive.ubuntu.com/ubu ...
- 面试的绝招(V1.0)
<软件自动化测试开发>出版了 测试开发公开课培训大讲堂 微信公众号:测试开发社区 测试开发QQ群:173172133 咨询QQ:7980068 咨询微信:zouhui1003it
- 对javascript EventLoop事件循环机制不一样的理解
前置知识点: 浏览器原理,浏览器内核5种线程及协作,JS引擎单线程设计推荐阅读: 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理 [FE]浏览器渲染引擎「内核」 js异步编程,Promise ...
- 查看python库文档
安装完python第三方库以后,经常需要查询其文档,其实python就自带文档查看器.可以查看所有内置库和第三方库的文档,虽然不是很详尽,但是总比没有的好. 在命令行窗口 python -m pydo ...
- CSS——NO.4(继承、层叠、特殊性、重要性)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...