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 来监控…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
