本文实例讲述了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数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
本文向大家介绍python 常见字符串与函数的用法详解,包括了python 常见字符串与函数的用法详解的使用技巧和注意事项,需要的朋友参考一下 strip去除空格 大小写 位置和比较 分隔和连接 常用判断 函数 函数定义与默认参数 可变参数 关键字参数 命名关键字参数 复杂情况 函数可以作为参数 递归 把一个大问题分解成同样结构的小问题, 然后利用小问题的解得出大问题的解 总结 以上所述是小编给大
本文向大家介绍Python函数装饰器常见使用方法实例详解,包括了Python函数装饰器常见使用方法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python函数装饰器常见使用方法。分享给大家供大家参考,具体如下: 一、装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所以我们应该遵循开放封闭的原则。 也就是说:我们必须找
本文向大家介绍Python函数参数分类原理详解,包括了Python函数参数分类原理详解的使用技巧和注意事项,需要的朋友参考一下 一、参数的定义 1、函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开 案列: 2、带参数的函数调用: 函数定义了参数,那么调用函数的时候就需要传入参数 add_num(11,22)
本文向大家介绍Python中常用的高阶函数实例详解,包括了Python中常用的高阶函数实例详解的使用技巧和注意事项,需要的朋友参考一下 前言 高阶函数指的是能接收函数作为参数的函数或类;python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. lambda 当在使用一些函数的时候,我们不需要显式定义函数名称,直接传入lambda匿名函数即可。lambda匿名函数通常和其他函数搭配使用
本文向大家介绍Python定义函数功能与用法实例详解,包括了Python定义函数功能与用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python定义函数功能与用法。分享给大家供大家参考,具体如下: 1.函数的意义 一般数学上的函数是,一个或者几个自变量,通过某种计算方式,得出一个因变量。 y = f(x) 在Python中,为了使操作更加简洁,就引入了函数这个概念。 Pyth
本文向大家介绍Python 含参构造函数实例详解,包括了Python 含参构造函数实例详解的使用技巧和注意事项,需要的朋友参考一下 本篇博文主要介绍在Python3中如何构造含参构造函数 样例如下: 输出结果毫无疑问是 admin\n 123\n 通过样例可以看到主要是复写了init 函数的方式来完成的。 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!