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

从零学习python - 04函数方法与返回值

函数:Function-也称为方法,是组织好的、可重复使用的,用来实现指定功能的代码块。


函数的定义与调用:

创建函数目的是封装业务逻辑,实现代码复用

# 创建函数关键字:def(definition)def fun1(x, y):print(x + y)

函数的参数:

python函数中的参数具有灵活性,定义的方式可以接收各种形式的参数,也可以简化函数调用方法的代码

位置参数:调用函数时,函数有几个位置参数就需要传递几个参数,传入的参数与参数列表一一对应

默认参数:指带有默认值的函数,当调用该函数时如不传递参数则将使用默认值,传递参数可覆盖默认参数

默认参数后面也必须是默认参数

默认参数尽量使用不可变参数,可变对象会累积存储后续调用传递给它的参数

def fun1(x=1, y=2): # 默认x为1 y为2print(x + y)
fun1() # 3 省略传参使用默认值

关键字参数:函数调用时指定参数名称,关键字参数必须在普通参数后面

默认参数是在函数定义时传参,关键字参数是在函数调用时传参

def fun1(x, y):print(x + y)
fun1(x=1, y=2)  # 在函数调用时传参

限定关键字形参:符号*后的参数必须使用关键字方式传递参数

因为某些形参名具有十分明显的含义,所以显式写利于可读性;

或者有的函数随着版本迭代可能发生变化,强制关键字传参有利于保证跨版本兼容

def fun1(x, *, y):print(x)print(y)    
fun1(1, y=2)    # 必须使用关键字参数进行传参

可变参数:

function(参数1, *args):带*的参数为可变参数 常见的时*args

可变参数(*args)指向一个元组对象,会自动收集所有未匹配到的位置参数到这个元组中

def fun1(x, *args):print(x)    # 1print(args) # (2, 3, 4, 5, 6)
fun1(1, 2, 3, 4, 5, 6) 

function(参数1, **kwargs):可变参数kwargs,指向一个dict对象,接收关键字传参

自动收集未匹配的关键字参数到一个dict对象中,kwargs指向了这个dict对象

使用关键字参数传参是因为dict对象是使用键值对进行存储的

def fun1(x, **kwargs):print(x)       # 1print(kwargs)  # {'k1': 'v1', 'k2': 'v2'}
fun1(1, k1=v1, k2=v2)

参数的解包(拆包):参数数据类型是字符串-列表-元组-集合-字典的时候可以解包

传递实参时可以在序列类型的参数前加*号,它会自动将序列中的元素依次作为参数传递

元素的个数要与位置参数数量一致

                a = "12"b = [3, 4]c = (5, 6)d = {7, 8}e = {"x": 10,"y": 12}def fun1(x, y):print(x, y)fun1(*a)  # 1 2fun1(*b)  # 3 4fun1(*c)  # 5 6fun1(*d)  # 7 8fun1(*e)  # x y 字典的拆包一个*是keyfun1(**e)  # 9 10 两个**是value且key要与函数位置参数名称相同

参数解包与可变参数一起使用:

传入序列类型的参数使用解包,解出来的元素被可变参数自动收集

                def fun1(x, *args):  # *args可变参数会自动收集print(x)print(args)c = [2, 3, 4]fun1(1, *c)  # 通过自动解包把c列表元素提取出来 1 (2, 3, 4)

注意:**kwargs只收集未匹配的关键字参数(kwargs)

def fun1(x, **kwargs):  # *args可变参数会自动收集print(x)print(kwargs)
d = {"name": "otto","age": 28
}
fun1(1, **d)  # 通过自动解包把d字典元素提取出来 1 {'name': 'otto', 'age': 28}
# 流程:**d传入后自动解包为 -> 'name'='otto','age'='28' -> fun1(1,'name'='otto','age'='28')
# 再通过**kwargs可变参数将未匹配到的-关键字参数-收集到指向的dict对象中去
# **kwargs解包会将我们传入的**d字典类型数据中所有键值对自动转换为-关键字参数-

函数中各参数排列位置注意事项:

可变参数必须定义在普通(位置)参数与默认值参数后面

函数定义时如果两个可变参数同时存在则*args要再**kwargs前

def fun1(普通参数,默认值参数,*args,**kwargs):pass
# pass关键字:补充完整代码结构 占位

通过for循环遍历将两个变化参数中收集的序列元素单个取出来,方便需要时使用

