当前位置: 首页 > news >正文

python中的函数介绍

文章目录

  • 1.函数
    • 1.1 语法格式
    • 1.2 函数参数
    • 1.3 函数的返回值
    • 1.4 变量作用域
    • 1.5 函数的执行过程
    • 1.6 链式调用
    • 1.7 嵌套调用
    • 1.8 函数栈帧
    • 1.9 函数递归
    • 1.10 参数默认值
    • 1.11 关键词参数

1.函数

无论是编程中的函数还是数学中的函数,本质都是差不多的,丢给函数一些值,函数在经过一系列的处理返回一个值。不过编程上函数也可以不返回值就是了。
可以把编程上的函数理解为一段可以重复使用的代码片段.

求一段区间的和。

#求1~100的和
sum = 0
for i in range(1,101):sum+=1
print(sum)#求1~1000的和
sum = 0
for i in range(1,1001):sum+=i
print(sum)#求20~40的和
sum = 0
for i in range(20,41):sum+=i
print(sum)

这3段代码都同质化严重,就只有for循环之中的范围变了,那么我们就可以把其写为一个函数来多次调用。

#定义函数
def calcSum(left,right):sum = 0for i in range(left,right):sum+=iprint(sum)
#调用函数
calcSum(1,101)
calcSum(1,1001)
calcSum(20,41)
'''
5050
500500
630
'''

是不是很简洁,这就是函数的运用,把重复的代码给消除了。

1.1 语法格式

创建函数/定义函数

def 函数名(形参列表):函数体return 返回值

调用函数/使用函数

函数名(实参列表)#不考虑返回值
返回值 = 函数名(实参列表)#考虑返回值

函数只有在被调用时才会执行。

函数必须先定义再使用

test()def test():print('hahaha')

此时会报错,因为还没有定义就执行了。

1.2 函数参数

在函数定义的时候,可以在()中指定形式参数简称形参,然后在调用时,由调用者把实际参数简称实参,传递过去。
这样就可以做到一份函数,针对不同的数据进行计算处理。

#定义函数
def calcSum(left,right):sum = 0for i in range(left,right):sum+=iprint(sum)
#调用函数
calcSum(1,101)
calcSum(1,1001)
calcSum(20,41)

在这个代码中,left right就是函数的形参,1,100...就是函数的实参。
注意:

  • 一个函数可以由一个形参,也可以有多个形参,也可以没有形参。
  • 一个函数的形参有几个,那么传递实参的时候也要传相应的个数,保证个数匹配。
  • 和C++/java不同,python是动态类型的编程语言,函数的形参不必指定参数类=类型,也就是说一个函数可以支持多种不同类型的参数,类似于函数重载。
def test(tmp):print(tmp)
test(10)
test('hahaha')
test(False)
'''
10
hahaha
False
'''

1.3 函数的返回值

函数的参数可以视为函数的输入,那么函数的返回值就可以视为函数的输出

为了方便理解,我们可以把函数想象成一个工厂,所谓的函数输入就是提供给工厂的原材料,函数输出就工厂提供的产品。

还是上面的求和函数

##无返回值
#定义函数
def calcSum(left,right):sum = 0for i in range(left,right):sum+=iprint(sum)
#调用函数
calcSum(1,101)##有返回值
def calcSum(left,right):sum = 0for i in range(left,right):sum+=ireturn sum
#调用函数
print(calcSum(1,101))

这两种代码的区别就在于,前者直接子啊函数的内部就打印了,后者使用了return语句把结果返回給函数的调用者,再有调用者负责打印。

为了满足逻辑和用户交互分离的编程原则,第二种写法更好。在第一种写法中,然后后续我们需要保存结果到文件中,或者通过网络发送,第一种写法就难以胜任了。而第二种写法只负责计算逻辑不负责和用户交互,那么就会有更多的搭配可以实现。

一个函数可以有多个return语句。

#判断一个整数是否为奇数
def isOdd(num):if num%2 == 0:return Falseelse:return True
x = int(input("输入一个整数:"))
ret = isOdd(x)
print(ret)

执行到return语句函数便会退出,回到开始调用的位置。
验证:

#判断一个整数是否为奇数
def isOdd(num):if num%2 == 0:return Falsereturn True
ret = isOdd(10)
print(ret)

num是偶数,返回Flase后不会再返回True了。

python可以同时返回多个值,使用,来分割多个返回值。

def test():a = 100b = 200return a,b
x,y = test()
print(x)
print(y)
'''
100
200
'''

如果需要关注其中的部分返回值,可以使用_来忽略不需要的返回值。

def test():a = 100b = 200return a,b
_,y = test()
print(y)
# 200

1.4 变量作用域

def test():a = 100b = 200return a,b
a,b = test()

观察代码,函数内外部存在相同命名的变量。但其实这两组变量是不同的变量,只是名字相同,它们的地址是不会相同的。
每个变量都有它们的作用域,变量只能在自己的作用域中生效。

def test():a = 100b = 200return a
print(a)
# error name 'a' is not defined

在不同的作用域中,允许存在不同同名的变量。

