python中如何定义带走参数的函数(Python函数定义及传参方式详解4种)
python中如何定义带走参数的函数
Python函数定义及传参方式详解4种一、函数初识
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中函数常用的传参方式你就都了解了?是不是又长姿势了呢!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://www.cnblogs.com/schut/p/8414899.html
- django 页面传参数(django query模块)
- python中如何定义带走参数的函数(Python函数定义及传参方式详解4种)
- 在linux中实现可加载的内核模块(Linux实现驱动模块传参过程解析)
- springboot怎么设置docker(Docker如何给Springboot项目动态传参的实现方法)
- react跳转页面并传参数(react 跳转后路由变了页面没刷新的解决方案)
- 关于队徽 你了解这些么 二(关于队徽你了解这些么)
- 冬天来了手脚冰凉 真不是因为上辈子你是折翼的天使(冬天来了手脚冰凉)
- 0 1 岁婴儿最强作息指南,照着做养出天使宝宝(01岁婴儿最强作息指南)
- 沪上这16所高校 萌新 礼包开箱 哪一款让你心动(沪上这16所高校萌新)
- 她救了被绑架的他,而这一切竟是一场阴谋...(她救了被绑架的他)
- 冬季养殖这6种阴生植物,方便又好养,你家有么(冬季养殖这6种阴生植物)
热门推荐
- mysql拆分字符串(MySQL 字符串拆分操作含分隔符的字符串截取)
- html5单选项怎么调选项间距(html5实现输入框fixed定位在屏幕最底部兼容性)
- mysql查询count很慢(MySQL COUNT函数的使用与优化)
- JS中instanceof与typeof的区别有哪些
- mysql数据库丢失怎么办(MySQL 数据丢失排查案例)
- css 中border基本语法(详解CSS的border边框属性及其在CSS3中的新特性)
- canvas时钟代码(canvas实现烟花的示例代码)
- php有几种模式(php 策略模式原理与应用深入理解)
- python解析身份证号(python验证身份证信息实例代码)
- laravel框架的业务流程顺序(Laravel+Dingo/Api 自定义响应的实现)