【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中函数参数定义及调用函数时传参 ...
随机推荐
- while循环,break和continue,运算符,格式化输出
一丶while循环 while条件: 代码块(循环体) #数数 打印1-100 count = 1 while count <= 100: print(count) count += 1 执行顺 ...
- [转] Adobe acrobat 破解教程
最新版的Adobe Acrobat DC Pro可以使我们更方便的管理和编辑PDF文档,现在我为大家带来Adobe Acrobat DC Pro安装及破解教程,供大家安装和使用. 工具/原料 Ad ...
- lintcode中等难度5道题
1.整数转罗马数字 对任一个罗马数字可以 由12个罗马字符进行加法操作完成,且大数在左,小数在右,可以将一个数字进行拆分来求解 2.买卖股票的最佳时机 II 可将问题转换为只要相连的两天prices[ ...
- Localroast使用总结
全手打原创,转载请标明出处: https://www.cnblogs.com/dreamsqin/p/10883248.html,多谢~=.= 什么是Localroast 一个根据 JSON 文件快速 ...
- C# asp.net mvc 注解验证
看代码,看注解,看懂了单词,没看懂意思. 今日只能专攻一下这项特性. 1.Remote 在看这个例子的时候 ,看了JsonResult 以及 JsonRequestBehavior.AllowGet解 ...
- C++各大有名科学计算库(转)
在 C++中,库的地位是非常高的.C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论.现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级 ...
- POJ 2429 GCD & LCM Inverse(Miller-Rabbin素性测试,Pollard rho质因子分解)
x = lcm/gcd,假设答案为a,b,那么a*b = x且gcd(a,b) = 1,因为均值不等式所以当a越接近sqrt(x),a+b越小. x的范围是int64的,所以要用Pollard_rho ...
- 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)
点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...
- 【转】android调试工具DDMS的使用详解
具体可见http://developer.android.com/tools/debugging/ddms.html. DDMS为IDE和emultor.真正的android设备架起来了一座桥梁.开发 ...
- vue组件 $children,$refs,$parent的使用
如果项目很大,组件很多,怎么样才能准确的.快速的寻找到我们想要的组件了?? 1)$refs 首先你的给子组件做标记.demo :<firstchild ref="one"&g ...