Python函数定义及传参方式详解(4种)


Posted in Python onMarch 18, 2019

一、函数初识

1、定义:将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。 

2、好处:代码重用;保持一致性;可扩展性。

3、示例如下:

# -*-coding:utf-8-*-
def sayHello():
  print('Hello world!')
sayHello()

二、函数传参方式

如上面的实例是函数中最基础的一种,是不传参数的,说到这里,我们有必要了解一下何为函数参数:

1、函数参数:

形参变量: 只有在被调用时才分配内存单元,调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。

函数调用结束返回主调函数后不能再使用该形参变量

实参:可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在进行函数调用,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

2、函数传参的分类

<1> 位置参数

位置参数顾名思义,就是调用函数时传的实参与函数的形参位置上一一对应的参数。

如下实例:

#位置参数
print('\n以下是位置参数传值\n')
def stu_info(name,age,major,country):
  print('--------学生信息-------')
  print('姓名:',name)
  print('年龄:',age)
  print('专业:',major)
  print('国籍:',country)

stu1 = stu_info('Jack',21,'Chinese','CN') # 实参依次与函数中的name,age,major,country对应
stu2 = stu_info('Frank',20,'JP','UN')
stu3 = stu_info('Rose',19,'Art','UK')

<2> 默认参数

默认参数就有点不同了,是你在函数形参中定义好的,当实参中未传对应的参数时,它就派上用场了,默认给你加上。是不是有点贴心呢?

注意:默认参数,必须放在位置参数之后,否则会出错

实例如下:

#默认参数
print('\n以下是默认参数传值\n')
def stu_info(name,age,major,country = 'CN'):# country设为了默认参数,必须放在位置参数之后,否则会出错
  print('--------学生信息-------')
  print('姓名:',name)
  print('年龄:',age)
  print('专业:',major)
  print('国籍:',country)

stu1 = stu_info('Jack',21,'Chinese') # 此处未传对应的值,但形参中已经定义了,所以不用担心找不家了!
stu2 = stu_info('Frank',20,'JP')# 你也是的
stu3 = stu_info('Rose',19,'Art','UK')
# 既然你已经传参了,就随你了。

<3> 关键参数

正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可(指定参数名的参数就叫关键参数),但记住一个要求就是,关键参数必须放在位置参数(以位置顺序确定对应关系的参数)之后。

还是奉上实例:

#关键参数,不能重复赋值,且指定的参数应在位置参数之后

print('\n以下是关键参数传值\n')
def stu_info(name,age,major,country = 'CN'): #
  print('--------学生信息-------')
  print('姓名:',name)
  print('年龄:',age)
  print('专业:',major)
  print('国籍:',country)

stu1 = stu_info('Jack',21,'Chinese')
stu2 = stu_info('Frank',20,major='JP') # major即为关键参数,单独指定,但必须放在位置参数之后
stu3 = stu_info('Rose',19,'Art',country='UK')

<4> 非固定传参

这种传参方式可就大有讲究了,花样可谓繁多,自然本领也就大多了,不信往下看。

可以细分为两类:

非固定传参方式一:

可同时指定多个用户,传过来的所有参数打包成元祖。如下:

#-*-coding:utf-8-*-

#方式一
def send_alert(msg,*users): # '*users‘ 表示非固定传参,可同时指定多个用户,传过来的所有参数打包元祖
  for u in users:
    print('报警!请及时查看...',u,msg)
send_alert('你的系统已濒临崩溃!','cc','hyt','yuq','dy')

#方式二
def send_alert(msg,*users): # '*users‘ 表示非固定传参,可同时指定多个用户,传过来的所有参数打包元祖
  for u in users:
    print('报警!请及时查看...',u,msg)
send_alert('你的系统已濒临崩溃!',*['cc','hyt','yuq','dy'])

'''
  如果列表前不加 * 号,整个列表就会被当作元组里的一个元素,
加 * 号后就相当于列表里每个元素都是元祖的一个元素了。就会向元组里的每个成员都发出讯息了。
'''

def send_alert(msg,*users,age):
  for u in users:
    print('报警!请及时查看...',u,msg)
send_alert('你的系统已濒临崩溃!','sc','qh',age=22)

'''
'*users‘此时会默认获取前一个位置参数之后所有的元素,若传参时最后不指定关键参数就会报错,age无法获取传值
'''

非固定传参方式二:

 

可同时指定多个用户,传过来的所有参数打包成元组或字典。如下:

#-*-coding:utf-8-*-

def func(name,*args,**kwargs): # 形参依次是位置参数,元组,字典
  print(name,args,kwargs)

func('Hope',22,'CN','tomorrow') #输出:Hope (22, 'CN', 'tomorrow') {}
func('Try',21,'will',addr='HG',num=666) #输出:Try (21, 'will') {'addr': 'HG', 'num': 666}

dit = {'major':'Math','interest':'reading'}
func('want',*['day','up'],**dit) #输出:want ('day', 'up') {'major': 'Math', 'interest': 'reading'}

小伙伴们到这里,Python中函数常用的传参方式你就都了解了?是不是又长姿势了呢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
Python开发的HTTP库requests详解
Aug 29 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
python批量爬取下载抖音视频
Jun 17 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Python解析json代码实例解析
Nov 25 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
Feb 13 Python
如何将json数据转换为python数据
Sep 04 Python
Python中super函数用法实例分析
Mar 18 #Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 #Python
python+pyqt5编写md5生成器
Mar 18 #Python
python+pyqt5实现图片批量缩放工具
Mar 18 #Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 #Python
PyQt5实现简易计算器
May 30 #Python
Python实现简单层次聚类算法以及可视化
Mar 18 #Python
You might like
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
vue组件生命周期详解
2017/11/07 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
python 连接各类主流数据库的实例代码
2018/01/30 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Python理解递归的方法总结
2019/01/28 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
幼儿教师寄语集锦
2014/04/03 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
自我工作评价范文
2015/03/06 职场文书
研讨会致辞
2015/07/31 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android