Python——函数的参数

1.位置参数

位置参数可以在函数中设置一个或者多个参数,但是必须有对应个数的值传入该函数才能成功调用,例如:

def power(x):return x*xprint(powr(5))

如果传入的值与对应函数设置的位置参数不符合,则会报错:

Traceback (most recent call last):
  File "D:\Python\pythonProject\work03.py", line 107, in <module>
    print(power(5))
TypeError: power() missing 1 required positional argument: 'n'

def power(x,n):s = 1while n > 0:n = n - 1s = s * xreturn sprint(powr(5))

正确的调用方式应为:

def power(x,n):s = 1while n > 0:n = n - 1s = s * xreturn sprint(power(5,3))

传入参数的类型根据调用函数时传入的值所决定,例如:

def power(x):return xn=[1,5,6,8,7]
print(power(n))

2.默认值参数

当参数中有值的时候,参数就是默认值参数。也就是说,如果在调用的时候,给这个参数 赋值了,则按照赋值情况算,如果没有赋值,也不会报错,按照默认值算。

在以上位置参数中,如果调用函数时,传入的值个数少于函数设置的位置参数个数,就会报错,这时候默认参数就派上用场了。

def power(x, n=2):s = 1while n > 0:n = n - 1s = s * xreturn sprint(power(5))//此时传入5时,与函数power(5,2)方式是相同的

当然默认值参数的值也是可以改变的,我们可以传入值对其进行改变。

从上面的例子可以看出,默认参数可以简化函数的调用。设置默认参数时,有几点要注意:

一是必选参数在前,默认参数在后,否则Python的解释器会报错;

二是如何设置默认参数:

当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

使用默认参数有什么好处?最大的好处是能降低调用函数的难度。

def enroll(name, gender, age=6, city='Beijing'):print('name:', name)print('gender:', gender)print('age:', age)print('city:', city)//以下四种调用方式都是可以的
enroll('sarah','F')
enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')
enroll('Bob', 'M', age=7,city='sichuan')

3.可变参数

可变参数,*变量来表示可变参数,表示可以传递实际参数,也可以不传递参数,args以元组的形式将剩余参数封装起来

在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

def calc(*numbers):sum = 0for n in numbers:sum = sum + n * nreturn sum以下函数调用方式都是可以的
calc()
calc(1,2,5,6,5)
calc(4,5,6,7)n=(4,5,6,5,8,7)
calc(*n)//注意此处传入参数必须使用*n,不能直接使用n。
calc(n[0],n[2],n[1])

4.关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

​
def person(name, age, **kw):print('name:', name, 'age:', age, 'other:', kw)以下函数调用方式都是可以的
person('Michael', 30)
person('Bob', 35, city='Beijing')
person('Adam', 45, gender='M', job='Engineer')extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)
​

5.命名关键字参数

对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数。这种方式定义的函数如下:

def person(name, age, *, city, job):print(name, age, city, job)

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

def person(name, age, *args, city, job):print(name, age, args, city, job)

命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:

由于调用时缺少参数名cityjob,Python解释器把这4个参数均视为位置参数,但person()函数仅接受2个位置参数。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: person() takes 2 positional arguments but 4 were given

person('Jack', 24, 'Beijing', 'Engineer') //此种函数调用会出错,因为传参格式错误

命名关键字参数可以有缺省值,从而简化调用:

def person(name, age, *, city='Beijing', job):print(name, age, city, job)person('Jack', 24, job='Engineer')

使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数

6.参数的组合

 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

def f1(a, b, c=0, *args, **kw):print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)def f2(a, b, c=0, *, d, **kw):print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)//调用
f1(1, 2)
f1(1, 2, c=3)
f1(1, 2, 3, 'a', 'b')
f1(1, 2, 3, 'a', 'b', x=99)
f2(1, 2, d=99, ext=None)print("通过tuple调用:")
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1(*args, **kw)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

test-02-test case generate 测试用例生成 EvoSuite 介绍

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 拓展阅读 自动生成测试用例 什么…

用LM Studio:2分钟在本地免费部署大语言模型,替代ChatGPT

你想在本地使用类似ChatGPT 的大语言模型么&#xff1f;LM Studio 可以帮你2分钟实现ChatGPT的功能&#xff0c;而且可以切换很多不同类型的大语言模型&#xff0c;同时支持在Windows和MAC上的PC端部署。 LM Studio是一款面向开发者的友好工具&#xff0c;特别适合那些想要探索…

【促销定价】背后的算法技术 2 - 数据预处理生成

【促销定价】背后的算法技术 2 - 数据预处理生成 01 数据探查02 数据清洗03 数据聚合04 数据补全05 小结参考文献 导读&#xff1a;在日常生活中&#xff0c;我们经常会遇见线上/线下商家推出各类打折、满减、赠品、新人价、优惠券、捆绑销售等促销活动。一次成功的促销对于消费…

python -- pyQt5中 样式设置

一、父控件设置样式表后对子控件产生影响&#xff0c;控制styleSheet的作用范围 https://blog.csdn.net/qq_31073871/article/details/90288625 QFrame 作为容器&#xff0c;放入其他多种部件&#xff0c;里面的边框都生效 在类名后面用 #号串接变量名&#xff0c;子控件不…

Required request parameter ‘ids‘ for method parameter type List is not present]

在写delete方法的时候&#xff0c;出现了bug 于是将RequestParam换成PathVariable 两者有何区别&#xff1f; pathVariable和RequestParam的区别 在Spring MVC框架中&#xff0c;PathVariable 和 RequestParam 是两种用于从HTTP请求中获取参数的注解&#xff0c;它们的区别…

