5.0 Python 函数简介

1.函数

1.1 基本定义
定义: 将一组语句的集合通过函数进行封装, 简单来说是具有一定功能的代码容器,
想要执行这些语句, 只需要调用函数的名称即可.
特性:
* 1. 可重复使用, 减少代码冗余.
* 2. 组织结构清晰, 可读性增强.
* 3. 可扩展性提高, 便于维护.    
1.2 使用规则
函数必须先定义后使用, 将一段代码封装成函数, 在需时直接调用函数名.
定义阶段: 申请内存空间将函数体放进去, 将内存地址绑定给函数名.
调用阶段: 通过函数名得到函数体的地址, 加上括号执行函数体代码.
定义阶段时只检测语法不执行代码, 调用阶段才会执行函数体, 逻辑错误才会被检查到.
1.3 语法定义
需要关键字def声明函数, 函数后面紧跟一个括号, 括号后面紧跟':'冒号.
括号内可以写上参数, 参数是对象的标识符, 参数可以用多个, 参数之间使用逗号隔开.
:冒号下一行跟函数的代码块, 也称为函数体.
缩进, 表示代码块开始, 写代码块... 缩进结束表示代码块结束.
# 函数的定义
def 函数名(参数1, ···):  """函数的说明文档, 可以通过doc函数获取函数的信息.:param : 参数的说明:return: 返回值的说明"""代码1...代码2...# 返回值return# 函数的调用
函数名(参数1, ...)  
定义函数和类后面需要空两行, 否则会提示PEP8规范:
: PEP8: E305 expected 2 blank lines after class or function definition, ...
: PEP8: E305类或函数定义后应有2个空行
1.4 语法检测
# 定义阶段只检测语法
def func():qwe  # 语法上没有错误# 运行程序, 程序不会报错. 

2022-12-09_01659

# 定义函数
def func():  qwe  # 调用函数, 函数名加括号调用.
func()   

2022-12-09_01660

1.5 演变过程
* 1. 需要重复执行某一段代码.
print(1)
print(2)
print(3)print(1)
print(2)
print(3)print(1)
print(2)
print(3)
* 2. 将需要重新执行的代码进行缩进, 在代码块上面使用def关键字声明一个函数来存储代码块.
# 定义函数
def func():# 将需要重复执行的代码缩进print(1)print(2)print(3)# 第一次调用函数
func()
# 第一次调用函数
func()
# 第一次调用函数
func()
使用pythontutor查看程序的执行过程.
* 1. 先检测函数体的语法
* 2. 调用函数, 进行参数传递, 这个没有设置参数.
* 3. 执行函数体,.

GIF 2022-12-11 7-58-49

2. 函数体地址

2.1 函数名与变量名
变量名指向变量值的内存地址, 值是一个字面常量.
函数名指向函数体的内存地址, 函数体体一段代码.
打印变量名, 引用对象本身, 打印的就是值.
print(变量名)------>  被处理  ----->   显示内存地址存放的值, 不能在加().
print(函数名) ------>  没处理 ------>   显示函数体所在内存的地址, ()执行立刻函数体.函数可以加括号是语法定义的.
函数名 + ()---> 内存地址 +()----> 找到内存地址执行代码块.
def func():print(1)print(func)  # <function func at 0x000001FC245CE0D0>
print(type(func))  # <class 'function'>   
2.2 引用函数体地址
将函数的内存地址引用绑定给其它变量.
其它的变量加上括号可以执行函数体代码.
def func1():print(1)  # 1# 将 func1 的内存地址绑定给 func2.
func2 = func1
print(func1)
print(func2)# 函数体加上括号-->找到函数体内存地址执行代码块.
func1()
func2()

2022-12-09_01661

3. 函数的类型