x = 10
def test():x = 100print(f'函数内部x = {x}')
test()
print(f'函数外部x = {x}')
'''
函数内部x = 100
函数外部x = 10
'''
  • 在函数内部的变量,称为局部变量。
  • 不在任何函数内部的变量,也称为全变量。
    如果函数内部尝试访问的变量在局部不存在就会尝试去全局去寻找。
x = 100
def test():print(f'x = {x}')
test()
# 100

如果想要在函数内部修改全局变量的值,需要使用global关键字声明。

x = 100
def test():global xx = 10print(f'函数内部x = {x}')
test()
print(f'函数外部x = {x}')
'''
函数内部x = 10
函数外部x = 10
'''

如果没有global的声明的话,系统会认为x = 10是一个新创建的局部变量。

if/while/for等语句不会影响到变量作用域,也就是说,在if/while/for中定义的变量,在语句外也可以正常使用。

for i in range(1,10):print(f'函数内部 i = {i}')
print(f'函数外部 i = {i}')

1.5 函数的执行过程

  • 调用函数才会执行函数体代码,不调用就不会执行。
  • 函数体执行结束(或者遇到return语句)则会回到函数调用位置,继续往下执行。
def test():print('hahaha')print('hahaha')
print('xixixi')
test()
print('xixixi')

1.6 链式调用

其实前面我们已经用过链式调用了

##有返回值
def calcSum(left,right):sum = 0for i in range(left,right):sum+=ireturn sum
#调用函数
print(calcSum(1,101))#链式调用

把一个函数的返回值,作为另一个函数的参数就是链式调用

1.7 嵌套调用

函数内部还可以调用其他的函数,这叫做嵌套调用。

def testPrint():print('嵌套调用')print('嵌套调用')print('嵌套调用')

test函数内调用了print函数
一个函数里面可以嵌套调用任意多个函数。
函数嵌套的过程是非常灵活的。

def a():print('a')
def b():a()print('b')
def c():b()print('c')
c()
'''
a
b
c
'''

1.8 函数栈帧

函数之间的调用关系,在python中会使用一个特定的数据结构来表示,称为函数调用栈。每次的函数调用,都会在调用栈里新增一个元素,称为栈帧
每个函数的局部变量都包含在自己的栈帧中

1.9 函数递归

递归是嵌套调用中的一种特殊情况,就是自己调用自己。

程序调用自身的编程技巧称为递归(recursion)
递归作为一种算法在程序设计语言中广泛应用.一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型问题层层转化为一个于原问题相似的规模较小的问题来求解.
递归策略
只需要少量的代码就可以描述出解题所需要的多重计算,大大的减少程序的代码量.
递归的主要思想在于:把大事化小

#计算10的阶乘
def factor(n):if n == 1:return 1return n*factor(n-1)
print(factor(10))
## 3628800

注意:递归代码要保证

  • 存在限制条件,当满足这个限制条件的时候,递归便不在继续。
  • 每次递归调用之后越来越接近这个限制条件。
    递归的优点
  • 递归类似于数学归纳法明确初始条件,盒递推公式,就可以解决一系列的问题。
  • 递归的代码量往往很少。
    递归的缺点
  • 递归代码往往难以理解,很容易超出操控范围。
  • 递归代码容易出现栈溢出的问题。
  • 递归代码往往可以转换成等价的循环代码,并且通常来说,循环版本的代码效率更高。

1.10 参数默认值

Python中的函数,可以给形参指定默认值。
带有默认值的参数,可以子啊调用的时候不传参。即缺省参数

def add(x,y,debug = False):if debug:print("haha")return x+y
print(add(1,2))
print(add(10,20,True))'''
3
haha
30
'''

注意:带有默认值的参数需要放到没有默认值得参数后面

1.11 关键词参数

在调用函数得时候,需要给函数指定实参,一般默认情况下是按照形参得顺序,来传递实参的。但是我们也可以通过关键字参数,来调整这里的传参顺序,显式指定当前实参传递给哪个形参。

def test(x,y):print(f'x = {x}')print(f'y = {y}')
test(x = 10,y = 20)
test(y = 111,x = 222)'''
x = 10
y = 20
x = 222
y = 111
'''

相关文章:

python中的函数介绍

文章目录 1.函数1.1 语法格式1.2 函数参数1.3 函数的返回值1.4 变量作用域1.5 函数的执行过程1.6 链式调用1.7 嵌套调用1.8 函数栈帧1.9 函数递归1.10 参数默认值1.11 关键词参数 1.函数 无论是编程中的函数还是数学中的函数,本质都是差不多的,丢给函数…...

LinuxO(1)调度算法

概念 在Linux中,O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的,与系统中的进程数量无关。 运行队列结构 他采用了两个运行队列,一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程&#x…...

安防监控/视频系统EasyCVR视频汇聚平台如何过滤134段的告警通道?

视频汇聚/集中存储EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。平台支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为…...

SDKMAN!安装Maven

一、通过SDKMAN!正常安装 查看maven版本 sdk list maven安装maven 3.6.3版本 sdk install maven 3.6.3查看maven 3.6.3安装目录 sdk home maven 3.6.3安装过程中可能会失败,出现tmp临时目录中存在临时文件 # 移除临时文件,不要手动删除,…...

