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 = 10
    y = 10
    print(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 1


res = aa()
print(res, type(res))  # 1 <class 'int'>

4.6 返回多个值
def aa():
    # 返回多个值被看成是一个元组的省略写法.
    return 1, 2, 3


res = 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 + 1


res = 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 + y


res = 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 + y
    return z


aa(1, 2)

当提供的参数, 类型不符的时候会高亮提示.

2022-12-10_01671

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

GIF 2022-12-10 1-17-56

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV学习(4.13) 霍夫变换

1.霍夫变换 霍夫变换&#xff08;Hough Transform&#xff09;是图像处理中的一种技术&#xff0c;主要用于检测图像中的直线、圆或其他形状。它通过将图像空间中的点映射到参数空间来实现&#xff0c;这样&#xff0c;图像空间中在同一直线上的点在参数空间中会形成一条曲线&…

CentOS系统自带Python2无法使用pip命令

Linux运维工具-ywtool 目录 一. 系统环境二.解决三.验证四.备注(1)输入"yum install -y python-pip",提示没有可用 python-pip包(2)安装完pip后进行升级 一. 系统环境 centos7系统自带的python2.7无法使用pip命令 二.解决 yum install python-pip -y三.验证 pip…

用PlayCanvas打造一个3D模型

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 PlayCanvas 的 3D 物理场景开发 应用场景介绍 PlayCanvas 是一款功能强大的 3D 引擎&#xff0c;可用于创建各种类型的 3D 体验&#xff0c;包括游戏、模拟和交互式可视化。本技术博客将介绍如何使用 Pl…

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 如何读取 Cache 内部数据并对其进行解析?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 数据读取代码实现测试结果Direct access to internal memory 在ARMv8架构中,缓存(Cache)是用来加…

企业中的绩效管理

背景 企业中为何需要绩效管理&#xff0c;企业绩效管理为何比较难&#xff0c;这在企业管理中是非常难&#xff0c;同样也是非常有价值的命题&#xff0c;那么首先应该对这个命题有清晰的认知&#xff0c;特别是要想明白为何企业需要绩效管理&#xff0c;应该先明白企业。 企…

2024 年 19 种最佳大型语言模型

大型语言模型是 2023 年生成式人工智能热潮背后的推动力。然而&#xff0c;它们已经存在了一段时间了。 LLM是黑盒 AI 系统&#xff0c;它使用深度学习对超大数据集进行处理&#xff0c;以理解和生成新文本。现代 LLM 开始成型于 2014 年&#xff0c;当时一篇题为“通过联合学…

妙用OSGraph:发掘GitHub知识图谱上的开源故事

作者&#xff1a;范志东 1. 何为OSGraph&#xff1f; OSGraph (Open Source Graph) 是一个开源图谱关系洞察工具&#xff0c;基于GitHub开源数据全域图谱&#xff0c;实现开发者行为、项目社区生态的分析洞察。可以为开发者、项目Owner、开源布道师、社区运营等提供简洁直观的…

手机如何扫描拍照?方法分享

手机如何扫描拍照&#xff1f;在数字化时代&#xff0c;手机扫描拍照软件已经成为我们日常生活和工作中不可或缺的工具。无论是快速识别纸质文档&#xff0c;还是将照片中的文字转化为可编辑的文本&#xff0c;这些软件都为我们提供了极大的便利。然而&#xff0c;市面上的手机…

msvcp110.dll有什么解决方案,msvcp110.dll几种方法详细步骤教程

本文旨在探讨如何应对电脑出现 vcruntime140_1.dll 无法继续执行代码错误提示的问题。同时&#xff0c;将阐释该文件的作用&#xff0c;列举常见的错误问题&#xff0c;并提供一些在修复 vcruntime140_1.dll 时的注意事项&#xff0c;以避免在解决过程中引发其他问题。接下来&a…

【网络安全】【深度学习】【入侵检测】SDN模拟网络入侵攻击并检测,实时检测,深度学习【一】

文章目录 1. 前言2. Mininet 和 Ryu 的区别2.1 Mininet2.2 Ryu2.3 总结 3. 模拟攻击3.1 环境准备3.2 创建 Mininet 网络拓扑3.2 启动 Ryu 控制器3.3 模拟网络攻击3.4 捕获流量 4. 实时异常检测4.1 在 Ryu 控制器中4.2 在 h2 机器上的实验结果4.3 深度学习模型部署上h2机器 帮助…

如何获知lib cell的用途

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 除了databook可以查询cell的用途外&#xff0c;还可以通过在pr工具中获取lib cell属性的方法知晓其用途。 ICC2: report_attribute -app -class lib_cell SDFFXXX 通过看is_…

【大数据】计算引擎:Spark核心概念

目录 前言 1.什么是Spark 2.核心概念 2.1.Spark如何拉高计算性能 2.2.RDD 2.3.Stage 3.运行流程 前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体…

【递归、搜索与回溯】综合练习一

综合练习一 1.找出所有子集的异或总和再求和2.全排列 II3.电话号码的字母组合4.括号生成 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.找…

2024年【四川省安全员C证】免费试题及四川省安全员C证考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 四川省安全员C证免费试题是安全生产模拟考试一点通总题库中生成的一套四川省安全员C证考试技巧&#xff0c;安全生产模拟考试一点通上四川省安全员C证作业手机同步练习。2024年【四川省安全员C证】免费试题及四川省安…

linux搭建sftp服务

1. 添加用户及用户组 使用 groupadd sftpgroup 添加sftpgroup 用户组&#xff1b; 使用useradd -G sftpgroup -s /sbin/nologin cmssftp给sftpgroup 添加cmssftp用户&#xff1b; 使用passwd cmssftp给用户cmssftp进行设置密码(默认为:654321)。具体如下图所示&#xff1a; 2.…

云原生Kubernetes系列项目实战-k8s集群+高可用负载均衡层+防火墙

一、Kubernetes 区域可采用 Kubeadm 方式进行安装&#xff1a; 名称主机部署服务master192.168.91.10docker、kubeadm、kubelet、kubectl、flannelnode01192.168.91.11docker、kubeadm、kubelet、kubectl、flannelnode02192.168.91.20docker、kubeadm、kubelet、kubectl、flan…

文心一言 VS 讯飞星火 VS chatgpt (280)-- 算法导论20.4 1题

一、假设 CONNECTED-COMPONENTS 作用于一个无向图 G(V&#xff0c;E)&#xff0c;这里V{a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e&#xff0c;f&#xff0c;g&#xff0c;h&#xff0c;i&#xff0c;j&#xff0c;k}&#xff0c;且 E 中的边以如下的顺序处理:(d…

在Lua解释器中注册自定义函数库

本文目录 1、引言2、注册原理3、实例4、程序验证 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在现代软件开发中&#xff0c;Lua因其轻量级、高效和可嵌入性而被广泛使用。作为一种灵活的脚本语言…

使用uniapp设置tabbar的角标和移除tabbar的角标

使用场景描述 在一进入到小程序的时候就要将用户在购物车中添加的商品总数&#xff0c;要以角标的形式显示在tababr中。 代码实现 //index.vue<script setup> import { onLoad } from dcloudio/uni-apponLoad(()>{uni.setTabBarBadge({index: 1,text: 5 //为了实现…

电商开发者必读:微店商品详情API接口全解析

微店作为一个流行的电商平台&#xff0c;提供了丰富的API接口供开发者使用。详细介绍商品详情API接口的使用方法&#xff0c;帮助开发者快速获取商品信息&#xff0c;实现商品信息的自动化展示和管理。 1. 接口简介 微店商品详情API接口允许开发者通过商品ID获取商品的详细信…