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

【玩转python】入门篇day14-函数

1、函数的定义

函数通过def定义,包括函数名、参数、返回值

# 定义函数
def test(a,b):  # a,b表示形式参数print(a + b)#函数体(具体的功能)return a*b  #返回值# 函数调用
test(12,43)  # 12和43表示实际参数,在调用函数时,会替换形式参数a,b

下面这个展示了稍微复杂的函数嵌套,执行test()的时候test函数中顺序先执行test1,输出‘9999’,然后接着执行print("12345"),输出‘12345’


def test():test1()print("12345")
# test()  在此处调用,会报错,因为代码顺序执行,test1()在这里还没有定义
def test1():print("9999")test()

2、函数中的参数

(1)先看下面例子,引入形参和实参的概念

# 封装一个函数,传入两个数字,输出较大的一个数字
def get_max(num1,num2):  # num1和num2是形式参数if num1 > num2:print('较大的数字是:',num1)else:print('较大的数字是:',num2)get_max(32,47)   # 32和47是实际参数

上述代码中,定义了一个名为get_max的函数,传递两个形参num1,num2,函数体是比较num1和num2,执行代码get_max(32,47),这里的32和47就是实参,我们可以在任何地方调用get_max函数,传递想要的实参,函数体根据传递的参数计算出结果。

  1. 调用函数的时候,必须以正确的顺序传参一一对应,比如上面的传惨num1等于32,num2等于47,实参的数量和形参的数量保持一致
  2. 在函数中,形参的名字和实参的名字可以一样.(本质上是在程序中开辟了不同的内存空间)

(2)关键字参数

上面我们说了,实参和形参是数量相等一一对应的,比如上面的函数def get_max(num1,num2),接收的是num1和num2两个参数,然后调用的时候get_max(12,2),这样参数一一对应,12传递给num1,2传递给num2,但是能不能不按照顺序呢,答案是可以的,就是利用我们的关键字参数,看代码

get_max(num2 = 2,num1 = 12)

按照代码所示的关键字参数传递方式直接指明了num2 = 2,num1 = 12

(3)默认参数(在定义函数的时候,给形式参数直接赋值)

def he(num1,num2 = 23):  # num2 = 23表示默认参数print('num1和num2两个数字的和是:',num1 + num2)# 未使用默认参数
# he(10,50)  #输出 60
# 使用了默认参数
# he(82)  #输出 105

从上面的代码我们可以总结一下,默认参数的意义在于给形参设置一个默认值,你可以调用的时候重新传递覆盖,也可以就用默认值,比如上面的调用he(10,50),10传递给num1,50覆盖默认值23,计算和输出60,假如我们调用 he(82),这个时候82传递给num1,num2就用默认值32,计算和输出105,使用默认值有几个地方要注意:

  1. 前面我们说形参和实参数量要一致,那为什么这里可以这样调用 he(82),只是传递一个参数82,其实这个很好理解,因为形参num2设置了默认值,相当于82传递给num1,num2有默认值,所以实参可以不用传

  2. 把默认参数放在参数列表的前面会报错,比如下面代码会报错

def cha(num1 = 23,num2): #这里报错了,默认值参数设置要放在后面print('num1和num2两个数字的差是:',num1 - num2)

根据第一点的讲解我们也能较好的理解为什么默人参数前置会报错,因为你想假如按照cha(num1 = 23,num2)这样定义函数合法,那么当我们调用he(82)时这个82就会顺序传递到num1上,那num2参数就没有值了,所以这样不合理,反过来就不会存在这个问题

(4)不定长参数(可变参数):可以处理比声明时更多的参数. *args **kwargs

  • *args: 用来接收多个位置参数,得到的是元组. 是arguments的简写
  • **kwargs: 用来接收多个关键字参数,得到的是一个字典. 是 keyword arguments的简写
def fn(*args):print(args)# fn(12,34)   # (12, 34)
# fn(87,45,67)  # (87, 45, 67)
# fn(82,48,246,52)  # (82, 48, 246, 52)
注意: 当 args 和普通参数放在一起的时候,需要将args放在参数列表的后面,道理类似默认参数需后置
def say(name,*args):print(name,args)
say('嘉琪',170,100)   # 嘉琪 (170, 100)
# **kwargs 表示关键字参数,传输的数据格式:key=value
# 注意: **kwargs若和普通参数放在一起,必须将**kwargs放在参数列表的后面,否则会报错.
def say1(**kwargs):print(kwargs)
say1(name='张强',age = 22,height=175)  # {'name': '张强', 'age': 22, 'height': 175}def say2(name,**kwargs):print(name,kwargs)
say2('宏海',age = 24,weight = 140)  # 宏海 {'age': 24, 'weight': 140}
总结
  1. *args 和 **kwargs 都能表示不定长参数
  2. 在使用*args和**kwargs时,如果有普通参数,那普通参数必须放在前面,*args和 **kwargs放后面
  3. *args接收得到的是元组,**kwargs的到的是字典