[NeurIPS 2022] STaR: Bootstrapping Reasoning With Reasoning

Contents IntroductionMethodExperimentsReferences Introduction CoT 推理可以有效提升 LLM 推理能力,但 few-shot prompting 无法发挥 CoT 的全部潜力,训练能够生成中间推理步骤 (i.e., rationale) 的 LLM 又需要大量人工标注 rationale,为…...

C++中对象的构造与析构

目录 一、引言 二、构造函数详解 1.构造函数的作用 2.构造函数的调用时机 3.构造函数的分类 三、析构函数详解 1.析构函数的作用 2.析构函数的调用时机 四、实例分析 五、总结 本文将详细讲解C中对象的构造和析构过程,包括构造函数、析构函数的作用及其调用时机…...

算法笔记(九)——栈

文章目录 删除字符串中的所有相邻重复项比较含退格的字符串基本计算机II字符串解码验证栈序列 栈是一种先进后出的数据结构,其操作主要有 进栈、压栈(Push) 出栈(Pop) 常见的使用栈的算法题 中缀转后缀逆波兰表达式求…...

动态SLAM总结一

文章目录 方法分类:OctoMap:(2013)UFOMap:(2020)Removert:(2020)ERASOR:(2021)DynamicFilter:(202…...

HTB:Mongod[WriteUP]

连接至HTB服务器并启动靶机 靶机IP:10.129.99.33 分配IP:10.10.16.12 1.How many TCP ports are open on the machine? 使用nmap对靶机进行全端口TCP脚本、服务扫描: nmap -sC -sV -T4 -p- {TARGET_IP} 可以看到靶机共开放TCP端口2个&…...

DenseNet算法:口腔癌识别

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 DenseNet算法结构 其基本思路与ResNet一致,但是它建立的是前面所有层和后面层的密集连接,它的另一大特色是通过特征在channel上的连接来实现特征重用。 二 设计理念 三…...

828华为云征文 | 利用FIO工具测试Flexus云服务器X实例存储性能

目录 一、Flexus云服务器X实例概要 1.1 Flexus云服务器X实例摘要 1.2 产品特点 1.3 存储方面性能 1.4 测评服务器规格 二、FIO工具 2.1 安装部署FIO 2.2 主要性能指标概要 三、进行压测 3.1 测试全盘随机读IO延迟 3.2 测试全盘随机写IO延迟 3.3 测试随机读IOPS 3.4…...

Pikachu-File Inclusion- 本地文件包含

前端每次挑选篮球明星,都会通过get请求,传了文件名,把页面展示出来,由于文件名时前端传给后台;并且查看源码,没有对参数做限制; 尝试直接从前端修改filename 参数; filename../../../../../../…...

linux基础 超级笔记

1.Linux系统的组成 Linux系统内核:提供系统最核心的功能,如软硬件和资源调度。 系统及应用程序:文件、任务管理器。 2.Linux发行版 通过修改内核代码自行集成系统程序,即封装。比如Ubuntu和centos这种。不过基础命令是完全相…...

Python——异常处理机制

Python 异常处理机制 Python异常与异常处理机制针对 Traceback 的解读try-except-else-finallyexcept语句except语句的机制在 except 语句中引用当前被处理的 Python 异常 finally语句finally语句执行后才能抛出未被处理的异常finally中执行return会导致异常丢失 raise 语句rai…...

社群团购中的用户黏性价值:以开源小程序多商户AI智能名片商城源码为例

摘要:本文探讨社群团购中的用户黏性价值,分析其与传统团购网站的区别,并阐述开源小程序多商户AI智能名片商城源码在增强社群团购用户黏性方面可能发挥的作用。 一、引言 在当今的商业环境中,社群团购逐渐成为一种重要的营销模式。…...

基于php的民宿预订管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...

java 从基础到入门 到架构师所需要学习的路线

java是一种广泛使用的编程语言,可以应用于多种平台和应用程序。下面是一个从基础到入门,再到架构师所要掌握的Java学习路线的详细列举: 学习Java基础知识: 理解面向对象编程的概念,如类、对象、继承、多态等。 学习Ja…...

【吊打面试官系列-MySQL面试题】什么叫视图?游标是什么?

大家好,我是锋哥。今天分享关于【什么叫视图?游标是什么?】面试题,希望对大家有帮助; 什么叫视图?游标是什么? 视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增&#…...

项目管理-信息技术发展

1、计算机软硬件 2、计算机网络 1)定义 2)分类:PAN LAN MAN WAN 公用网 专用网 3)网络协议 语法 语义 时许 4)网络标准协议 7层 5)IEEE 802 规范 6)TCP/IP 协议 7) SDN 软件定义网…...

异常处理【C++提升】(基本思想,重要概念,异常处理的函数机制、异常机制,栈解旋......你想要的全都有)

更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: C系列语法知识_Stark、的博客-CSDN博客 座右铭:梦想是一盏明灯,照亮我们前行的路,无论风雨多大,我们都要坚持不懈。 异…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...