当前位置: 首页 > news >正文

Python函数的参数

定义一个函数非常简单,但是怎么定义一个函数,需要什么参数,怎么去调用却是我们需要去思考的问题。

如同大多数语言一样(如 Java),Python 也提供了多种参数的设定(如:默认值参数、关键字参数、形参等)。使用这些参数定义出来的代码,可以让我们适应不同的开放场景,也能简化我们的代码开发工作。

默认值参数

我们创建一个函数,定义参数中一个或多个赋予默认值后,我们可以使用比允许的更少的参数去调用此函数,举个例子(注意:以下代码都使用python3.7版本):

def def_param_fun(prompt, retries=4, reminder='Please try again!'):    while True:        ok = input(prompt)        if ok in ('y', 'ye', 'yes'):            return True        if ok in ('n', 'no', 'nop', 'nope'):            return False        retries = retries - 1        if retries < 0:            raise ValueError('invalid user response')        print(reminder)        # 我们可以如下进行调用def_param_fun('Do you really want to quit?')
def_param_fun('Do you really want to quit?', 2)
def_param_fun('Do you really want to quit?', 2, 'Please, yes or no!')

如上所示,我们可以使用一个或多个参数去调用此函数,我们实际生产中,很多情况下会赋予函数参数默认值的情形,因此,合理使用此种参数形式可以简化我们很多工作量。

重要:使用默认值参数时,如果我们的默认值是一个可变对象时,我们调用函数可能出现不符合我们预期的结果。如下:​​​​​​​

def f(a, l=[]):    l.append(a)    return l    # 此时调用函数print(f(1))print(f(2))print(f(3))
# 返回值# [1]# [1, 2]# [1, 2, 3]

这是由于函数在初始化时,默认值只会执行一次,所以在默认值为可变对象(列表、字典以及大多数类实例),我们可以如下操作:​​​​​​​

def f(a, l=None):    if l is None:        l = []    l.append(a)    return l
# 再次调用函数print(f(1))print(f(2))print(f(3))
# 返回值# [1]# [2]# [3]

可变参数

可变参数也就是我们对于函数中定义的参数是可以一个或多个可以变化的,其中 *args代表着可以传入一个list或者tuple, **args代表着可以传入一个dict。举个例子:​​​​​​​

def variable_fun(kind, *arguments, **keywords):    print("friend : ", kind, ";")    print("-" * 40)    for arg in arguments:        print(arg)    print("-" * 40)    for kw in keywords:        print(kw, ":", keywords[kw])        # 函数调用variable_fun("xiaoming",             "hello xiaoming", "nice to meet you!",            mother="xiaoma",            father="xiaoba",            son="see you")            # 输出结果first arg:  xiaoming ...----------------------------------------hello nice to meet you!----------------------------------------mother : xiaomafather : xiaobason : see you

我们还可以使用下面的方式进行调用,得到上面相同的结果:​​​​​​​

list01 = ["hello xiaoming", "nice to meet you!"]dict01 = {'mother': 'xiaoma', 'father': 'xiaoba', 'son': 'see you'}variable_fun("xiaoming", *list01, **dict01)

以上其实是python的解包操作,和java类似。

关键字参数

关键字参数允许你调用函数时传入0个或任意个含参数名的参数,这样可以让我们灵活的去进行参数的调用。举个例子:​​​​​​​

# 借用官网例子def key_fun(voltage, state='a stiff', action='voom', type='Norwegian Blue'):    print("-- This key_fun wouldn't", action, end=' ')    print("if you put", voltage, "volts through it.")    print("-- Lovely plumage, the", type)    print("-- It's", state, "!")
# 函数调用  key_fun(1000)                                          # 1 positional argumentkey_fun(voltage=1000)                                  # 1 keyword argumentkey_fun(voltage=1000000, action='VOOOOOM')             # 2 keyword argumentskey_fun(action='VOOOOOM', voltage=1000000)             # 2 keyword argumentskey_fun('a million', 'bereft of life', 'jump')         # 3 positional argumentskey_fun('a thousand', state='pushing up the daisies')  # 1 positional, 1 keyword

