当前位置: 首页 > 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、土壤湿度传感器介绍 土壤湿度传感器由两个探头组成,用于测量水的体积含量。 两个探头让电流通过土壤,然后得到电阻值来测量水分值。 当有更多的水时,土壤会传导更多的电,这意味着电阻会更小。 因此,水分含量会更高。 干燥的土壤导电性差,所以当…...

高效解决图表数据提取难题:WebPlotDigitizer全功能解析

高效解决图表数据提取难题&#xff1a;WebPlotDigitizer全功能解析 【免费下载链接】WebPlotDigitizer WebPlotDigitizer: 一个基于 Web 的工具&#xff0c;用于从图形图像中提取数值数据&#xff0c;支持 XY、极地、三角图和地图。 项目地址: https://gitcode.com/gh_mirror…...

Python工业视觉落地难?3个99%工程师忽略的部署断点及72小时解决方案

第一章&#xff1a;Python工业视觉落地难&#xff1f;3个99%工程师忽略的部署断点及72小时解决方案工业视觉项目在实验室中准确率高达99.8%&#xff0c;却在产线持续运行48小时后突然崩溃——这不是偶发故障&#xff0c;而是源于三个被长期忽视的部署断点&#xff1a;模型推理时…...

别再只跑Demo了!手把手教你用vLLM部署微调后的Qwen2.5-3B-Instruct模型,实现高效批量推理

从微调到生产&#xff1a;Qwen2.5-3B-Instruct模型的高效推理部署实战 当开发者完成LoRA微调后&#xff0c;往往会面临一个现实问题&#xff1a;如何将训练好的模型真正用起来&#xff1f;原生Transformers推理在吞吐量和延迟上的表现&#xff0c;很难满足生产环境的需求。本文…...

WuliArt Qwen-Image Turbo新手教程:Prompt怎么写?效果不好怎么调?

WuliArt Qwen-Image Turbo新手教程&#xff1a;Prompt怎么写&#xff1f;效果不好怎么调&#xff1f; 刚接触WuliArt Qwen-Image Turbo&#xff0c;是不是感觉有点懵&#xff1f;看着那个简洁的输入框&#xff0c;心里琢磨着&#xff1a;“我该写点啥才能让它画出我想要的图&a…...

MangoHud日志数据可视化在线工具:无需安装的终极性能分析指南

MangoHud日志数据可视化在线工具&#xff1a;无需安装的终极性能分析指南 【免费下载链接】MangoHud A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more. Discord: https://discordapp.com/invite/Gj5YmBb 项目地址: https://gitcode.co…...

OCaml元编程终极指南:从语法扩展到代码生成的完整技术解析

OCaml元编程终极指南&#xff1a;从语法扩展到代码生成的完整技术解析 【免费下载链接】ocaml The core OCaml system: compilers, runtime system, base libraries 项目地址: https://gitcode.com/gh_mirrors/oc/ocaml OCaml元编程是函数式编程领域中最强大的技术之一&…...

阿里蚂蚁Kimi连夜换引擎!混合注意力炸场,456B模型200万token秒吞,API直接打2折

混合注意力&#xff0c;一夜之间从“可选项”变成“必答题”。 阿里、蚂蚁、Kimi、小米&#xff0c;万亿参数集体换引擎&#xff0c;只为回答同一道考题&#xff1a;算力贵到肉疼&#xff0c;模型怎么活下去&#xff1f;三年前&#xff0c;GPT-3用1750亿参数教会世界“大力出奇…...

避坑指南:在Ubuntu 20.04上搞定VINS-Fusion依赖(Ceres、Eigen、gflags报错全解决)

深度解析&#xff1a;Ubuntu 20.04部署VINS-Fusion的依赖陷阱与系统级解决方案 在机器人视觉与SLAM领域&#xff0c;VINS-Fusion作为香港科技大学开源的多传感器融合框架&#xff0c;已成为学术界和工业界的重要参考实现。然而当开发者满怀期待地克隆代码准备体验其强大功能时&…...

计算机毕设 java 基于 Android 的 “课堂管理助手” 移动应用开发 SpringBoot 安卓智能课堂管理移动应用 JavaAndroid 师生互动与教学管理平台

计算机毕设 java 基于 Android 的 “课堂管理助手” 移动应用开发 07s039&#xff0c;末尾的数字和英文也要加上 &#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享在教育信息化快速发展的背景下…...

能耗监控系统:OpenClaw+nanobot自动记录电脑用电数据并生成报告

能耗监控系统&#xff1a;OpenClawnanobot自动记录电脑用电数据并生成报告 1. 为什么需要自动化能耗监控 去年夏天&#xff0c;我的电费账单突然比平时高了30%。作为程序员&#xff0c;我第一反应是排查电脑设备的用电情况。但手动记录USB电表数据实在太麻烦——需要定时查看…...