3.1 分类
函数的三种类型:
* 1.无参函数 函数在定义阶段括号内没有参数.
* 2.有参函数 函数在定义阶段括号内有参数, 提供参数后, 参数可以在函数体中使用.
* 3.空函数   函数在定义阶段括号内没有参数, 函数体为空(pass  ···).函数的'参数''返回值'取决于是否需要对函数传入值与需要返回值.
'pass''···', 表示空语句, 本身没有含义, 使用它是为了符合编码的规则.
3.2 无参函数
# 定义函数, 括号内不设置参数.
def aa():x = 10y = 10print(x + y)  # 调用函数, 括号内不需要传入参数.
aa()
3.3 有参函数
# 定义函数, 括号内设置参数. 参数是对象的标识符.
def bb(x, y):print(x + y)  # 提供参数后, 参数可以在函数体中使用.# 调用参数, 括号内提供参数, 参数是一个对象, 设置几个参数就需要提供几个对象.
bb(10, 10)

2022-12-09_01662

3.4 空函数
# 空函数: 函数体是一个空语句.
def cc():pass  # 第一种, 兼容 Python2# 调用空函数看不见变化的.
cc()def dd():...  # 第二种, Python3 新增dd()

4. 函数返回值

4.1 返回值
返回值是函数执行结束时返回的结果, 需要使用关键字return, 
格式: 
return 1, ...
返回值的情况:
* 1. 没有return语句, 默认为的放回值为None.
* 2. 只有return关键字, 后面没有跟参数等同return None.
* 3. 返回单个值: return 1
* 4. 返回多个值: return 1, 2, ... (多个以元组类型放回)
* 返回的值可以赋值给一个变量.
一个函数中可以没有return也可以有多个return, 只要执行一次return语句, 
立刻将return后的值返回, 并结束函数的运行.
4.2 执行return
def aa():return  # 运行到这一行, 直接返回None, 并结束函数的运行.print(666)  # 这行不会执行# 先执行执行print(), 遇到aa()执行aa的代码块, 最后得到返回值. print再打印返回值.
print(aa())
# 使用变量接收返回值
res = aa()
print(res)

2022-12-09_01666

# 正常运行情况
def bb():print(123)  # 123# 需要代码块的某个语句执行, 它的前面不要出现retrun.return  print(bb())

2022-12-09_01665

4.3 不写return
def aa():pass    print(aa())  # None
4.4 只写return
def aa():return# 返回值: None.
print(aa())
4.5 返回单个值
def aa():return 1res = aa()
print(res, type(res))  # 1 <class 'int'>
4.6 返回多个值
def aa():# 返回多个值被看成是一个元组的省略写法.return 1, 2, 3res = aa()
print(res, type(res))  # (1, 2, 3) <class 'tuple'># 元组的省略写法
num = 1, 2, 3
print(num, type(num))  # (1, 2, 3) <class 'tuple'>
4.7 返回表达式
return后面可以是一个表达式, 先执行表达式得到结果, 再将结果返回.
def aa():return 1 + 1res = aa()
print(res)  # 2
4.8 解包赋值
将序列类型的返回值解包赋值给多个变量.
def ee():return 1, 2, 3# 解包赋值
num1, num2, num3 = ee()  
print(num1, num2, num3)

5. 函数说明文档

