当前位置: 首页 > 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博客 座右铭:梦想是一盏明灯,照亮我们前行的路,无论风雨多大,我们都要坚持不懈。 异…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

vscode里如何用git

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

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

Web后端基础(基础知识)

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...