注意不可以重复传值,否则会报如下错误:​​​​​​​

# TypeError: key_fun() got multiple values for argument 'voltage'key_fun(100, voltage=1000)                             # error

总结

本节主要简单的介绍了python中函数参数的使用,设定的方式可以配合使用,但是也不要过多的去设计,否则会造成函数的可读性变的很差。

相关文章:

Python函数的参数

定义一个函数非常简单&#xff0c;但是怎么定义一个函数&#xff0c;需要什么参数&#xff0c;怎么去调用却是我们需要去思考的问题。 如同大多数语言一样&#xff08;如 Java&#xff09;&#xff0c;Python 也提供了多种参数的设定&#xff08;如&#xff1a;默认值参数、关…...

【Hive大数据】Hive分区表与分桶表使用详解

目录 一、分区概念产生背景 二、分区表特点 三、分区表类型 3.1 单分区 3.2 多分区 四、动态分区与静态分区 4.1 静态分区【静态加载】 4.1.1 操作演示 4.2 多重分区 4.2.1 操作演示 4.3 分区数据动态加载 4.3.1 分区表数据加载 -- 动态分区 4.3.2 操作演示 五、…...

C#NPOI操作Excel详解

C# NPOI 是一个基于 .NET Framework 的 Excel 和 Word 操作库。它不仅可以读取和写入 Excel 和 Word 文件&#xff0c;还可以对 Excel 和 Word 文件进行格式化和样式编辑&#xff0c;支持多种常见的文件格式&#xff0c;如XLS&#xff0c;XLSX等。本篇文章将针对C# NPOI操作Exc…...

CSS中文字体 Unicode 编码表

一、简介 CSS&#xff08;层叠样式表&#xff09;是用于样式化Web页面的强大工具&#xff0c;它可以用来控制页面的外观和行为。在CSS中&#xff0c;可以使用多种字体来设置文本的外观和格式&#xff0c;包括中文字体。中文字体的实现需要引入相应的字体文件&#xff0c;并且需…...

《微服务实战》 第四章 Spring Cloud Netflix 之 Eureka

前言 Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。 Spring Cloud 使用 Spring Boot 思想为 Eureka 增加了自动化配置&#xff0c;开发人员只需要引入相关依赖和注解&#xff0c;就能将 Spring Boot 构建的微服务轻松地与 Eureka 进行整合。 1、Eureka 两大组…...

11. 深入理解并发编程-AQS与JMM

AQS (AbstractQueuedSynchronizer) 他的实现类诸如: CountDownLatch、ThreadLocalPool和ReentrantLock 在这些类中,AQS都是以内部类的形式存在的 AQS使用了模板方法设计模式 例子: 做蛋糕分为3个步骤,定一个抽象类,重写3个方法,做模型、烘焙和涂抹原料,然后在另外1个方法做蛋糕…...

深度解耦:使用Jetpack新技术Hilt实现依赖注入

注入解耦是一种软件设计模式&#xff0c;旨在将应用程序的不同组件解耦。通过采用依赖注入、控制反转、面向接口编程等技术&#xff0c;注入解耦模式可以帮助开发人员将应用程序分解为可重用和可扩展的组件。这样做可以减少代码的耦合度&#xff0c;提高模块化和可测试性&#…...

C++ 构造函数-2

构造函数-2 构造函数体赋值 在对象创建的时候&#xff0c;编译器会调用构造函数&#xff0c;给对象当中的成员赋一个合适的初始值。 class Date { public: Date(int year, int month, int day) { _year year; _month month; _day day; } private: int _year; int _month; i…...

网安笔记 08 key management

