Python函数的参数常见分类与用法实例详解


Posted in Python onMarch 30, 2019

本文实例讲述了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 字典dict使用介绍
Nov 30 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
python的中异常处理机制
Aug 30 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
Django ModelForm组件使用方法详解
Jul 23 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
基于python3实现倒叙字符串
Feb 18 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
Python下划线5种含义代码实例解析
Jul 10 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 #Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 #Python
详解python读取和输出到txt
Mar 29 #Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 #Python
详解Python函数式编程—高阶函数
Mar 29 #Python
python实现AES加密与解密
Mar 28 #Python
python实现计数排序与桶排序实例代码
Mar 28 #Python
You might like
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
分享3个php获取日历的函数
2015/09/25 PHP
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
python使用Matplotlib画条形图
2020/03/25 Python
Python高斯消除矩阵
2019/01/02 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
简单了解Django项目应用创建过程
2020/07/06 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
美术教学感言
2014/02/22 职场文书
市场开发计划书
2014/05/07 职场文书
学校课外活动总结
2014/05/08 职场文书
法制工作总结2015
2015/07/23 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android