Python函数的参数类型和使用技巧详解

 更新时间:2023年08月18日 11:04:30   作者:天元浪子  
这篇文章主要介绍了Python函数的参数类型和使用技巧详解,函数指通过专门的代码组织,用来实现特定功能的代码段,具有相对的独立性,可以被其他代码重复调用,需要的朋友可以参考下

Python函数的参数类型和使用技巧详解

先来定义一个计算体重指数(BMI)的函数。

体重指数就是体重与身高的平方之比,其中体重以千克为单位,身高以米为单位。

 def bmi(height, weight, name):
	i = weight/height**2
	print('%s的体重指数为%0.1f'%(name, i))
 bmi(1.75, 75, 'Xufive')
#Xufive的体重指数为24.5

自定义函数bmi有三个参数,每个参数都有明确的含义。

调用这个函数时,必须按照定义的顺序传入这三个参数,缺一不可。

这也是Python函数最基本的参数传递规则。

接下来把bmi函数稍微改造一下,给name参数指定一个默认值。

 def bmi(height, weight, name='您'):
	i = weight/height**2
	print('%s的体重指数为%0.1f'%(name, i))
 bmi(1.75,75) # 可以不传递name参数,使用默认值
#您的体重指数为24.5
 bmi(1.75,75,'Xufive') # 也可以传递name参数
#Xufive的体重指数为24.5

现在bmi函数就有了两种类型的参数:weight和height,它们是函数调用时必不可少的参数,且顺序必须与函数定义的保持一致,这样的参数称为 位置参数

name是函数调用时可有可无的参数(如未提供,则使用默认值),这样的参数称为 默认参数

默认参数可以有多个。

为了使结果更准确,可以考虑使用最近一段时期内多个体重的均值来计算体重指数,这就意味着需要输入多个体重值。

我们固然可以一个体重的元组或列表传给weight,但这样weight和height就不是同一种类型了,在形式上失去了美感,在使用时也容易产生误会。最好的方式就是让函数可以接受不确定个数的体重参数。

 def bmi(height, *args, name='您'):
	i = (sum(args)/len(args))/height**2
	print('%s的体重指数为%0.1f'%(name, i))
 bmi(1.75, 75, name='xufive')
#xufive的体重指数为24.5
 bmi(1.75, 75, 74)
#您的体重指数为24.3
 bmi(1.75, 75, 74, 75.5, 74.7, name='xufive')
#xufive的体重指数为24.4

实际上,像下面这样调用函数也没有问题。

 weight = [75, 74, 75.5, 74.7]
 bmi(1.75, *weight, name='xufive')
#xufive的体重指数为24.4

这下就有点复杂了,bmi函数有了三种类型的参数。除了位置参数和默认参数,又多了一种 可变参数 ,即bmi函数可以接受不限数量的参数。在函数定义时,可变参数名前面冠以“*”号;在函数体内,可变参数相当于一个元组。

如此一来,就产生了一个新的问题:三种类型的参数应该以怎样的顺序被定义呢?

位置参数排在首位,这一点没有异议。默认参数原则上放在最后,但调用时必须加上参数名(如上面的例子),否则函数无法区分究竟是可变参数还是默认参数。

默认参数也可以放在可变参数之前(不建议这样做),但调用时不能使用参数名,即便使用默认值也不能省略参数,否则函数会用后面的可变参数的第一个值(如果有的话)强制为其赋值。

下面说一说更复杂的情况。除了上面介绍的三种类型的参数外,Python函数还支持第四种类型的参数: 关键字参数

关键字参数由不限数量的键值对组成。在函数定义时,关键字参数名前面冠以“**”号;在函数体内,关键字参数相当于一个字典。

 def bmi(height, *args, name='您', **kwds):
	i = (sum(args)/len(args))/height**2
	print('%s的体重指数为%0.1f'%(name, i))
	for key in kwds:
		print('%s的%s是%s'%(name, key, str(kwds[key])))
 bmi(1.75, 75, 74, 75.5, 74.7, name='Xufive')
Xufive的体重指数为24.4
 bmi(1.75, 75, 74, name='Xufive', 性别='男', 爱好='摄影')
#Xufive的体重指数为24.3
#Xufive的性别是男
#Xufive的爱好是摄影
 bmi(1.75, 75, 74, 性别='男', 爱好='摄影', name='Xufive')
#Xufive的体重指数为24.3
#Xufive的性别是男
#Xufive的爱好是摄影
 bmi(1.75, 75, 74, 75.5, 74.7, 性别='男', 爱好='摄影')
#您的体重指数为24.4
#您的性别是男
#您的爱好是摄影

如果一个函数同时具备了上述四种类型的参数,函数定义时参数的正确顺序应该是位置参数排在首位,可变参数次之,默认参数再次之,关键字参数排在末尾。

函数调用时,如果需要指定默认参数,其参数名不能省略,位置在可变参数之后,可以在关键字参数之前,也可以在其后,也可以混杂其中。

到此这篇关于Python函数的参数类型和使用技巧详解的文章就介绍到这了,更多相关Python函数的参数类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pyqt5主窗口按键弹出子窗口的实现

    pyqt5主窗口按键弹出子窗口的实现

    本文主要介绍了pyqt5主窗口按键弹出子窗口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 解决Pycharm模块安装慢问题的两种方法

    解决Pycharm模块安装慢问题的两种方法

    很多人在学习Python时,都会使用PyCharm这个编译器,下面这篇文章主要给大家介绍了关于解决Pycharm模块安装慢问题的两种方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Python2升级/安装pip报错问题及解决

    Python2升级/安装pip报错问题及解决

    这篇文章主要介绍了Python2升级/安装pip报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Python调整数组形状如何实现

    Python调整数组形状如何实现

    这篇文章主要介绍了Python调整数组形状如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • 详解python uiautomator2 watcher的使用方法

    详解python uiautomator2 watcher的使用方法

    这篇文章主要介绍了python uiautomator2 watcher的使用方法,该方是基于uiautomator2如下版本进行验证,本文给大家介绍的非常详细,需要的朋友可以参考下
    2019-09-09
  • 详解python数据结构之栈stack

    详解python数据结构之栈stack

    这篇文章主要介绍了详解python数据结构之栈stack,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • 详解Python中映射类型的内建函数和工厂函数

    详解Python中映射类型的内建函数和工厂函数

    这篇文章主要介绍了详解Python中映射类型的内建函数和工厂函数,目前Python的内建映射类型只有字典一种,需要的朋友可以参考下
    2015-08-08
  • Python unittest单元测试openpyxl实现过程解析

    Python unittest单元测试openpyxl实现过程解析

    这篇文章主要介绍了Python unittest单元测试openpyxl实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python深拷贝与浅拷贝引用

    Python深拷贝与浅拷贝引用

    这篇文章主要介绍了Python深拷贝与浅拷贝引用,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用,下文具体的相关介绍需要的小伙伴可以参考一下
    2022-04-04
  • Python实现多子图绘制系统的示例详解

    Python实现多子图绘制系统的示例详解

    这篇文章主要介绍了如何利用python实现多子图绘制系统,文中的示例代码讲解详细,具有一定的的参考价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-09-09

最新评论