总结Python函数参数的六种类型
作者:python老鸟 发布时间:2021-12-21 02:55:56
前言:
Python函数之所以很好用,还有一点就的能传递参数实现不同场景的灵活使用,对于函数参数的类型小编总结了6种不同的形式。下面来一一学习下。
首先来一个问题:使用一个函数来打印3*2,3*3,3*4的结果。
正常情况下大家可能直接封装一个函数,在函数体内来完成这三个数的乘法,如下:
def p_num():
print(3 * 2)
print(3 * 3)
print(3 * 4)
p_num()
返回结果:
6
9
12
上面的结果实现了题目要求,这时候如果再来一个问题:用一个函数输出5*2,5*3,5*4的结果。
这时候你就会发现,你必须再封装一个函数来实现这样的效果,但是很多同学会发现,这个效果和我们上面的效果很相似。有的同学就会想到,第一题函数中的3我们可不可以用一个变量来代替,恭喜你,python也是这样想的,所以就引入参数这个概念,我们来看看python是怎么实现的吧。
一、函数的单参数传递
def p_num(n): # 设置一个形参n
print(n * 2)
print(n * 3)
print(n * 4)
p_num(5) # 传递实参为5
上面函数中的n就是形参,你也可以把它理解为一个变量名,调用函数的时候小括号中要传入实参,你可以把他理解为给上面形参(变量)赋的值。这样你给n赋什么值,那函数体内参与运算的就是什么值,这样一来我们就能实现不同的数字实现上面的相同的方法了,一个函数搞定。
二、多参数传递
换种情况,如果我们想得到两个数字相乘和相减的值,而且在不同的场景中这两个数会随时变化,那又怎么实现呢?估计有同学已经想到了,只要把上面的函数中一个形参变成两个就可以了,是的,就是这样的。
下面来演示一下:
def test():
print(5 * 3)
print(5 - 3)
test()
# 1.固定参数def test(m, n):
print(m * n)
print(m - n)
test(5, 3)
test(985, 211)
三、关键字参数
通过一个函数把一个字符串反复输出n次,注意这里的n代表未知次数,字符串也是未知字符串,我们从这个题目就可以看出来,一定属于一个多参数函数。那么很简单就实现了,
如下:
def test(num, str):
print(str * num)
test('www.wakey.com.cn', 5)
这时候大家可以看到输出的结果也是正确的,但是我们本身是想把num=5,str='www.wakey.com.cn'
,而函数里面的参数是按照顺序穿进去的,所以虽然结果没有问题,但是在有些场景中会出现不必要的错误,比如,我们要对字符串str进行处理后再计算,就不行了,这时候,python引入关键字参数来指定形参和实参的关系。
def test(num, str):
print(str * num)
test(str='www.wakey.com.cn', num=5)
四、缺省参数
这时候出现另一种场景,就是上面的字符串在大多数情况下都是www.wakey.com.cn
,偶尔会出现其他字符串的情况,如果使用上面关键字参数的话,每次都要输入一下固定值,这样写起来比较麻烦,所以看看缺省参数是怎么解决这个问题的。
def test(num, str='www.wakey.com.cn'):
print(str * num)
test(num=5)
test(num=5, str='www')
这里的缺省参数也可以说成默认值参数,就是不传递参数的时候用自己的默认值,传递参数的时候使用传递进去的实参。
五、不定长参数 - 元组
如果一个函数不知道未来要接收多少个参数的时候可以使用一个元组来接受不定长参数,
下面来直接实现效果:
def test(*m): # 这里加了一个*号,当成元组的形式来接受参数,一般写成:*args
print(m) # 注意这里的形参不能带*号
print(type(m))
test((3, 5, 7))
test(3, 5, 7)
注意这里两个调用的结果都是元组,但是结果不太一样,
看看返回结果:
((3, 5, 7),)
<class 'tuple'>
(3, 5, 7)
<class 'tuple'>
六、不定长参数 - 字典
还有一种情况就是每个参数都用自己的含义,但是不是固定参数,这里可以借用字典的键值对特性来实现。
def test(**m): # 这里加了2个*号,当成字典的形式接受参数,一般写成:**kwargs
print(m)
print(type(m))
# print(**m) # 这里不能加**
test(a=3, b=5, c=7)
返回结果:
{'a': 3, 'b': 5, 'c': 7}
<class 'dict'>
上面两种不定长参数可以放在一起使用,表示可以接受任意参数,下面不给大家举例的,我们看看文档,很多内建方法都使用这样的写法。
def pow(*args, **kwargs): # real signature unknown
"""
Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Some types, such as ints, are able to use a more efficient algorithm when
invoked using the three argument form.
"""
pass
来源:https://blog.csdn.net/weixin_48728769/article/details/121728554


猜你喜欢
- 每个JavaScript函数都有prototype属性(javascript对象没有这个属性),这个属性引用了一个对象,这个对象就是原型对象
- 最近了解下基于 Token 的身份验证,跟大伙分享下。很多大型网站也都在用,比如 Facebook,Twitter,Google+,Gith
- 先看一下合并后的样式,表格第二行,二三四列合并官网给我们提供了span-method的方法可以进行表格合并,有4个参数返回:row,colu
- 一个ASPJPEG组件综合操作的asp类CLASS相关文章:ASP怎么谈到应用到类的?ASP中类的详细介绍(class Property G
- 场景针对园区停车信息,需要对各个公司提供的停车数据进行整合并录入自家公司的大数据平台数据的录入无外乎就是对数据的增删改查下面上一个常规的写法
- 原作者:Jonathan 翻译:charlee原文:http://f6design.com/journal/2006/10/21/the-v
- 首先找到要下载的歌曲排行榜的链接,这里用的是:https://music.163.com/discover/toplist?id=37786
- 前段时间我们部门的粉丝和布林同学都写过关于这个问题的文章。刚好阅读了关于这个问题的其他争论文章。所以顺便在这补充几点。首先说明这里讨论的是在
- 有一些问题可能会遇到同元素多列去重问题,下面介绍一种非常简单效率也很快的做法,用pandas来实现。首先我们看一下数据类型:G1 G2a b
- 获取一组href元素属性的值lst = driver.find_elements_by_class_name("ib-it-tex
- 本文实例讲述了JS实现给对象动态添加属性的方法。分享给大家供大家参考,具体如下:在工作用要用到给jd对象动态添加属性的要求,在网上找到了一种
- Cookie = { setCookie: function (name, val) { &n
- 基本语句结构if 判断条件1: 执行语句1……elif 判断条件2:
- 函数内省(function introspection)除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查
- 需求需要检查多个端口是否开放,没有找到第三方工具和服务来快速测通,就自己用python写了个脚本.原理是通过telnet来实现的,仅支持tc
- 首先祝贺Echarts顺利的从Apache毕业,多了个响亮的名字:Apache ECharts,现在的官网地址在这里:传送门,首页相当的国际
- 本文实例讲述了Python Web框架之Django框架Model基础。分享给大家供大家参考,具体如下:model是关于你的数据的单一的,确
- 打开cmder1.移动到D盘输入命令:D:2.创建文件夹λ mkdir myApp3.创建python自带的虚拟环境λ python -m
- print() 方法用于打印当前窗口的内容,支持部分或者整个网页打印。调用 print() 方法所引发的行为就像用户单击浏览器的打印按钮。通
- 本文介绍了python的构建工具setup.py,分享个大家,具体如下:一、构建工具setup.py的应用场景在安装python的相关模块和