Key Management —— 不考 网络加密方法 1.1 链路加密 特点&#xff1a; 两个相邻点之间数据进行加密保护 不同节点对密码机和Key不一定同中间节点上&#xff0c;先解密后加密报文报头可一起加密节点内部&#xff0c;消息以明文存在密钥分配困难保密及需求数量大 缺点&…...

Linux socket

百度百科对于Socket的介绍 套接字&#xff08;socket&#xff09;是一个抽象层&#xff0c;应用程序可以通过它发送或接收数据&#xff0c;可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&#xff0c;并与网络中的其他应用程序进行通信…...

14.构造器的排序分组.子查询

学习要点&#xff1a; 1.排序分组 2.子查询 本节课我们来开始学习数据库的构造器查询中的子查询、排序、分组等。 一&#xff0e;排序分组 1. 使用 whereColumn()方法实现两个字段相等的查询结果&#xff1b; //判断两个相等的字段&#xff0c;同样支持 orWhereColumn() //支持…...

【剑指 Offer】05,替换字符创中的空格;难度等级:简单。易错点:C++中 char 和 string 类型的转换

【剑指 Offer】05&#xff0c;替换字符创中的空格&#xff1b;难度等级&#xff1a;简单。 文章目录 一、题目二、题目背景三、我的解答四、易错点五、知识点&#xff1a;char 和 string 类型的转换 一、题目 二、题目背景 在网络编程中&#xff0c;如果 URL 参数中含有特殊字…...

图像分割入门教程

文章目录 图像分割入门教程1. 图像分割基本概念2. 基于阈值的图像分割3. 基于区域的图像分割4. 基于边缘的图像分割5. 基于区域和边缘的图像分割区别6. 基于深度学习的图像分割7. 实现步骤结论 图像分割入门教程 图像分割是计算机视觉领域的一个重要任务&#xff0c;其目标是将…...

C++入门教程||C++ 信号处理||C++ 多线程

C 信号处理 C 信号处理 信号是由操作系统传给进程的中断&#xff0c;会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上&#xff0c;可以通过按 CtrlC 产生中断。 有些信号不能被程序捕获&#xff0c;但是下表所列信号可以在程序中捕获&#xff0c;并可以基于…...

java计算矩形的面积和周长的方法

在生活中&#xff0c;我们常常需要计算某个矩形的面积和周长&#xff0c;如我们经常用的计算器就是个不错的选择&#xff0c;它可以计算出任意一个矩形的面积和周长。那么&#xff0c;如果你想使用 Java编程语言来计算矩形的面积和周长&#xff0c;你该如何做呢&#xff1f;今天…...

一分钟掌握如何更换Jupyter Notebook的主题和字体

Jupyter Notebook 更换主题&#xff08;背景、字体&#xff09; 在现代科技发展的浪潮中&#xff0c;Jupyter Notebook 作为一种强大的交互式笔记工具&#xff0c;已经被越来越多的用户所使用。它以其简单易用、功能强大、资源丰富等特点&#xff0c;成为了许多人学习、工作、科…...

如何系统全面的自学自动化测试?明确后我直接拿到了20K

玩自动化测试多年的老司机带你上车全面系统学习自动化测试&#xff0c;并且还能教你如何学习才能在今年拿到一份不错的offer。 说到系统全面&#xff0c;就是以目前绝大部分公司招聘要求的知识内容为基准&#xff0c;毕竟我们学习自动化测试都是为了高薪工作&#xff0c;《史记…...

【搭建私有云盘】无公网IP,在外远程访问本地微力同步

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸&#xff0c;虽然谈不上多么新颖&#xff0c;但是其…...

Pytest自动化测试框架一些常见的插件

Pytest拥有丰富的插件架构&#xff0c;超过800个以上的外部插件和活跃的社区&#xff0c;在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址&#xff1a;http://plugincompat.herokuapp.com/ 1、pytest-html&#xff…...

【力扣】刷题+剑指offer第二版

