Python入门--函数

目录

1. 函数介绍

2. 函数的定义

3. 函数的参数

4. 函数的返回值

5. 函数说明文档

6. 函数的嵌套调用

7. 函数的作用域

(1). 局部变量

(2). 全局变量

(3). global关键字


1. 函数介绍

         函数:是组织好的可重复使用的,用来实现特定功能的代码段

name = "CCZU"
print(len(name))

        为什么随时都可以使len()统计长度呢?因为,len()Python内置的函数,这是提前写好的,可以被重复利用,专门用来统计字符串长度这一功能。我们使用过的:input()print()str()int()等都是Python的内置函数

        如果库里没有设置这一内置函数,我们在每次想用这个功能的时候,就要实现下面这好几行代码。

str = "string"
length = 0
for i in str:length+=1
print(length)

        像这种需要经常复用的功能,为了降低代码的重复,Python已经贴心的为大家写好了,想用的时候直接找到对应功能的函数使用即可,这就是将这个功能封装成了函数。

def my_len(str):length = 0for i in str:length += 1print(length)# 每次使用的时候直接调用即可
my_len("hello")
my_len("what")
my_len("please")

        那我们下面来学习一下怎么将这些频繁使用的代码封装成函数。

2. 函数的定义

注意:

① 参数如不需要,可以省略

② 返回值如不需要,可以省略

③ 函数必须先定义后使用

         函数定义之后,想使用定义的函数就要调用,根绝我们的定义来决定怎么调用。有返回值就要用变量来接收,有参数一定要传参数。

def say_hi():print("hi")
# 调用函数
say_hi()

3. 函数的参数

        传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据。

        比如我们要实现一个将两个数相加的功能函数,那我们肯定要让这个函数知道需要哪两个数相加,参数大家可以理解为参考的数据。也就是说这个相加的函数想知道自己要让哪些数加起来,就参考我们传的这些参数。

def add(x,y):print(x+y)
  • 函数定义中,提供的xy,称之为:形式参数(形参),表示函数声明将要使用2参数
  • 参数之间使用逗号进行分隔
  • 函数调用中,提供的56,称之为:实际参数(实参),表示函数执行时真正使用的参数
  • 传入的时候,按照顺序传入数据,使用逗号分隔

        最后一点大家要尤其注意,因为如果这个功能是实现两个数相除的,那么1/2和2/1可是完全不一样的两个结果。 

4. 函数的返回值

        如果我们想在调用函数的时候用一个变量接收函数调用后的结果,这个时候需要给函数加上返回值。

def add(x,y):return x+yresult = add(1,2)
print(result)

        函数体在遇到return后就结束了,所以写在return后的代码不会执行。

        如果函数没有使用return语句返回数据,那么函数实际上也是有返回值的。Python中有一个特殊的字面量:None,其类型是:<class NoneType>返回值的函数,实际上就是返回None这个字面

        None表示:空的、无实际意义的意思函数返回的None,就表示这个函数没有返回什么有意义的内容也就是返回了空的意思。

def say_he11o():print("He11o...")# 使用变量接收say_he11o函数的返回值
result = say_he11o()
# 打印返回值
print(result) # 结果None# 打印返回值类型
print(type(result)) # 结果<cass'NoneType'>

        None也可以主动使用return返回,效果等同于不写return语句。

        None作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景。

  • 用在函数无返回值
  • 用在if判断上:if判断中,None等同于False一般用于在函数中主动返回None,配合if判断做相关处理
def check_age(age):if age > 18:return "success"return Noneresult = check_age(5)
if not result:# 进入if表明result是None值,也就是Falseprint("未成年,不可进入")
  • 用于声明无内容的变量上定义变量,但暂时不需要变量有具体值,可以用None来代替
name = None

5. 函数说明文档

        函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。我们可以给函数通过多行注释的形式添加说明文档,辅助理解函数的作用。我们在函数体之前写上函数参数表示什么,返回值什么,函数功能是什么。

def add(x, y):"""add函数可以接收2个参数,进行2数相加的功能:param x: 形参x表示相加的其中一个数字:param y: 形参y表示相加的另一个数字:return: 返回值是2数相加的结果"""result = x + yprint(f"2数相加的结果是: {result}")return result

6. 函数的嵌套调用

        所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数

# 定义函数func_b
def func_b():print("---2---")# 定义函数func_a,并在内部调用func_b
def func_a():print("---1---")# 嵌套调用func_bfunc_b()print("---3---")# 调用函数func_a
func_a()

        如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次函数A执行的位置 

