Python基础学习9——函数
基本概念
函数是一种能够完成某项任务的封装工具。在数学中,函数是自变量到因变量的一种映射,通过某种方式能够使自变量的值变成因变量的值。其实本质上也是实现了某种值的转换的任务。
函数的定义
在python中,函数是利用def来进行定义:
def Lego_pricediscount():"""用来计算打折以后的lego价格"""print("You are making a day dream")
-
第一行
def Lego_pricediscount():是用来定义函数名和传递参数的。对于本例来说,函数名就是Lego_pricediscount,见名知意。括号内可以用来传递参数,本例中的函数无需参数,但是很多情况下函数是需要得到一些输入才能运行的,后面会介绍 -
第二行
"""用来计算打折以后的lego价格"""是注释,用以表述函数的功能。这一部分不是必须要写的内容,但是如果写了可以大大提高的函数可读性 -
第三行
print("You are making a day dream")是函数的主体,是函数功能实现的具体代码 -
如果函数有返回值,末尾还需要加上
return XXX。本例为无返回值函数,后面会介绍
函数的调用
函数的调用比较简单,如果调用上面例子中的函数,直接:
Lego_pricediscount()
如果函数有参数,那么调用的时候应该相应的在括号内添上参数
参数
基本概念
实参:实际参数,具有具体值的参数
Add(100,200) # 100,200是实参
形参:形式参数,仅代表一个参数形式不代表具体值的参数
def Add(a,b) # a,b是形参
实参的传递
位置实参
对于位置实参而言,函数调用的参数顺序要和函数定义的参数顺序一致,否则会发生错误。
def Lego_pricediscount(price, discount):"""用来计算打折以后的lego价格"""print(f"The price is {price*discount}.")
正确的调用方式:
lego_price = 398
lego_discount = 0.88
Lego_pricediscount(lego_price, lego_discount)
错误的调用方式:
lego_price = 398
lego_discount = 0.88
Lego_pricediscount(lego_discount, lego_price)
虽然这样做也能正确的运行,甚至对于本题来说结果一样(因为加法有交换率),但是参数的意义就不同了。对于这种错误的方式,乐高的价格变成了0.88,乐高的折扣变成了398,这是没有意义的。
关键字实参
对于关键字实参而言,函数调用的参数顺序要和函数定义的参数顺序可以不一致,因为关键字实参将名称与参数联系在了一起
def Lego_pricediscount(price, discount):"""用来计算打折以后的lego价格"""print(f"The price is {price*discount}.")lego_price = 398
lego_discount = 0.88
Lego_pricediscount(discount='lego_discount', price='lego_price')
Lego_pricediscount(price='lego_price', discount='lego_discount')
上图中无论哪种调用方式都是正确的,因为discount='lego_discount', price='lego_price'这种写法相当于告诉了原函数哪一个参数对应的是哪个,不需要再考虑顺序。
默认实参
很多时候我们需要跟函数指定一下参数的默认值,因为我们有的时候传递的参数并不全,而对于那些没有传入值的参数,如果我们不指定默认值的话很有可能会发生报错或者无法正常运行。
def Lego_pricediscount(price, discount='1.0'):"""用来计算打折以后的lego价格"""print(f"The price is {price*discount}.")lego_price = 398
lego_discount = 0.88
Lego_pricediscount(discount=lego_discount,price=lego_price)
Lego_pricediscount( price=lego_price)
输出结果
The price is 350.24.
The price is 398.
可选实参
可选实参指的是可以选择输入的参数
def Lego_pricediscount(price, discount=''):"""用来计算打折以后的lego价格"""if discount:print(f"The price is {price*discount}.")return price*discountelse:print(f"The price is {price}.")return pricelego_price = 398
lego_discount = 0.88
Lego_pricediscount(discount=lego_discount,price=lego_price)
Lego_pricediscount(price=lego_price)
输出结果
The price is 350.24.
The price is 398.
这里的discount没有输入也没有默认值,也可以正常输出结果
不限数量实参
有些时候我们不知道函数需要接收多少个实参,这时候我们定义函数时就需要不限数量的实参都能传入。
def Lego_pricediscount(*Lego):for lego in Lego:print(f"I want to buy {lego}.")Lego_pricediscount("LegoCity", )
Lego_pricediscount("LegoCity", "LegoMarvel")
Lego_pricediscount("LegoCity", "LegoMarvel", "LegoHouse")
输出结果
I want to buy LegoCity.
I want to buy LegoCity.
I want to buy LegoMarvel.
I want to buy LegoCity.
I want to buy LegoMarvel.
I want to buy LegoHouse.
*Lego本质上是创建了一个空元组。
其实,**Lego在python中也有对应的意义,相当于创建一个空字典。
**Lego作为函数参数,可以传入键值对
返回值
有的函数可以返回一些生成结果等内容,我们称其为返回值,我们可以用变量去接受这些返回值,相当于一个赋值的过程。返回值不仅仅局限于数值和字符串,也可以返回列表、字典等。
def Lego_pricediscount(price, discount='1.0'):"""用来计算打折以后的lego价格"""# print(f"The price is {price*discount}.")return price*discountlego_price = 398
lego_discount = 0.88
p=Lego_pricediscount(discount=lego_discount,price=lego_price)
print(p)
输出结果
350.24
函数与列表
函数中传入的参数可以是一个列表,我们可以利用函数对列表进行一系列的处理。
def Lego_pricediscount(Lego):for lego in Lego:print(f"I want to buy {lego}.")Lego = ["LegoCity", "LegoMarvel", "LegoHouse"]
Lego_pricediscount(Lego)
输出结果
I want to buy LegoCity.
I want to buy LegoMarvel.
I want to buy LegoHouse.
我们还可以在函数中修改列表等。这里需要注意的是,如果我们不希望对原列表进行修改但是能照常完成输出,我们需要用到切片:
def Lego_pricediscount(Lego):for lego in Lego[:]:lego = lego + '_lego'print(f"I want to buy {lego}.")Lego = ["LegoCity", "LegoMarvel", "LegoHouse"]
Lego_pricediscount(Lego[:])
print(Lego)
输出结果
I want to buy LegoCity_lego.
I want to buy LegoMarvel_lego.
I want to buy LegoHouse_lego.
['LegoCity', 'LegoMarvel', 'LegoHouse']
我们会发现原列表并没有被改变。这里的切片实际上对列表的副本进行操作
函数模块化
在项目工程量比较大的时候,我们常常会将函数单独放在一个文件夹。多个函数组成一个模块。这样我们只要导入这个模块,就可以任意使用模块中的相关函数。具体的导入格式如下:
导入整个模块:
# import 模块名
import Lego
我们还可以给模块名重命名,这样对于比较长的模块名我们就可以简化操作
import Lego as lg
之后在本python文件中我们可以直接用lg来代替Lego模块
导入特定函数:
# from 模块名 import 函数名
from Lego import Lego_Price
# from Lego import * 导入模块所有函数,不过不建议使用这种方法
类似的我们也可以重命名函数
from Lego import Lego_Price as lp
相关文章:
Python基础学习9——函数
基本概念 函数是一种能够完成某项任务的封装工具。在数学中,函数是自变量到因变量的一种映射,通过某种方式能够使自变量的值变成因变量的值。其实本质上也是实现了某种值的转换的任务。 函数的定义 在python中,函数是利用def来进行定义&am…...
项目中的MD5、盐值加密
首先介绍一下MD5,而项目中用的是MD5和盐值来确保密码的安全性; 1. md5简介 md5的全称是md5信息摘要算法(英文:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生一个128位…...
电商项目后端框架SpringBoot、MybatisPlus
后端框架基础 1.代码自动生成工具 mybatis-plus (1)首先需要添加依赖文件 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.2</version></dependency><de…...
2023年03月IDE流行度最新排名
点击查看最新IDE流行度最新排名(每月更新) 2023年03月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...
华为校招机试 - 数组取最小值(Java JS Python)
目录 题目描述 输入描述 输出描述 用例 题目解析 JavaScript算法源码 Java算法源码...
20 客户端服务订阅的事件机制剖析
Nacos客户端服务订阅的事件机制剖析 我们已经分析了Nacos客户端订阅的核心流程:Nacos客户端通过一个定时任务,每6秒从注册中心获取实例列表,当发现实例发生变化时,发布变更事件,订阅者进行业务处理,然后更…...
ThreadPoolExecutor中的addWorker方法
在看线程池源码的时候看到了这么一段代码 private boolean addWorker(Runnable firstTask, boolean core) {retry:for (int c ctl.get();;) {// Check if queue empty only if necessary.if (xxx)return false;for (;;) {if (xxx)return false;if (xxx)break retry;if (xxx)c…...
9 有线网络的封装
概述 IPC设备一般都带有网口,支持以有线网络方式接入NVR和其他平台。有线网络的使用比较简单,主要操作有:设置IP地址、子网掩码、网关、DHCP等。在封装有线网络前,我们需要先封装DHCP客户端管理类,用于管理各种网络的DHCP功能。 DHCP客户端管理类 DHCP客户端管理类的头文件…...
Linux----网络基础(2)--应用层的序列化与反序列化--守护进程--0226
文章中有使用封装好的头文件,可以在下面连接处查询。 Linux相关博文中使用的头文件_Gosolo!的博客-CSDN博客 1. 应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 1.2 协议 我们在之前的套接字编程中使用的是…...
uipath实现滑动验证码登录
现实需求 在进行RPA流程设计过程中,遇到登录系统需要滑动验证的情况,如图所示: 此时需要在RPA流程设计中,借助现有的活动完成模拟人工操作,完成验证登录操作。 设计思路 这个功能流程的设计思路大体如下: …...
openai-chatGPT的API调用异常处理
因为目前openai对地区限制的原因,即使设置了全局代理使用API调用时,还是会出现科学上网代理的错误问题。openai库 0.26.5【错误提示】:raise error.APIConnectionError(openai.error.APIConnectionError: Error communicating with OpenAI: …...
css实现音乐播放器页面 · 笔记
效果 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …...
buu [NPUCTF2020]这是什么觅 1
题目描述: 就一个这种文件,用记事本打开后: 题目分析: 打开后就一串看不懂的东西,想想这个东西曾经在 010editor 或 winhex中出现过(右端)既然如此那么我们就用它打开,得到&#…...
Restful API 设计规范
1. 简介 目前 "互联网软件"从用客户端/服务端模式,建立在分布式体系上,通过互联网通讯,具有高延时、高开发等特点。但是软件开发和网络是两个不同的领域,交集很少。要使得两个融合,就要考虑如何在互联网环境…...
sigwaittest测试超标的调试过程
1,问题描述硬件环境:飞腾S2500(64核)OS:kylinOS, linux preempt rt, 4.19.90测试命令:sigwaittest -p 90 -i 1000 -a 1测试结果:信号混洗值最大超过了80us,与飞腾其他CPU…...
Python进阶-----面对对象4.0(面对对象三大特征之--继承)
目录 前言: Python的继承简介 1.什么是继承 2.继承的好处 3.object类 继承的相关用法 1.继承的定义与法则 2.对继承的重写 3.(单继承)多层继承 4.多继承 5.多继承重写时调用父类方法 前言: 在讲之前,我想说说中…...
九龙证券|利好政策密集发布,机构扎堆看好的高增长公司曝光
新能源轿车销量和保有量快速增长,带来了充电桩商场的微弱需求。 日前,商务部部长王文涛表明,本年将在落实好方针的一起,活跃出台新方针办法,比方辅导当地展开新能源轿车下乡活动,优化充电等使用环境&#x…...
stm32CubeIDE FMC 驱动LCD(8080)
一,TFT屏硬件接口16位,80并口。二,FMC介绍。FSMC(Flexible Static Memory Controller),译为灵活的静态存储控制器。STM32F1 系列芯片使用 FSMC 外设来管理扩展的存储器,它可以用于驱动包括 SRAM…...
Java 数据类型
数据类型用于对数据归类,以便开发者理解和操作。 基本数据类型 Java 确定了每种基本数据类型所占存储空间的大小,不会像其它语言那样随机器硬件架构的变化而变化,这使 Java 程序更具可移植性。 Java 中定义了如下的基本数据类型。 byte …...
Prometheus 监控云Mysql和自建Mysql(多实例)
本文您将了解到 Prometheus如何配置才能监控云Mysql(包括阿里云、腾讯云、华为云)和自建Mysql。 Prometheus 提供了很多种Exporter,用于监控第三方系统指标,如果没有提供也可以根据Exporter规范自定义Exporter。 本文将通过MySQL server exporter 来监控…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
