从零学习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) # 3return返回多个数据时,会使用元组类型返回,如果不想使用元组接收,可以定义多个变量接收多个返回值
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函数方法与返回值
函数:Function-也称为方法,是组织好的、可重复使用的,用来实现指定功能的代码块。函数的定义与调用:创建函数目的是封装业务逻辑,实现代码复用# 创建函数关键字:def(definition)def fun1(x, y):print(x y)函数的参数:python函数中…...
MySQL实战之事务到底是隔离的还是不隔离的
1.前言 我们在MySQL实战之事务隔离:为什么你改了我还看不见讲过事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的…...
Elasticsearch:理解 Master,Elections,Quorum 及 脑裂
集群中的每个节点都可以分配多个角色:master、data、ingest、ml(机器学习)等。 我们在当前讨论中感兴趣的角色之一是 master 角色。 在 Elasticsearch 的配置中,我们可以配置一个节点为 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 个实用代码优化小技巧
一、类成员与方法的可见性最小化 举例:如果是一个private的方法,想删除就删除。 如果一个public的service方法,或者一个public的成员变量,删除一下,不得思考很多。 二、使用位移操作替代乘除法 计算机是使用二进制…...
并发编程的三大挑战之原子性及其解决方案
目录 一、原子性问题 1、带来原子性问题的原因 2、如何解决线程切换带来的原子问题 2.1、使用synchronized关键字来保证 2.2、使用CAS来保证原子性 2.3、使用lock锁来保证 一、原子性问题 1、带来原子性问题的原因 线程切换是带来原子的根本原因,java的并发程…...
QML动画(其他的动画)
PauseAnimation (暂停动画) 为动画提供暂停 Rectangle{id:rect1width: 100;height: 100;x:100;y:100color: "lightBlue"SequentialAnimation{running: trueColorAnimation {target: rect1;property: "color";…...
Spark 配置项
Spark 配置项硬件资源类CPU内存堆外内User Memory/Spark 可用内存Execution/Storage Memory磁盘ShuffleSpark SQLJoin 策略调整自动分区合并自动倾斜处理配置项分为 3 类: 硬件资源类 : 与 CPU、内存、磁盘有关的配置项Shuffle 类 : Shuffle 计算过程的配置项Spark SQL : Spar…...
掌握Vue3模板语法,助你轻松实现高效Web开发
Vue3作为前端开发中的一种主流框架,为我们提供了多种灵活的方式来处理模板语法。除了基础的模板语法,Vue3还提供了一些高级的语法,可以让我们更好地处理组件、响应式数据和UI逻辑等。在这篇博客中,我们将介绍Vue3中的一些高级模板…...
Jmeter+Ant+Jenkins接口自动化测试平台搭建
平台简介一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成。Jmeter支持接口的测试,Ant支持自动构建,而Jenkins支持持续集成,所以三者组合在一起可以构成一个功能完善的接口自动化测…...
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分库分表
什么是分库分表? 分库分表是两种操作,一种是分库,一种是分表。 分库分表又分为垂直拆分和水平拆分两种。 (1)分库:将原来存放在单个数据库中的数据,拆分到多个数据库中存放。 (2&…...
大数据分析案例-基于逻辑回归算法构建微博评论情感分类模型
🤵♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…...
0105深度优先搜索算法非递归2种实现对比-无向图-数据结构和算法(Java)
1 两种非递归实现 在前面我们解决无向图的单点通性和单点路径问题时,都用到了深度优先搜索算法。深度优先搜索算法可以用递归和非递归两种方式。这里讨论非递归实现。 无向图结构使用邻接表实现。 第一种非递归方法(推荐),代码如…...
传统手工数据采集耗时耗力?Smartbi数据填报实现数据收集分析自动化
企业在日常经营管理过程中,往往需要收集很多内外部的信息,清洗整理后再进行存储、分析、呈现、决策支持等各种作业,如何高效收集结构化数据是企业管理者经常要面对的问题。传统手工的数据采集方式不仅耗费了大量人力时间成本,还容…...
《Spring源码深度分析》第5章 Bean的加载
目录标题前言一、Bean加载入口与源码分析1、Bean加载的入口2、Bean加载源码二、FactoryBean的使用三、缓存中获取单例bean(待补充)前言 经过前面的分析,我们终于结束了对XML 配置文件的解析,接下来将会面临更大的挑战,就是对 bean 加载的探索…...
华为OD机试真题Java实现【求最大数字】真题+解题思路+代码(20222023)
求最大数字 题目 给定一个由纯数字组成以字符串表示的数值,现要求字符串中的每个数字最多只能出现2次,超过的需要进行删除;删除某个重复的数字后,其它数字相对位置保持不变。 如34533,数字3重复超过2次,需要删除其中一个3,删除第一个3后获得最大数值4533 请返回经过删…...
Java——异常机制
前言 随着对java的不断深入学习,在对语法以及编程思想有了一定的了解之后,在编程的过程中有可能会因为用户的输入不正确或者逻辑错误而出现异常或者错误,因此如何去捕捉与避免不应该出现的异常或者错误就变得十分重要。本文就介绍了java的异…...
【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(下)
系列文章目录 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate…...
ESP32设备驱动-土壤湿度传感器驱动
土壤湿度传感器驱动 1、土壤湿度传感器介绍 土壤湿度传感器由两个探头组成,用于测量水的体积含量。 两个探头让电流通过土壤,然后得到电阻值来测量水分值。 当有更多的水时,土壤会传导更多的电,这意味着电阻会更小。 因此,水分含量会更高。 干燥的土壤导电性差,所以当…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
