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 来监控…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
matlab实现DBR激光器计算
DBR激光器计算程序。非常值得参考的程序。DBR激光器程序 DBR计算/1.txt , 2056 DBR计算/4.asv , 22 DBR计算/4.txt , 32 DBR计算/GetDeviceEfficiency.asv , 2012 DBR计算/GetDeviceEfficiency.m , 2014 DBR计算/GetOneLayerArray.asv , 837 DBR计算/GetOneLayerArray.m , 836…...
vb监测Excel两个单元格变化,达到阈值响铃
需求 在Excel中实现监控两个单元格之间的变化范围,当达到某个设定的值的范围内时,实现自动响铃提示。 实现: 首先设置Excel,开启宏、打开开发者工具,点击visual Basic按钮,然后在左侧双击需要监测的shee…...
