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中for循环详解
Jan 17 Python
python返回昨天日期的方法
May 13 Python
python自动zip压缩目录的方法
Jun 28 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
python获取代码运行时间的实例代码
Jun 11 Python
Django forms组件的使用教程
Oct 08 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
python/golang实现循环链表的示例代码
Sep 14 Python
Python集合的基础操作
Nov 01 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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
星际争霸秘籍
2020/03/04 星际争霸
PHP图片上传类带图片显示
2006/11/25 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
Js的MessageBox
2006/12/03 Javascript
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
Python中偏函数用法示例
2018/06/07 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
2014年计生标语
2014/06/23 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
个人党性分析总结
2015/03/05 职场文书
运动会致辞稿
2015/07/29 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android