7. 函数的作用域

        变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用主要分为两类:局部变量和全局变量

(1). 局部变量

        局部变量是定义在函数体内部的变量,即只在函数体内部生效

def testA():num = 100print(num)testA() # 100print(num) # 报错:name 'num'is not defined

        变量a是定义在`testA`函数内部的变量,在函数外部访问则立即报错。  

        局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。

(2). 全局变量

        所谓全局变量,指的是在函数体内、外都能生效的变量

        如果有一个数据,在函数A和函数B中都要使用就要这个数据存储在一个全局变量里面,也就是定义在函数的外面

# 定义全局变量a
num = 100# 定义函数testA,并访问全局变量num
def testA():print(num)# 定义函数testB,并访问全局变量num
def testB():print(num)testA() # 100
testB() # 100
print(num) # 100

(3). global关键字

        如果我们想要在函数内部对全局变量的值进行修改,修改的值仅在函数体内部有效。

# 定义全局变量a
num = 100# 定义函数testA,并访问变量num
def testA():print(num)# 定义函数testB,并访问变量num
def testB():num = 300print(num)testA() # 100
testB() # 300
print(num) # 100

        这是因为testB里num=300实际上是testB自己又重新定义了一个num的局部对象,跟全局变量num已经不是同一个东西了。为了让这个局部变量num变回全局变量,我们引入了global关键字。

# 定义全局变量a
num = 100# 定义函数testA,并访问全局变量num
def testA():print(num)# 定义函数testB,并访问全局变量num
def testB():# global关键字用于将变量声明为全局变量global numnum = 300print(num)testA() # 100
testB() # 300
print(num) # 300

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO-V7 二元分类器

在评估二元分类器性能时&#xff0c;TP、FP、TN和FN是四个核心指标&#xff0c;它们分别代表真阳性、假阳性、真阴性和假阴性。以下是这些指标的定义、计算方法以及在实际应用中的意义&#xff1a; 定义 TP&#xff08;真阳性&#xff09;&#xff1a;模型正确预测为正类且实…

Yocto - 使用Yocto开发嵌入式Linux系统_06 掌握Bitbake工具

Grasping the BitBake Tool 在上一章中&#xff0c;我们了解了元数据、元数据集合概念以及 conf/layer.conf 的重要性。在本章中&#xff0c;我们将更深入地研究元数据&#xff0c;了解配方如何相互依赖&#xff0c;并了解 BitBake 如何处理依赖关系。 In the previous chapter…

k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载

目录 1 MetailLB 搭建 1.1 MetalLB 的作用和原理 1.2 MetalLB功能 1.3 部署 MetalLB 1.3.1 创建deployment控制器和创建一个服务 1.3.2 下载MealLB清单文件 1.3.3 使用 docker 对镜像进行拉取 1.3.4 将镜像上传至私人仓库 1.3.5 将官方仓库地址修改为本地私人地址 1.3.6 运行清…

【路径规划】多机器人路径规划

摘要 多机器人路径规划在现代自动化、仓储管理及智能交通系统中有着广泛的应用。本文提出了一种基于A*算法的多机器人路径规划方法&#xff0c;旨在解决多机器人在同一环境中的路径冲突问题。通过采用启发式搜索和路径优化策略&#xff0c;机器人能够在保持避障的前提下实现最…

Middleware---RocketMQ

RocketMQ是一个开源的分布式消息中间件。它是一种 低延迟、高可用、高可靠、高并发 的消息队列系统&#xff0c;用于在分布式系统中进行异步通信。 RocketMQ架构模型 Producer Group&#xff1a;消息生产者组&#xff0c;负责发送消息。 Broker&#xff1a;存储消息的服务节…

java:pdfbox 3.0 去除扫描版PDF中文本水印

官网下载 https://pdfbox.apache.org/download.html下载 pdfbox-app-3.0.3.jar cd D:\pdfbox 运行 java -jar pdfbox-app-3.0.3.jar java -jar pdfbox-app-3.0.3.jar Usage: pdfbox [COMMAND] [OPTIONS] Commands:debug Analyzes and inspects the internal structu…

Java第二阶段---10方法带参---第三节 面向对象和面向过程的区别