def fun1(*args, **kwargs):print(args)     # (1, 2, 3, 4, 5)for i in args:print(i)    # 1 2 3 4 5print(kwargs)   # {'name': 'otto', 'age': '22'}for key, value in kwargs.items():print(key)  # name ageprint(value)    # otto 22a = (1, 2, 3, 4, 5)b = {'name': 'otto','age': '22'
}fun1(*a, **b)

python的return关键字:

函数可以使用return返回也可以不使用,不适用return默认返回None

def plus(x, y):return x + yr = plus(1, 2)
print(r)  # 3

return返回多个数据时,会使用元组类型返回,如果不想使用元组接收,可以定义多个变量接收多个返回值

def plus(x, y):return x+100, y+200
# 使用元组类型返回
r = plus(1, 2)
print(r)  # (101, 202)
# 定义多个变量接收多个返回值
x,y = plus(1, 2)
print(x,y)  # 101 202

函数嵌套函数,函数返回函数:

def fun1():def fun2():  # 内嵌函数 return "函数内嵌套函数执行"return fun2  # 如果返回fun2()代表返回函数运行结果,这里代表返回这个内嵌函数x = fun1()  # 执行后变量x会得到fun1()函数返回的嵌套函数fun2() x=fun2指向同一片内存区域
print(x)    # <function fun1.<locals>.fun2 at 0x00000284B2F3AA70>
print(x())  # 函数内嵌套函数执行

相关文章:

从零学习python - 04函数方法与返回值

函数&#xff1a;Function-也称为方法&#xff0c;是组织好的、可重复使用的&#xff0c;用来实现指定功能的代码块。函数的定义与调用:创建函数目的是封装业务逻辑&#xff0c;实现代码复用# 创建函数关键字:def(definition)def fun1(x, y):print(x y)函数的参数:python函数中…...

MySQL实战之事务到底是隔离的还是不隔离的

1.前言 我们在MySQL实战之事务隔离&#xff1a;为什么你改了我还看不见讲过事务隔离级别的时候提到过&#xff0c;如果是可重复读隔离级别&#xff0c;事务T启动的时候会创建一个视图read-view,之后事务T执行期间&#xff0c;即使有其他事务修改了数据&#xff0c;事务T看到的…...

Elasticsearch:理解 Master,Elections,Quorum 及 脑裂

集群中的每个节点都可以分配多个角色&#xff1a;master、data、ingest、ml&#xff08;机器学习&#xff09;等。 我们在当前讨论中感兴趣的角色之一是 master 角色。 在 Elasticsearch 的配置中&#xff0c;我们可以配置一个节点为 master 节点。master 角色的分配表明该节点…...

【致敬女神】HTMLReport应用之Unittest+Python+Selenium+HTMLReport项目自动化测试实战

HTMLReport应用之UnittestPythonSeleniumHTMLReport项目自动化测试实战1 测试框架结构2 技术栈3 实现思路3.1 使用HtmlTestRunner3.2 使用HTMLReport4 TestRunner参数说明4.1 源码4.2 参数说明5 框架代码5.1 common/reportOut.py5.2 common/sendMain.py5.3 report5.3.1 xxx.htm…...

JAVA的16 个实用代码优化小技巧

一、类成员与方法的可见性最小化 举例&#xff1a;如果是一个private的方法&#xff0c;想删除就删除。 如果一个public的service方法&#xff0c;或者一个public的成员变量&#xff0c;删除一下&#xff0c;不得思考很多。 二、使用位移操作替代乘除法 计算机是使用二进制…...

并发编程的三大挑战之原子性及其解决方案

目录 一、原子性问题 1、带来原子性问题的原因 2、如何解决线程切换带来的原子问题 2.1、使用synchronized关键字来保证 2.2、使用CAS来保证原子性 2.3、使用lock锁来保证 一、原子性问题 1、带来原子性问题的原因 线程切换是带来原子的根本原因&#xff0c;java的并发程…...

QML动画(其他的动画)

PauseAnimation &#xff08;暂停动画&#xff09; 为动画提供暂停 Rectangle{id:rect1width: 100;height: 100;x:100;y:100color: "lightBlue"SequentialAnimation{running: trueColorAnimation {target: rect1&#xff1b;property: "color"&#xff1b;…...

Spark 配置项