决策树:理解机器学习中的关键算法

决策树&#xff1a;理解机器学习中的关键算法 决策树是一种流行而强大的机器学习算法&#xff0c;它从数据中学习并模拟决策过程&#xff0c;以便对新的未知数据做出预测。由于其直观性和易理解性&#xff0c;决策树成为了分类和回归任务中的首选算法之一。在本文中&#xff0…

2024最新外贸建站:SiteGround主机购买使用及自建外贸独立站教程

原文来源&#xff1a;https://guomuyu.com/building-website-siteground.html 在开始之前&#xff0c;让我们先了解一下什么是外贸独立站。外贸独立站简单来说就是一个拥有独立域名的网站&#xff0c;它不依赖于第三方平台&#xff08;如阿里巴巴、亚马逊等&#xff09;的网站…

Python--闭包

在 Python 中&#xff0c;闭包是一种函数&#xff0c;它能够记住并访问其所在词法作用域&#xff08;即定义该函数的作用域&#xff09;中的变量&#xff0c;即使该函数在其词法作用域之外被调用。要形成闭包&#xff0c;需要满足以下几个条件&#xff1a; 必须有一个内嵌函数&…

网页设计与网站建设作业html+css+js,一个简易的游戏官网网页

一个简易的游戏网页 浏览器查看 目录结构 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

重学Java 5 idea详细使用和运算符

慢点跑&#xff0c;前面的路不好走 ——24.1.14 一、IDEA的使用 1.idea的介绍 1.概述&#xff1a;开发工具 2.特点&#xff1a; a、idea是java写的&#xff0c;所以本地上必须有正确的jdk环境 b、idea自动保存 c、不用我们打开dos命令窗口执行javac和java命令 d、idea有强大的…

Mnajora 使用deb包安装软件

说明 Mnajora 安装deb软件包主要有两种方式 可以使用dpkg 直接安装也可是使用debtap将deb软件包转换成 使用dpkg sudo pacman -S dpkg #安装dpkgsudo dpkg -i ###.deb #使用dpkg安装deb软件包和在ubuntu上是一样的 安装成功 使用debtap debtap是一个用于将.deb包转换为A…

第 2 课 ROS 系统安装和环境搭建

文章目录 方法一&#xff1a;一键安装&#xff08;推荐&#xff09;方法二&#xff1a;逐步安装&#xff08;常规安装方式&#xff09;1.版本选择2.检查 Ubuntu 的软件和更新源3.设置 ROS 的下载源3.1 设置国内下载源3.2 设置公匙3.3 更新软件包 4. 安装 ROS5. 设置环境变量6. …

鸿蒙Harmony-PersistentStorage--持久化存储UI状态储详解

用简单的心境&#xff0c;对待复杂的人生&#xff0c;方能看淡得失&#xff0c;从容入世&#xff0c;潇洒自如&#xff0c;心变得简单了&#xff0c;世界也就简单了 目录 一&#xff0c;定义 二&#xff0c;限制条件 三&#xff0c;使用 一&#xff0c;定义 LocalStorage和App…

midjournery教程(可以在微信中免费使用)

图片比例 9:16 --ar 9:16 图片风格化 --s 1000 --stylize 1000 版本 Midjourney 定期发布新模型版本以提高效率、一致性和质量。默认为最新型号&#xff0c;但可以使用--version或--v参数或使用/settings命令并选择型号版本来使用其他型号。不同的模型擅长处理不同类型的图…

爬虫-6-数据提取-beautifulsoup4

#声明:本文仅供学习。 (●—●)

12.3在应用层使用SPI总线

在SPI总线驱动框架中提供了一个spidev 的字符设备驱动&#xff0c;在应用层可以通过它来访问SPI总线。 应用层访问SPI总线的步骤 编写spidev设备树节点&#xff0c;在SPI总线的设备树节点下添加spidev设备的树节点&#xff0c;设备树示例如下所示&#xff1a; spidev0: spid…

“华为杯“第四届中国研究生数学建模竞赛-D题:邮路规划与邮车调度

目录 摘 要&#xff1a; 1.问题的重述 2.模型的假设与符号说明 2.1 针对本问题&#xff0c;本文做出如下假设 2.2 符号说明 3.问题的数学模型 4.问题的求解 4.1 问题一的求解 4.1.1 最少邮车数的求法 4.1.2 邮路规划及路径选择 4.1.3 问题的求解结果 4.2 问题二的求…

隧道应用3-Cobalt Strike正反向连接多层内网

Cobalt Strike 正向连接多层内网&#xff1a; teamserver 不允许访问 B &#xff0c;但是服务器上A有权限&#xff08; A 与 B 在同一网段&#xff09;&#xff0c;若 A 服务上已经有了 cs 的后门&#xff0c;则可以通过 cs 的正向连接去连接 B &#xff0c;在 teamserver 通…

datavrap可视化设计器使用手册

datavrap使用手册 一、产品简介 datavrap是一个动态数据可视化设计器&#xff0c;通过简单配置生成可视化视频&#xff0c;图片和gif。 站长&#xff1a;B站UP&#xff0c;夹克mnnm 这个产品的灵感是在做B站视频时&#xff0c;觉得每次通过修改代码录屏实现视频制作太过于繁琐&…

基于Matlab/Simulink的MIL仿真验证解决方案

文章目录 需求追溯 虚拟环境 模型检查 仿真验证 测试报告 参考文献 针对模型开发阶段的ECU算法&#xff0c;可以很直接地将其与虚拟车辆模型连接起来&#xff0c;通过MIL对其进行验证和确认。可以在开发过程的早期检测到设计错误和不正确的需求&#xff0c;也有助于安全地…