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

 更新时间:2019年03月18日 11:09:47   作者:暮光微凉  
这篇文章主要介绍了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中函数常用的传参方式你就都了解了?是不是又长姿势了呢!

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

相关文章

  • python中json、字典的区别以及相互转换方法

    python中json、字典的区别以及相互转换方法

    在Python中我们经常会用到JSON格式的数据,而将JSON格式转化为Python的字典类型是一种常见的操作,这篇文章主要给大家介绍了关于python中json、字典的区别以及相互转换方法的相关资料,需要的朋友可以参考下
    2023-11-11
  • 一分钟带你上手Python调用DeepSeek的API

    一分钟带你上手Python调用DeepSeek的API

    最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下Python如何快速上手调用DeepSeek API吧
    2025-02-02
  • python 时间的访问和转换 time示例小结

    python 时间的访问和转换 time示例小结

    Python 的 time 模块提供了各种与时间处理相关的功能,包括获取当前时间、操作日期/时间以及执行与时间相关的各种其它功能,这篇文章主要介绍了python 时间的访问和转换 time,需要的朋友可以参考下
    2024-05-05
  • 如何基于opencv实现简单的数字识别

    如何基于opencv实现简单的数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别,下面这篇文章主要给大家介绍了关于如何基于opencv实现简单的数字识别,需要的朋友可以参考下
    2021-09-09
  • Keras搭建M2Det目标检测平台示例

    Keras搭建M2Det目标检测平台示例

    这篇文章主要为大家介绍了Keras搭建M2Det目标检测平台实现的源码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python request要求接口参数必须是json数据的处理方式

    python request要求接口参数必须是json数据的处理方式

    这篇文章主要介绍了python request要求接口参数必须是json数据的处理方式,Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-08-08
  • Python中的字符串替换操作示例

    Python中的字符串替换操作示例

    这篇文章主要介绍了Python中的字符串替换操作示例,包括一则使用字符串模板string.Template的例子及一则使用正则表达式的例子,需要的朋友可以参考下
    2016-06-06
  • Python图像处理库PIL的ImageGrab模块介绍详解

    Python图像处理库PIL的ImageGrab模块介绍详解

    这篇文章主要介绍了Python图像处理库PIL的ImageGrab模块介绍详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • python密码学RSA密码加密教程

    python密码学RSA密码加密教程

    这篇文章主要为大家介绍了python密码学RSA密码加密教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python实现局部图像放大

    python实现局部图像放大

    这篇文章主要介绍了python实现局部图像放大,画中画形式展示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论