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,一经查实,立即删除!

相关文章

自动驾驶 | 决策规划岗位校招面试中常见的数学方法整理

文章目录 前言计算几何学求解方程的根无约束优化——求解函数极值 前言 前段时间&#xff0c;我mentor面试了一个决策规划方向实习的候选人&#xff0c;这个候选人是我母校的学生&#xff0c;算是我的学弟&#xff0c;跟我一个专业&#xff0c;他的老师是我学院的院长&#xf…

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;特别适合那些想要探索…

arm64上面运行armhf程序

arm64屏上跑armhf程序 起因&#xff1a;我们之前给客户的屏是armhf的&#xff0c;由于性能问题需要升级&#xff0c;现在提供给他们的屏是arm64的。 客户之前在armhf环境开发时花钱买了armhf版本的第三方的静态库使用&#xff0c; 现在升级用arm64的话又得花钱买arm64版本的库…

Go 类型系统

1、命名类型和未命名类型 命名类型&#xff1a;类型可以通过标识符来表示&#xff0c;这种类型称为命名类型。Go语言的基本类型中有20个预声明简单类型都是命名类型&#xff0c;Go语言还有一种命名类型——用户自定义类型。 未命名类型&#xff1a;一个类型由预声明类型、关键…

【促销定价】背后的算法技术 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;它们的区别…

Flask vs Django:我该选择哪一个?

大家好&#xff01;在选择适合自己的Web开发框架时&#xff0c;Flask和Django都是开发者最喜欢的Python Web应用框架。 在本文章中给大家介绍如何正确选择以及优缺点对比&#xff0c;喜欢记得收藏、关注、点赞。 一&#xff0c;Flask Flask是一个轻量级的Web应用框架&#x…

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

决策树&#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; 必须有一个内嵌函数&…

介绍 QT 的 QGraphicsView 和 QGraphicsScene

当绘制复杂的图形或实现交互式图形应用程序时&#xff0c;可以使用 QGraphicsView 和 QGraphicsScene 来进行绘图。 QGraphicsScene&#xff1a; QGraphicsScene 是一个场景&#xff0c;可以容纳和管理图形项&#xff08;QGraphicsItem&#xff09;。它提供了一个二维坐标系统…

网页设计与网站建设作业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…

236.【2023年华为OD机试真题(C卷)】生成哈夫曼树(优先搜索(DFS)-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

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

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

(每日持续更新)jdk api之FileFilter基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

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

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