3、匿名函数

特点

  1. lambda只是一个表达式,比普通函数简单
  2. lambda一般只会书写一行,包含了参数 函数体和返回值 先看普通函数
def fn(n):return n**2
res = fn(3)
print(res)  # 9
为了书写简单,引入了lambda表达式
使用匿名函数的方式实现上述的功能:
result = lambda n:n**2
print(result(3))  # 9
使用匿名函数计算两个数字的乘积:
fn = lambda n,m:n*m
print(fn2(12,4))  # 48
实现元组相乘
test = lambda *agr:agr*4
print(test(3,4))#(3, 4, 3, 4, 3, 4, 3, 4)
#这里函数是一个不定长的参数,的到的是一个元组
#实参传递3,4,的到的是元组(3,4)
#函数返回值是参数*4
#那的到的就是元组(3,4)*4 = (3, 4, 3, 4, 3, 4, 3, 4)

4、回调函数

概念: 若把函数名赋值给了一个新的变量,那这个变量就具备了和函数一样的功能.

下面我们直接通过代码来分析,代码也很简单,通过封装一个函数来实现加减乘除的操作

(1)先实现加、减、乘、除的函数

# 和
def add(a,b):print(a + b)
# 差
def cha(a,b):print(a - b)
# 乘积
def ji(a,b):print(a * b)
# 商
def shang(a,b):print(a / b)

(2)封装一个函数.实现加减乘除的操作

我们要的这个函数要求是传递,a,b两个要计算的实参以及计算方式(加、减、乘、除)的函数,然后的到结果

def common(a,b ,fn):fn(a,b)
# 加法
common(12,3,add)    # 15
# 减法
common(12,3,cha)    # 9
# 乘积
common(12,3,ji)     # 36
# 商
common(12,3,shang)  # 4.0

代码分析

  1. 我们定义一个common的函数,传递a,b以及计算方式(加、减、乘、除)的函数
  2. 在common函数中 fn是一个方法,当作一个参数传递进来
  3. 当执行 common(12,3,add) 时候,common函数里就执行add(12,3)从而达到根据传递不同的函数实现不同计算的功能

相关文章:

【玩转python】入门篇day14-函数

1、函数的定义 函数通过def定义,包括函数名、参数、返回值 # 定义函数 def test(a,b): # a,b表示形式参数print(a b)#函数体(具体的功能)return a*b #返回值# 函数调用 test(12,43) # 12和43表示实际参数,在调用函数时,会替换形式参数a,b下面这个展示了稍微复…...

uni-app 将base64图片转换成临时地址

