python函数和方法的入参格式有哪些_Python函数的参数常见分类与用法实例详解
本文实例讲述了Python函数的参数常见分类与用法。分享给大家供大家参考,具体如下:
1.形参与实参是什么?
形参(形式参数):指的是
在定义函数时,括号内定义的参数,形参其实就是变量名
实参(实际参数):括号内传入的值,实参其实就是变量的值
x,y是形参
def func(x,y):
print(x)
print(y)
func(20,30)
#20,30是实参
注意:实参值(变量的值)与形参(变量名)的绑定关系只在函数调用时才会生效/绑定在函数调用结束后就立刻解除绑定。
2.函数的参数
位置即顺序,位置参数参数指的就是按照从左到右的顺序依次定义的参数。
3.有两种参数:
(1)在定义时,按照位置定义的形参,称为位置形参
def foo(x,y,z):
print(x,y,z)
foo(1,2,3)
注意:位置形参的特性是:在调用函数时必须为其传值,而且多一个不行,少一个也不行。
(2)在调用函数时,按照位置定义的实参,称为位置实参。
注意:位置实参会与形参一一对应。
4.什么是关键字参数:
在调用函数时,按照key=value的形式定义的实参,称为关键字参数。
def foo(x,y,z):
print(x,y,z)
foo(5,9,3)
foo(y=8,x=1,z=4)
注意:相当于指名道姓的为形参传值,意味着即便不是按照顺序定义,仍然能为指定的参数传达值。
(1)在调用函数时,位置实参与关键字实参可以混合使用,但必须遵循形参的规则。
def foo(x,y,z):
print(x,y,z)
foo(1,z=3,y=2) #这样写是正确的
foo(1,z=5) #这个没有遵循实参的规则,所以会报错
(2)不能为同一个形参重复传值。
(3)位置实参必须放到关键字实参的面前。
def foo(x,y,z):
print(x,y,z)
foo(x=8,y=7,3) #里面的3就是位置实参,放在后面和中间都是不行的,必须要放在关键字实参的前面
这样才是正确的用法:
def foo(x,y,z):
print(x,y,z)
foo(3,y=7,z=8)
5.默认参数
在定义阶段,已经为某个形参赋值,那么该形参就称为默认参数
注意:
(1)定义阶段已经有值,意味着调用阶段可以不传值。
def register(name,pasd,sex='yuan'):
print(name,pasd,sex)
register('liuyuan',22,)
register('xiang',22)
register('xxx',80)
(2)位置形参必须在默认参数的面前
def func(y=1,x): #这是错误的,里面的x为位置形参,不能放在后面。
pass
(3)默认参数的值只在定义的阶段赋值一次,也就是说默认参数的值再定义就固定死了。
s=88
def foo(x,y=s):
print(x,y)
s='555555555555555'
foo(1)
foo(1,22)
输出结果:
1 88
1 22
(4)记住:默认参数的值应该设置为不可变类型
def register(name,hobby,l=None):
if l is None:
l=[]
l.append(hobby)
print(name,l)
register('liuyuan','play')
register('xiang','read')
以上输出:
liuyuan ['play']
xiang ['read']
应用:对于经常需要变化的值,需要将对应的形参定义成位置形参
对于大多数情况值都一样的情况,需要将对应的形参定义成默认形参
6.可处理以上两种形式变参数
什么是可变参数?
可变长度指的参数的个数可以不固定,实参有按位置定义的实参和按关键字定义的实参,
所以可变长的实参指的就是按照这两种形式定义的实参个数可以不固定。
然而实参终究是要给形参传值的
所以形参必须有两种对应解决方案来分别处理以上两种形式可变长度的实参。
(1)形参里面包含*与**
*会将溢出的位置实参全部接收,然后保存成元组的形式赋值给args
def foo(x,y,z,*args):
print(x,y,z)
print(args)
foo(1,2,3,4,5,6,7,8,)
以上输出:
1 2 3
(4, 5, 6, 7, 8)
**会将溢出的关键字实参全部接收,然后保存成字典的形式赋值给kwargs
def foo(x,y,z,**kwargs):
print(x,y,z)
print(kwargs)
foo(x=1,y=2,z=3,a=5,b=6,c=7)
以上输出:
1 2 3
{'a': 5, 'b': 6, 'c': 7}
注意:实参里面包含*与**
一旦碰到实参加*,就把该实参的值打散
def foo(x,y,z,*args):
print(x,y,z)
print(args)
foo(1,2,3,*[4,5,6,7,8,9])
foo(1,2,3,*'h,e,l,l,o')
以上输出:
1 2 3
(4, 5, 6, 7, 8, 9)
1 2 3
('h', ',', 'e', ',', 'l', ',', 'l', ',', 'o')
一旦碰到实参加**,就该把该实参的值打散。
def foo(x,y,z,**kwargs):
print(x,y,z)
print(kwargs)
以上输出:
1 8 3
{}
重点:组合使用
这种方法我们以后肯定会经常用到的。
def index(name,age,gender):
print('welcome %s %s %s' %(name,age,gender))
def wrapper(*args,**kwargs): #args=(1,2,3),kwargs={'x':1,'y':2,'z':3}
index(*args,**kwargs) # index(*(1,2,3),**{'x':1,'y':2,'z':3}) # index(1,2,3,z=3,y=2,x=2)
wrapper('egon',age=18,gender='male')
wrapper('egon',18,gender='male')
wrapper('egon',18,'male')
以上输出:
welcome yuan 18 male
welcome xiang 18 male
welcome abasida 0.6 male
希望本文所述对大家Python程序设计有所帮助。
python函数和方法的入参格式有哪些_Python函数的参数常见分类与用法实例详解相关推荐
- python中symbols函数用法_Python基础之函数用法实例详解
本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def, ...
- python的scatter函数_python scatter函数用法实例详解
这篇文章主要介绍了python scatter函数用法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数功能:寻找变量之间的关系. 调用签 ...
- python url解码_对python中url参数编码与解码的实例详解
一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...
- python编程字典100例_python中字典(Dictionary)用法实例详解
本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...
- python 录制web视频_Python django框架 web端视频加密的实例详解
视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play ...
- python脚本例子_python dict 字典 以及 赋值 引用的一些实例(详解)
最近在做一个很大的数据库方面的东东,要用到根据数值来查找,于是想到了python中的字典,平时没用过dict这个东东 用的最多的还是 list 和 tuple (网上查 用法一大堆) 看了一下创建字典 ...
- python回调函数实例详解_Python回调函数用法实例详解
本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...
- python3.5怎么使用-Python3.5常见内置方法参数用法实例详解
本文实例讲述了Python3.5常见内置方法参数用法.分享给大家供大家参考,具体如下: Python的内置方法参数详解网站为:https://docs.python.org/3/library/fun ...
- python如何定义类_Python中类的定义、继承及使用对象实例详解
本文实例讲述了Python中类的定义.继承及使用对象的方法.分享给大家供大家参考.具体分析如下: Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类 ...
最新文章
- thinkphp中出现unserialize(): Error at offset 533 of 1857 bytes如何解决
- boost::mpl模块实现list_c相关的测试程序
- boost::hana::unfold_right用法的测试程序
- 专题2-通过按键玩中断\第1课-中断处理流程深度剖析-lesson1
- PHP+MySql+PDO实现简单登录、注册
- cocopod升级1.6.0bate问题
- Java图片上查找图片算法
- 【七夕节特刊】开源世界里的爱情保卫战
- 服务器96g运行内存,别被坑了,2019入手小米9到底选择6G运存还是8G?看完你就懂了!...
- 简单飞机模型静态/模态分析
- 普通打印机,双面打印技巧
- GPS数据矢量化JAVA_算法 – acosf()的精确矢量化实现
- 别找了,这个命令让你在字符串和十六进制间自由转换
- java实现缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
- GitHub 热点速览 Vol.14:周获 2k+ Vim³ 掀起三维编程风
- poj 2594 Treasure Exploration
- NewstartHA 配置技巧
- elasticsearch地理位置查询
- VnlnHub Momentum
- PanoSim仿真模型--交通流模型
热门文章
- TabBarItem的Badge
- PageOffice实现js执行在线编辑时Word文档中的宏命令
- [AH2017/HNOI2017]礼物(FFT)
- 微积分19--定积分的几何应用
- 轻松自动化---selenium-webdriver(python) (七)
- Solaris中创建磁盘集报”rpc.metad:Permission denied”错误
- 老公,等儿子长大,我去天堂找你(推荐)
- crontab命令简介
- mysql创建索引要加index吗_MySql创建索引,添加索引
- vhdl变量赋初值_1.6 C++变量