Spark 配置项硬件资源类CPU内存堆外内User Memory/Spark 可用内存Execution/Storage Memory磁盘ShuffleSpark SQLJoin 策略调整自动分区合并自动倾斜处理配置项分为 3 类: 硬件资源类 : 与 CPU、内存、磁盘有关的配置项Shuffle 类 : Shuffle 计算过程的配置项Spark SQL : Spar…...

掌握Vue3模板语法,助你轻松实现高效Web开发

Vue3作为前端开发中的一种主流框架&#xff0c;为我们提供了多种灵活的方式来处理模板语法。除了基础的模板语法&#xff0c;Vue3还提供了一些高级的语法&#xff0c;可以让我们更好地处理组件、响应式数据和UI逻辑等。在这篇博客中&#xff0c;我们将介绍Vue3中的一些高级模板…...

Jmeter+Ant+Jenkins接口自动化测试平台搭建

平台简介一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter支持接口的测试&#xff0c;Ant支持自动构建&#xff0c;而Jenkins支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动化测…...

ncnn部署(CMakelists.txt)

1. NCNN 环境安装 参考博客: 基于ncnn的yolov5模型部署 1. 1 protobuf编译 打开VS2013/VS2019的X64命令行(注意不是cmd),我这里以V32013环境进行编译 > cd <protobuf-root-dir> > mkdir build-vs2013 > cd build-vs2013 > cmake -G"NMake Makefil…...

SQL分库分表

什么是分库分表&#xff1f; 分库分表是两种操作&#xff0c;一种是分库&#xff0c;一种是分表。 分库分表又分为垂直拆分和水平拆分两种。 &#xff08;1&#xff09;分库&#xff1a;将原来存放在单个数据库中的数据&#xff0c;拆分到多个数据库中存放。 &#xff08;2&…...

大数据分析案例-基于逻辑回归算法构建微博评论情感分类模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…...

0105深度优先搜索算法非递归2种实现对比-无向图-数据结构和算法(Java)

1 两种非递归实现 在前面我们解决无向图的单点通性和单点路径问题时&#xff0c;都用到了深度优先搜索算法。深度优先搜索算法可以用递归和非递归两种方式。这里讨论非递归实现。 无向图结构使用邻接表实现。 第一种非递归方法&#xff08;推荐&#xff09;&#xff0c;代码如…...

传统手工数据采集耗时耗力?Smartbi数据填报实现数据收集分析自动化

企业在日常经营管理过程中&#xff0c;往往需要收集很多内外部的信息&#xff0c;清洗整理后再进行存储、分析、呈现、决策支持等各种作业&#xff0c;如何高效收集结构化数据是企业管理者经常要面对的问题。传统手工的数据采集方式不仅耗费了大量人力时间成本&#xff0c;还容…...

《Spring源码深度分析》第5章 Bean的加载

目录标题前言一、Bean加载入口与源码分析1、Bean加载的入口2、Bean加载源码二、FactoryBean的使用三、缓存中获取单例bean(待补充)前言 经过前面的分析&#xff0c;我们终于结束了对XML 配置文件的解析&#xff0c;接下来将会面临更大的挑战&#xff0c;就是对 bean 加载的探索…...

华为OD机试真题Java实现【求最大数字】真题+解题思路+代码(20222023)

求最大数字 题目 给定一个由纯数字组成以字符串表示的数值,现要求字符串中的每个数字最多只能出现2次,超过的需要进行删除;删除某个重复的数字后,其它数字相对位置保持不变。 如34533,数字3重复超过2次,需要删除其中一个3,删除第一个3后获得最大数值4533 请返回经过删…...

Java——异常机制

前言 随着对java的不断深入学习&#xff0c;在对语法以及编程思想有了一定的了解之后&#xff0c;在编程的过程中有可能会因为用户的输入不正确或者逻辑错误而出现异常或者错误&#xff0c;因此如何去捕捉与避免不应该出现的异常或者错误就变得十分重要。本文就介绍了java的异…...

【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(下)

系列文章目录 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate…...

ESP32设备驱动-土壤湿度传感器驱动

土壤湿度传感器驱动 1、土壤湿度传感器介绍 土壤湿度传感器由两个探头组成,用于测量水的体积含量。 两个探头让电流通过土壤,然后得到电阻值来测量水分值。 当有更多的水时,土壤会传导更多的电,这意味着电阻会更小。 因此,水分含量会更高。 干燥的土壤导电性差,所以当…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...