【Python】函数参数类型及用法
一、函数的参数类型
def hs(a1,a2,a3,...): ****statements
其中a1,a2,a3是函数的参数,函数的参数类型可分为:必须参数、默认参数、可变参数(不定长参数)、关键字参数、组合参数,总共5种。
二、必须参数
其实我们之前举得例子就是必须参数,以下例子必须参数:
>>>def hello(str):
.... print('必须参数是:',str)
>>>hello('hello,world')
我们可以看到在函数hello中,str作为一个参数,是形参,这形参个类型取决于你调用时输入的实参类型,我们这里调用函数hello时,传入了一个字符串'hello,world',那么这个实参的类型就是字符串,所以形参str的类型也是字符串,所以当我们调用函数hello时传入‘hello,world’,就会执行函数里面的print语句,在屏幕上显示出如图所示:
值得注意的是,我们在定义函数时形参数量只有一个,因此在调用函数时传入实参也必须是一个!如果传入的实参数量多余形参数量会出现错误,如图所示:
- 传入实参数量多于形参数量会报错
- 实参数量少于形参数量
第二个注意的是,当传入实参数量少于形参数量时也会报错!形参有一个参数,调用函数时不传入参数,如图:
二、默认参数
默认参数就是定义函数时,形参给定一个值。
>>>def hs(name,age=): ...... print('我叫:',name) ...... print('我今年',age) >>>hs('王二',)
【省略默认参数】
默认参数例子
省略实参23得到结果
从以上例子可以看,以上函数用了两个形参,调用函数时输入了两个实参,我们可以试一下省略实参23,看能不能得到结果,请看图:
【改变默认参数的值】
我们可以发现,我们省略实参23后,仍然能得到有实参23时的结果,这是因为我们定义函数时,形参中已经赋了一个值,当我们调用函数时,如果没有给默认形参一个值作为实参,那么就会调用默认形参的值作为实参,因此会得到默认的值;如果我们在调用函数时输入了一个非默认形参值,这时候默认形参的值会发生变化,变为输入的那个值!如图所示:
要注意的是,我们调用函数时也可以输入‘参数名=值’ 这样的形式,如图所示:
参数名=值
重点来了:当存在默认参数和必须参数两种以上参数时,调用函数时一定要注意:
a : 调用函数时,实参的形式为都带参数名,如上图形式
b : 一个参数带参数名,另一个参数不带参数名,其中默认参数必须带参数名
c : 如果形参中默认参数在必须参数之前,那么调用函数时实参中默认参数也应当在前面;如果形参中默认参数在必须参 数之后,那么调用函数时实参中默认函数应当在后面,否则会报错。
【形参中默认参数在后,实参中默认参数在后】
形参中默认参数在前,实参中默认参数在后导致报错:
三、可变参数(不定长参数)
我们用一个例子来说明可变参数:
>>>def change(age,*som):
print(age)
for i in som:
print(i)
return >>>change('name','year','mon','address')
【不定长参数】
我们可以看到,在形参中我们定义了两个参数,为什么实参中输入了4个参数还是正确的呢?
这就是可变参数带来的好处!代码中实参name传给了形参age,而其余三个传给了*som,可以说som相当于一个无限大的容器,可以容纳很多个参数。
四、关键字参数
其实默认参数中已经出现了关键字参数!关键字参数就是在调用函数时,传入实参时带参数名,用这样的方式传入的实参叫做关键字参数。在这里,我们重点讲一下调用函数时传入关键字参数的几种方法。
看一个例子:
定义一个字典:
>>> dir={'name':'miss','age':''}
>>> def Deaf(school,banji,**other):
... print(学校:',school,'\n',班级:',banji,'\n','学生信息:',other)
...
>>> Deaf(清华,'大二',**dir)
关键字参数实例1
上面例子我们可以看出,调用函数时实参除了‘清华’、‘大二’这两个必须参数外,还有’**dir ’这个关键字参数。
我们再看一个例子:
>>> dir={'name':'miss','age':''}
>>> def Deaf(school,banji,*other):
... print('Xuexiao:',school,'\n','Banji:',banji,'\n','Student_info:',other)
...
>>> Deaf('Tsinghua','Class 2',*dir)
('Xuexiao:', 'Tsinghua', '\n', 'Banji:', 'Class 2', '\n', 'Student_info:', ('age', 'name'))
>>>
关键字参数实例2
从上面这个例子中我们发现,当形参中有不定长参数 *other,调用函数时用 *dir会发现结果是只有字典中键名,没有值!
我们再看一个例子:
>>> dir={'name':'miss','age':''}
>>> def Deaf(school,banji,*other):
... print('Xuexiao:',school,'\n','Banji:',banji,'\n','Student_info:',other)
...
>>> Deaf('Tsinghua','Class 2',dir)
('Xuexiao:', 'Tsinghua', '\n', 'Banji:', 'Class 2', '\n', 'Student_info:', ({'age': '', 'name': 'miss'},))
>>>
关键字参数实例3
上面这个例子中,形参有不定长参数 *other ,调用函数时用 dir 但其结果是 将字典 以元组的形式输出,既在字典外面加括号。
五、组合参数
组合参数就是将之前讲过的4中参数同时引入函数作为形参,值得注意的是,定义参数时的顺序必须为:必须参数、关键字参数、默认参数、不定长参数。
举一个例子:
>>> xx={'name':'xiaozhi','age':'','interesting':'basketball'}
>>> tu=(,,,,,)
>>> zd={'m':,'n':}
>>> def hs(a1,a2,a3=,*a4,**cs):
... print('a1=',a1,'a2=',a2,'a3=',a3,'a4a=',a4,cs)
...
>>> hs(,,,,,,,m=,n=,**xx)
('a1=', , 'a2=', , 'a3=', , 'a4a=', (, , , ), {'interesting': 'basketball', 'age': '', 'm': , 'name': 'xiaozhi', 'n': })
>>> hs(*tu,**zd)
('a1=', , 'a2=', , 'a3=', , 'a4a=', (, , ), {'m': , 'n': })
>>>
【不定长参数】
在第一次调用函数时,1、2分别给a1,a2,形参a3=10,但是传入实参为3,改变了原来的值,因此a3=3,
*a4 是不定长参数,因此4、5、6、7给*a4,因此a4a是多个值,以元组的形式输出,**cs为关键字参数,
所以m、n以及**xx 的值给**cs,以字典形式输出。
在第二次调用函数时,tu为一个元组,调用时用*tu方法,因此a1=1,a2=2,a3=3,a4a=(4,5,6);用**zd调用时以字典形式输出。
【Python】函数参数类型及用法的更多相关文章
- Python 函数参数类型大全(非常全!!!)
Python 函数参数类型大全(非常全!!!) 1.在python编写程序里面具有函数文档,它的主要作用是为了让别人可以更好的理解你的函数,所以这是一个好习惯,访问函数文档的方式是: MyFuncti ...
- python函数参数类型及其顺序
根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY.POSITIONAL_OR_KEYWORD.VAR_POSI ...
- python函数参数类型:位置参数、默认参数、动态参数、关键字参数
1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 ...
- Python函数参数的五种类型
之前项目需求,需要通过反射获取函数的参数,python中可以通过函数签名(signature)来实现. 首先需要了解函数参数的类型,Python的参数类型一共有5种:POSITIONAL_OR_KEY ...
- Python 带参数的装饰器 [2] 函数参数类型检查
在Python中,不知道函数参数类型是一个很正常的事情,特别是在一个大项目里.我见过有些项目里,每一个函数体的前十几行都在检查参数类型,这实在是太麻烦了.而且一旦参数有改动,这部分也需要改动.下面我们 ...
- Python函数参数学习笔记
1.Python中函数参数类型可分为五种: f(x):x为位置参数: f(x,n=2):n为默认参数,调用时可以省略参数n,如f(5); f(*args):*args表示把args这个list或tup ...
- python 函数参数介绍
python 函数参数介绍 python 使用过程总,总会遇到 *args,**kw形式的参数,总是一头雾水,而且网上介绍的或是叫法不一,为此专门深入实践进而了解了函数参数的使用 具体请看代码 #-* ...
- python函数-参数
python函数-参数 实验室 # 演示形参是可变类型 def register(name, hobby, hobby_list=[]): hobby_list.append(hobby) print ...
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
随机推荐
- IO字节流。
字节输出流: java.io.OutputStream :抽象类,是表示输出字节流的所有类的父类. java.io.FileOutputStream extends OutputStream: 文件字 ...
- 用gethub下载ardupilot的最新源码
1进入gethub的官方网站https://github.com/作者:恒久力行 QQ:624668529 在搜索框内输入ardupilot并点击搜索点回车 2会看到很多工程,选择那 ...
- 巧用前端神器,fakerjs生成json文件
安装 cnpm install faker json-serve --save-dev 在目录下创建一个模板文件 示例 makeJson.js var faker = require('faker') ...
- Node.js | 你的物联网系统,有个管家待认领
很多时候,专业的事情都要交给专业的人来做,才会更放心. 例如买了套房,交房装修完毕,欢天喜地入住后,房子的日常养护和维护之类的事情,都由谁来负责呢? 物业呗~买了房子就自然需要房子所在小区提供的物业服 ...
- python 多线程 生产者消费者
import threading import time import logging import random import Queue logging.basicConfig(level=log ...
- mstsc远程桌面全频或自定义窗口
近期发现自己的mstsc突然窗口变小,总是要繁琐的拖来拖去,现终于解决了,拿来分享一二! 参数一:mstsc /f 以全屏模式显示(操作一次,后面无需在设置,具体何原因要问微软了,可能是机器的分辨 ...
- java Vamei快速教程06 组合
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经尝试去定义类.定义类,就是新建了一种类型(type).有了类,我们接着构造 ...
- C语言异常处理编程的三个境界
http://blog.csdn.net/treefish2012/article/details/17466487 这是上一次看完Herb Sutter的<Exceptional C++> ...
- 2018.5.20 oracle强化练习
--现在有一个商店的数据库,记录客户以及购物的情况, 商品表goods (商品号 goodsid varchar2(8) 商品名 goodsname varchar2(20) 单价 unitprice ...
- 第九章 利用DOM脚本检索,替换,设置,追加样式信息
我们浏览器里看到的网页是由以下三层信息构成的一个共同体: -结构层,由HTML或XHTML之类的标记语言负责去搭建文档的结构. -表示层,由CSS负责设置文档的呈现效果. -行为层,由JavaScri ...