help()函数: 能够打印出指定方法, 函数, 变量, 类的说明信息.
dir()函数: 能够列出对象的所有成员, 帮助你快速查找方法和变量.
.__doc__方法: 能够查看对象可以使用的方法.
def func(x, y):""":param x: 加数:param y: 被加数:return: 返回 x+y"""return x + yres = func(1, 2)
print(res)help(func)
print(func.__doc__)print(dir(func))
运行工具窗口显示:
3
Help on function func in module __main__:func(x, y):param x: 加数:param y: 被加数:return: 返回 x+y:param x: 加数:param y: 被加数:return: 返回 x+y['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

2022-12-10_01667

6. 函数提示信息

函数的参数可以是任意类型但是, 但传入的值不符合要求, 就会报错.

2022-12-10_01670

为了防止传参出错, 可以设置参数提示.:
使用方法:
def 函数名(参数1: 参数1的类型, 参数2: 参数2的类型) -> 返回值的类型:pass* 将数据类型的字面常量写上即可, 其中any表示所有类型.
def aa(x: int, y: int) -> int:z = x + yreturn zaa(1, 2)
当提供的参数, 类型不符的时候会高亮提示.

2022-12-10_01671

查看参数类型方式:
* 1. 输入函数名后, 光闭第一次进入括号后, 会显示参数类型提示.
* 2. 按住Ctrl将鼠标移动到函数名下面, 会显示参数类型提示和返回值类型.

GIF 2022-12-10 1-17-56

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW开发指针式压力仪表图像识别

系统利用LabVIEW编程实现对指针式压力仪表的读取&#xff0c;通过相机、光源、固定支架等硬件捕捉仪表图像&#xff0c;并通过图像识别技术解析压力值。系统分为两个阶段&#xff1a;第一阶段固定相机更换仪表&#xff0c;第二阶段移动相机识别多个固定仪表。本文介绍硬件选择、…

Java | Leetcode Java题解之第141题环形链表

题目&#xff1a; 题解&#xff1a; public class Solution {public boolean hasCycle(ListNode head) {if (head null || head.next null) {return false;}ListNode slow head;ListNode fast head.next;while (slow ! fast) {if (fast null || fast.next null) {return…

空气净化器是智商税吗?空气净化器哪款品牌效果最好?

随着科技的发展和人们生活水平的提高&#xff0c;空气净化器逐渐走进千家万户。然而&#xff0c;有人认为空气净化器的实际效用被夸大&#xff0c;只是商家营销的手段&#xff0c;成为了“智商税”。那么&#xff0c;空气净化器真的有用吗&#xff1f;在众多品牌中&#xff0c;…

Unity UGUI ScrollRect 滑动显示左右箭头

目录 一、前言 二、效果 三、代码解析 EnhancedScrollRect.cs 解析 Start 方法 HandleArrowVisibility 方法 EnhancedScrollRectEditor.cs 解析 OnEnable 方法 OnInspectorGUI 方法 四、完整代码 EnhancedScrollRect.cs EnhancedScrollRectEditor.cs 五、总结 De…

pointnet

train_classification.py 把第91行修改为自己的路径&#xff0c;就可以运行了 test_cla.py&#xff0c;需要训练完才能运行测试&#xff0c;我没训练完&#xff0c;所以报错显示我没有best.pth文件 网盘里面是我运行的训练和测试的视频&#xff0c;以及源代码&#xff0c;数…

STM32CUBEIDE使用技巧

一、创建文件 二、菜单栏和工具栏说明 三、编译/下载/仿真调试 1、编译的两种模式 Debug模式和Release模式&#xff0c;Debug模式在调试阶段时使用&#xff0c;Release模式在项目完结发给客户时使用&#xff0c;Release模式不能使用单步调试功能。 2、下载方式 下载可以在ST…

构建数字孪生微电网,实现能源系统一体化管控

图扑利用自主研发引擎 HT for Web 将 Web 智慧“双碳”微电网场景进行数字孪生&#xff0c;有效实现源网荷储一体化管控。整体场景采用了轻量化建模的方式&#xff0c;重点围绕智慧园区电网联通中的源、网、荷、储四方面的设备和建筑进行建模还原&#xff0c;为用户带来“赛博朋…

17种JMeter 逻辑控制器

前言 JMeter提供了17种逻辑控制器&#xff0c;它们各个功能都不尽相同&#xff0c;其作用域只对其子节点的sampler有效&#xff0c;作用是控制采样器的执行顺序。 控制测试计划执行过程中节点的逻辑执行顺序&#xff0c;如&#xff1a;Loop Controller、If Controller等&…

LVS+Keepalived高可用负载均衡群集

目录 一.高可用群集相关概述 1.高可用&#xff08;HA&#xff09;群集与普通群集的比较 普通群集 高可用群集&#xff08;HA&#xff09; 两者比较 2.Keepalived高可用方案 3.Keepalived的体系模块及其作用 4.Keepalived实现原理 二.LVSKeepAlived高可用负载均衡集群的…

github 本地仓库上传及报错处理

一.本地文件上传 这里为上传部分&#xff0c;关于gitbash安装配置&#xff0c;读者可自行搜索&#xff0c;由于已经安装完成&#xff0c;未进行截图保存&#xff0c;这里便不做赘述。 1.登录git账号并创建一个仓库 点击仓库打开后会看到这个仓库的网址链接&#xff08;这个链…

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[1]-最新版快速实践并部署(检索增强生成RAG大模型)

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[1]-最新版快速实践并部署(检索增强生成RAG大模型) 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开源、可离线部署的检索增强生成(RAG)大模型知识库项目。 1.介绍 一种利用 langchain思想实现的基于本地知…

U盘文件删除如何恢复?4个实用技巧(含图文)

“我的u盘里保存了很多重要的文件&#xff0c;但是不知道为什么部分文件丢失&#xff0c;有什么方法可以帮我快速恢复u盘文件的吗&#xff1f;希望大家帮帮我&#xff01;” U盘作为我们日常存储和传输数据的重要工具&#xff0c;其数据的安全性和可恢复性尤为重要。当U盘中的文…

redis 一些笔记1

redis 一、redis事务二、管道2.1 事务与管道的区别 三、主从复制3.13.2 权限细节3.3 基本操作命令3.4 常用3.4.1 一主几从3.4.2 薪火相传3.4.3 反客为主 3.5 步骤3.6 缺点 一、redis事务 放在一个队列里&#xff0c;依次执行&#xff0c;并不保证一致性。与mysql事务不同。 命…

光储充一体化充电站:能源革新的绿色引擎

在这个科技日新月异的时代&#xff0c;一场绿色能源的革命正悄然兴起。 光储充一体化充电站&#xff0c;作为这场革命中的璀璨明星&#xff0c;正以其独特的魅力&#xff0c;引领我们走向更加环保、高效的未来。 光储充一体化充电站&#xff0c;顾名思义&#xff0c;将光伏发电…

kotlin之foreach跳出循环

1.创建函数跳出循环。 fun breakTest() {(0..10).forEachIndexed { index, i ->Log.d("test start index$index,i$i")if (index > 7) {return}Log.d("test end index$index,i$i")}}2.通过run语句&#xff0c;将会在if判断语句为true的时候跳出run代…

争取比ChatGPT多知道一点,如何创建和使用embedding?

如何生成embedding&#xff1f; 这个问题很简单&#xff0c;可以直接问ChatGPT。即使是3.5的版本&#xff0c;也可以得到不错的回复&#xff1a; 我这里贴一下它给出的代码&#xff0c;首先是TensorFlow2版本&#xff1a; 接着是pytorch版本&#xff1a; 这两个版本的embeddin…

node配置热更新nodemon

nodemon 安装 全局或者开发依赖都可以 npm install nodemon -g npm install nodemon -D配置 文件配置nodemon.json {"watch": [ // 改动后需要编译成es5的源文件目录和配置等目录以及文件"./src","./conf",".env"],"ext&quo…

【Unity】RPG2D龙城纷争(一)搭建项目、导入框架、前期开发准备

更新日期&#xff1a;2024年6月12日。 项目源码&#xff1a;后续章节发布 免责声明&#xff1a;【RPG2D龙城纷争】使用的图片、音频等所有素材均有可能来自互联网&#xff0c;本专栏所有文章仅做学习和教程目的&#xff0c;不会将任何素材用于任何商业用途。 索引 【系列简介】…

java(JVM)

JVM Java的JVM&#xff08;Java虚拟机&#xff09;是运行Java程序的关键部件。它不直接理解或执行Java源代码&#xff0c;而是与Java编译器生成的字节码&#xff08;Bytecode&#xff09;进行交互。下面是对Java JVM更详尽的解释&#xff1a; 1.字节码&#xff1a; 当你使用J…

VR虚拟仿真技术模拟还原给水厂内外部结构

在厂区的外围&#xff0c;我们采用VR全景拍摄加3D开发建模的方式&#xff0c;还原了每一处细节&#xff0c;让你仿佛置身于现场&#xff0c;感受那份宁静与庄重。 当你踏入厂区&#xff0c;我们为你精心策划了一条游览路线&#xff0c;从门口到各个重要场景&#xff0c;一一为…