文章目录 题目收藏不含重复字符的最长子串最长公共子串 剑指 Offer剑指 Offer 05. 替换空格剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 09. 用两个栈实现队列剑指 Offer 07. 重建二叉树剑指 Offer 06. 从尾到头打印链表剑指 Offer 11. 旋转数组…...

PingFangSC字体:跨平台专业中文排版的终极开源解决方案

PingFangSC字体&#xff1a;跨平台专业中文排版的终极开源解决方案 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 在当今数字化时代&#xff0c;跨平台字…...

深入解析 iOS 上 fixed 底栏与滚动容器的手势冲突:从 H5 修复到原生根治

在移动端 H5 开发中,我们时常遇到这样的场景:页面底部有一个固定定位(position: fixed)的按钮栏或底栏,上方是一个可滚动的长列表。在 iOS 设备上,当用户尝试从底部 fixed 区域起手向上滑动时,列表却纹丝不动,仿佛被“粘”住了。这个现象不是偶发 bug,而是 iOS 对 fix…...

ClickHouse配置优化实战:关键参数详解与性能调优指南

1. ClickHouse配置优化的核心逻辑 ClickHouse作为一款高性能的OLAP数据库&#xff0c;其配置优化需要遵循三个黄金法则&#xff1a;资源隔离、瓶颈定位和场景适配。我见过太多团队一上来就盲目调整参数&#xff0c;结果反而导致性能下降。正确的做法应该是先理解系统行为&#…...

GitHub下载加速终极指南:3分钟让你的克隆速度提升100倍

GitHub下载加速终极指南&#xff1a;3分钟让你的克隆速度提升100倍 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 如果你经常需要…...

2026上海紧固件专业展观察:12.9级螺栓为何成为高端制造核心紧固方案?

2026第十六届上海紧固件专业展&#xff08;Fastener Expo Shanghai 2026&#xff09;将于6月24日至26日在上海国家会展中心举办。作为紧固件行业的重要展示窗口&#xff0c;本届展会将集中呈现高强度紧固件的发展趋势&#xff0c;其中12.9级螺栓已成为当前制造业升级的重要标志…...

音频处理避坑指南:二进制编码转换中的常见问题与解决方案

音频处理避坑指南&#xff1a;二进制编码转换中的常见问题与解决方案 音频处理在现代多媒体应用中扮演着重要角色&#xff0c;从语音识别到音乐制作&#xff0c;从流媒体传输到嵌入式设备音频播放&#xff0c;二进制编码转换都是核心技术环节。对于有一定经验的开发者而言&…...

OneMore插件终极指南:160+功能让你的OneNote效率提升3倍

OneMore插件终极指南&#xff1a;160功能让你的OneNote效率提升3倍 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款免费开源的OneNote增强插件&#xff…...

3分钟解锁暗黑破坏神2完整体验:PlugY插件终极指南 [特殊字符]

3分钟解锁暗黑破坏神2完整体验&#xff1a;PlugY插件终极指南 &#x1f3ae; 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 还在为暗黑破坏神2单机模式的种种限制而…...

手把手教你用Claude Desktop的MCP协议,5分钟搞定本地SQLite数据库查询

5分钟实现自然语言查询SQLite&#xff1a;Claude Desktop MCP协议实战指南 想象一下这样的场景&#xff1a;你手头有一个存储着上万条商品信息的SQLite数据库&#xff0c;现在需要快速统计某个品类的库存数量。传统方式可能需要打开数据库工具、编写SQL查询语句&#xff0c;或者…...

从线索到成交,陀螺匠帮我打通了客户管理全流程

作为一个从业多年销售&#xff0c;我觉得我在管理客户过程中遇到的这些问题&#xff0c;很多企业多多少少也出现过。比如销售小王跟了一个月的客户&#xff0c;最后发现小李早就联系过了&#xff0c;经常白忙活&#xff1b;好不容易谈成的单子&#xff0c;合同改来改去&#xf…...