function getTempFilePath(base64Data) {return new Promise((resolve, reject) > {const fs uni.getFileSystemManager()base64Data base64Data.split(,)[1]const fileName temp_image_ Date.now() .png // 自定义文件名,可根据需要修改const filePath un…...

C#用Socket实现TCP客户端

1、TCP客户端实现代码 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks;namespace PtLib.TcpClient {public delegate void Tcp…...

jmeter-beanshell学习15-输入日期,计算前后几天的日期

又遇到新问题了,想要根据获取的日期,计算出前面两天的日期。网上找了半天,全都是写获取当天日期,然后计算昨天的日期,照葫芦画瓢也没改出来想要的,最后求助了开发同学。 先放上网上获取当天,计…...

Zabbix 7.0 安装

在zabbix官网中有着比较完善的安装步骤,针对不同的系统都有。可以直接按照举例说明进行安装。本文只是针对其提供的安装步骤进行一些说明解释补充。 安装环境 操作系统版本:AlmaLinux 9.4(10.10.20.200)zabbix版本:7.…...

软考高级-系统架构设计师

2024广东深圳考试时间 报考人员可登录中国计算机技术职业资格网(http://www.ruankao.org.cn)进行网上报名,报名前须扫码绑定个人微信,不允许代报名。 上半年考试报名信息填报时间:2024年3月25日9:00-4月2日…...

Notepad++ 安装 compare 插件

文章目录 文章介绍对比效果安装过程参考链接 文章介绍 compare 插件用于对比文本差异 对比效果 安装过程 搜索compare插件 参考链接 添加链接描述...

大数据技术原理-spark的安装

摘要 本实验报告详细记录了在"大数据技术原理"课程中进行的Spark安装与应用实验。实验环境包括Spark、Hadoop和Java。实验内容涵盖了Spark的安装、配置、启动,以及使用Spark进行基本的数据操作,如读取本地文件、文件内容计数、模式匹配和行数…...

第四范式上线搜广推一体化平台 赋能企业高效增长

产品上新 Product Release 今天,第四范式产品再度上新,正式升级并推出的“搜广推”一体化平台——天枢。 天枢拥有全面的用户画像分析、端到端的搜索推荐一体化、一站式流量运营管理等能力,集合智能搜索、智能推荐和智能推广三大能力于一身&a…...

智能小程序 Ray 开发面板 SDK —— 智能设备模型通用能力一键执行 SDK 汇总(一)

getTapToRunRules 描述 查询当前家庭下可绑定的一键执行列表,会去掉失效或自动化规则。 请求参数 参数数据类型说明是否必填devIdstring设备 ID,默认从设备环境中取否gidstring家庭 ID,默认从当前家庭中取否containStandardZigBeeboolean…...

特大喜讯:我的作品被河北某大学选做教材

...

将时间用于符合当下的未来思考——读《纳瓦尔宝典》

在财富积累的篇章中,倡导的核心理念是“不要通过出租时间来赚取收入”。沿着这条道路,可以通过以下智慧指引来避免不必要的迂回:首先,不要让自己深陷于日常的琐碎事务中,而应以开阔的心胸去探索和吸收新的知识。其次&a…...

CentOS-Stream-9仿冒Rocky-9通过Kolla-ansible部署OpenStack 2024.1

CentOS-Stream-9仿冒Rocky-9通过Kolla-ansible部署OpenStack 2024.1 OpenStack及Kolla项目的最新稳定版产品不再提供对CentOS-Stream-9的容器镜像支持,但考虑到 Rocky-9对RHEL/CentOS-Stream-9进行了binary级别的兼容,因此在CentOS-Stream-9上仿冒Rocky…...

Python机器学习实战:分类算法之支持向量机-垃圾邮件识别

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。 目录 支持向量机算法介绍 练习题 Python代码与分析 支持向量机和朴素贝叶斯的联系 支持向量机算法介绍 支持向量机&#…...

秒懂Linux之自动化构建工具-make/Makefile

目录 一.前文摘要 二.make/Makefile 一.前文摘要 在学习自动化构建工具前我们先来补充一下动静态库的相关指令 动态库指令 gcc -o 文件(重命名) 源文件 静态库指令 gcc -o 文件(重命名) 源文件 -static 二.make/Makefile 怎么形…...

.net core + vue 搭建前后端分离的框架

目录 步骤一:创建.NET Core后端项目 步骤二:创建Vue.js前端项目 步骤三:集成后端和前端项目 步骤一:创建.NET Core后端项目 安装.NET Core SDK: 确保你的开发环境中已安装了最新版本的.NET Core SDK。你可以从 .NET …...

小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用

小阿轩yx-KVMGFS 分布式存储系统构建 KVM 高可用 案例分析 案例概述 使用 KVM 及 GlusterFS 技术,结合起来实现 KVM 高可用利用 GlusterFS 分布式复制卷对 KVM 虚拟机文件进行分布存储和冗余 分布式复制卷 主要用于需要冗余的情况下把一个文件存放在两个或两个…...

centos安装mysql 5.7版本

因为要继续第二阶段的学习,windows里面的mysql版本,很多设置没有。因此弄了一个虚拟机,安装了centos,在里面安装mysql。 看了《centos安装mysql 5.7版本》里面有设置my.cnf文件,这个在虚拟机里面编辑,手动敲…...

SQL——查询sql执行顺序

在SQL查询中,虽然我们在编写查询时遵循一定的逻辑顺序(SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY),但实际上,数据库在执行这些查询时遵循的是不同的物理执行顺序。这个物理执行顺序是数据库管理系统&#xff0…...

钉耙编程(3)

1001深度自同构 Problem Description 对于无向图中的点,定义一个点的度为与其相连的边的条数。 对于一棵有根树,定义一个点的深度为该点到根的距离。 对于由若干有根树构成的森林,定义该森林是深度自同构的,当且仅当森林中任意…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 ​二、实现思路 总体思路: 用户通过Gradio界面上…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...