1.案例 2.代码实现 面向过程 import java.util.Scanner;/*** Procedure Oriented Programming 面向过程编程*/public class POP {public static void main(String[] args) {Scanner sc new Scanner(System.in);while(true){System.out.println("1.学生成绩管理");…

双十一不能错过的好物推荐!强推五款超好用的品牌好物

双十一快到了&#xff0c;这个时候的优惠力度都是最大的&#xff0c;还不知道买啥的小伙伴们赶紧来看这篇好物推荐&#xff01;以下五款产品是我花了几天时间精心挑选出来的&#xff0c;看完之后保证你想加入购物车&#xff01; 品牌好物推荐一、希亦CG超声波清洗机 如果你带眼…

中小型网络系统综合实验

一、实验要求 1.pc端自动获取ip地址&#xff0c;可以互通访问&#xff0c;可以访问域名解析服务器 2.设置vlan&#xff0c;三层交换机实现不同vlan之间的交流 3.设置静态路由&#xff0c;配置nat地址转换&#xff0c;实现全网可达 二、实验思路 1.首先给LSW2配置vlan 10 &a…

【无人机设计与技术】基于EKF的四旋翼无人机姿态估计matlab仿真

摘要&#xff1a; 本文设计了一种基于扩展卡尔曼滤波&#xff08;EKF&#xff09;的四旋翼无人机姿态估计方法。利用EKF算法处理四旋翼无人机姿态的动态模型&#xff0c;通过该滤波算法实现对姿态的实时估计和校正。该方法通过对无人机的运动学和动力学模型的分析&#xff0c;…

【Python游戏开发】贪吃蛇游戏demo拓展

拓展上一项目【Python游戏开发】贪吃蛇 实现穿墙效果 # 检测游戏是否结束 def check_gameover():global finished# 移除蛇头位置超过窗口判断for n in range(len(body) - 1):if(body[n].x snake_head.x and body[n].y snake_head.y):finished True # 状态检测 def ch…

涉案财务管理系统架构二—交警相关系统——未来之窗行业应用跨平台架构

一、涉案财务保管流程 二、涉案财务返回流程 三、阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术共享的浪潮中&#xff0c;不仅仅是作为受益者&#xff0c;更要成为贡献者。无论是分享自己的代码、撰写…

案例-任务清单

文章目录 效果展示初始化面演示画面 代码区 效果展示 初始化面 演示画面 任务清单 代码区 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

Meta推出Movie Gen 旗下迄今最先进的视频生成AI模型

Meta 今天发布了 MovieGen 系列媒体基础AI模型&#xff0c;该模型可根据文本提示生成带声音的逼真视频。 MovieGen 系列包括两个主要模型&#xff1a; MovieGen Video 和 MovieGen Audio。 MovieGen Video 是一个具有 300 亿个参数的变换器模型&#xff0c;可根据单个文本提示生…

蛋白质结构中原子坐标转换

在蛋白质结构分析中,原子坐标经过旋转矩阵和平移向量的转换是常见操作。一般情况下,假设一个原子在结构 A 中的坐标为 (x, y, z),在经过旋转矩阵 u 和平移向量 t 的变换后,得到新的坐标 (X, Y, Z)。然后,再将新的坐标反向映射回原始坐标系。 基本数学公式 1. 变换公式:…

AVL树的创建与检测

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 目录 一、什么是AVL树&#xff1f; 二、平衡因子 1、什么是平衡因子&#xff1f; 2、平衡因子如何更新&#xff1f; 三、单旋 1、左单旋 ​编辑 2、右单旋 四、双旋…

c++结构体嵌套

没有很听懂这个课 有点乱了、 // // Created by 徐昌真 on 2024/10/5. // #include <iostream> using namespace std; int main() {struct Point{ //定义一个叫做point的结构体double x, y;};struct Radius{Point pt; //嵌套point结构体在radius结构体里面 把他名字定…

从介质失效看互联网时代的信息过载

来读一篇文章&#xff1a;90年代的硬盘已大规模变砖&#xff0c;没啥好担心的&#xff0c;好事。 结合我两年前的粗浅认知 互联网时代无信息&#xff0c;按照 “动” 的观念看&#xff0c;当信息越来越多&#xff0c;信息密度越来越大时&#xff0c;信息的寿命就会越来越短&am…

k8s实战-1

k8s实战-1 一、资源创建方式1.命令行2.yaml 二、命名空间三、Pod总结 一、资源创建方式 1.命令行 就是直接通过命令的方式创建&#xff0c;比如我要创建namespace&#xff0c; kubectl create namespace hello删除&#xff1a; kubectl delete -f hello2.yaml 简单来说&am…

分布式事务(Seata-AT模式)

角色说明 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器 管理分…