【python从入门到精通】-- 第五战:函数大总结

news2024/12/24 8:37:30

🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)

目录

 导图

 函数

介绍

 函数引入

代码解释及语法格式 

关于函数的有关术语和规则

1、函数调用

2、函数的定义和使用顺序

3、函数参数

4、函数的返回值

返回值的使用和作用

在一个函数中返回值可以有多个

函数一次多个返回值的使用

有多个返回值忽略其中某一个返回值

链式调用 

变量作用域

嵌套调用

函数递归

递归使用

递归优缺点 

参数默认值

 关键字参数


 导图


 函数

介绍

编程中的函数和数学中的函数有一定的相似之处.

栗子:初中学的正弦函数(y = sinx)

编程中的函数, 是一段可以被重复使用的代码片段


 函数引入

分别求1-100,1-1000,300-400的总和

#求1-100的总数和
sum = 0
for i in range(1, 101):
    sum += i
print(sum)

#求1-1000的总数和
sum = 0
for i in range(1, 1001):
    sum += i
print(sum)

#求300-400的总数和
sum = 0
for i in range(300, 401):
    sum += i
print(sum)

 上面👆是我们之前所学过的知识

接着我们用函数替换掉上面代码

#定义函数
def calcSum(begin, end):
    sum = 0
    for i in range(begin, end + 1):
        sum += i
    print(sum)

 #调用函数
calcSum(1, 100)
calcSum(1, 1000)
calcSum(300, 400)

代码解释及语法格式 


关于函数的有关术语和规则

1、函数调用

函数定义并不会执行函数体内容, 必须要调用才会执行. 调用几次就会执行几次,如像上面调用了三次会执行三次

2、函数的定义和使用顺序

函数必须先定义,再使用如看上图👆

3、函数参数

在函数定义的时候, 可以在 ( ) 中指定 "形式参数" (简称 形参), 然后在调用的时候, 由调用者把 "实际参数" (简称 实参) 传递进去.

这样就可以做到一份函数, 针对不同的数据进行计算处理.

函数的形参和实参就如同签合同的甲方和乙方一样

注:

①一个函数可以有一个形参, 也可以有多个形参, 也可以没有形参. 
②一个函数的形参有几个, 那么传递实参的时候也得传几个. 保证个数要匹配

③Python 是动态类型的编程语言, 函数的形参不必指定参数类型. 换句话说, 一个函数可以支持多种不同类型的参数.

4、函数的返回值

返回值的使用和作用

函数的参数可以视为函数的 "输入",

函数的返回值, 就可以视为函数的 "输出"

#定义函数
def calcSum(begin, end):
    sum = 0
    for i in range(begin, end + 1):
        sum += i
    return sum

 #调用函数
result = calcSum(1, 100)
print(result)

使用return语句把结果返回给函数调用者,再由调用者打印

一般写函数用return语句返回

这种种写法则专注于做计算逻辑, 不负责和用户交互. 那么就很容易把这个逻辑搭配不同的用户交互代码, 来实现不同的效果. 

在一个函数中返回值可以有多个

例如:用函数判断一个数是否为偶数

def isOld(sum):
    if sum % 2 == 0:
        return True
    else:
        return False

result = isOld(7)
print(result)
result = isOld(10)
print(result)

注:执行到 return 语句, 函数就会立即执行结束, 回到调用位置

函数一次多个返回值的使用

①一个函数是可以一次返回多个返回值的. 使用 , 来分割多个返回值.

输出坐标轴上的点x和y

def getpoint():
    x = 3
    y = 6
    return x, y
a, b = getpoint()
print(a, b)
有多个返回值忽略其中某一个返回值

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

输出坐标轴上的点y

def getpoint():
    x = 3
    y = 6
    return x, y
_, b = getpoint()
print(b)

链式调用 

例如上面判断一个数是否为偶数

最后两句代码可以转换为

print(isOld(7))

像这样,把一个函数的返回值, 作为另一个函数的参数, 这种操作称为链式调用


变量作用域

像上面代码函数getpoint中内部定义的 x, y 只是在函数内部生效. 一旦出了函数的范围, 这两个变量就不再生效了.

在函数内部的变量, 也称为"局部变量"
不在任何函数内部的变量, 也称为"全局变量"

①如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找

x = 6#全局(外部)
def test():
    x = 10#局部(内部)
    print(f'x = {x}')
test()
print(f'x = {x}')

控制台输出

x = 10

x =  6

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

x = 6#全局(外部)
def test():
    global x
    x = 10#局部(内部)
    print(f'x = {x}')
test()
print(f'x = {x}')

控制台输出

x = 10

x = 10

 注:

if / while / for 等语句块不会影响到变量作用域
换而言之, 在 if / while / for 中定义的变量, 在语句外面也可以正常使用. 


嵌套调用

函数内部还可以调用其他的函数, 这个动作称为 "嵌套调用" 

def fun1():
    print("函数 1")

def fun2():
    print("函数 2")
    fun1()

def fun3():
    print("函数 3")
    fun2()

def fun4():
    print("函数 4")
    fun3()
fun4()

控制台输出 

代码解释

函数之间的调用关系, 在 Python 中会使用一个特定的数据结构来表示, 称为函数调用栈 .

每次函数调用, 都会在调用栈里新增一个元素, 称为栈帧.


函数递归

递归是嵌套调用中的一种特殊情况, 即一个函数嵌套调用自己. 

递归使用

例如:计算6的阶层( 6! )

def fac(n):
    if n == 1:
        return 1
    return n * fac(n-1)

result = fac(6)
print(result)

注:

上述代码中, 就属于典型的递归操作. 在 fac 函数内部, 又调用了 factor 自身
注意: 递归代码务必要保证存在递归结束条件
比如 
if n == 1 就是结束条件. 当 n 为 1 的时候, 递归就结束了. 
每次递归的时候, 要保证函数的实参是逐渐逼近结束条件的. 
如果上述条件不能满足, 就会出现 "无限递归" . 这是一种典型的代码错误

递归优缺点 

递归的优点
①递归类似于 "数学归纳法" , 明确初始条件, 和递推公式, 就可以解决一系列的问题. 
②递归代码往往代码量非常少
递归的缺点
①递归代码往往难以理解, 很容易超出掌控范围
②递归代码容易出现栈溢出的情况
③递归代码往往可以转换成等价的循环代码.

    并且通常来说循环版本的代码执行效率要略高于递归版本. 


参数默认值

Python 中的函数, 可以给形参指定默认值. 
带有默认值的参数, 可以在调用的时候不传参. 

def Add(x, y, debug = False):
    if debug:
        print(f'x = {x},y = {y}')
    return x + y
print(Add(3, 6))
print(Add(5, 9, True))

控制台结果输出

1、此处 debug=False 即为参数默认值. 当我们不指定第三个参数的时候, 默认 debug 的取值即为 False.

2、带有默认值的参数需要放到没有默认值的参数的后面

错误使用:


 关键字参数

def Test(x, y):
    print(f'x = {x}')
    print(f'x = {y}')
Test(x = 3, y = 7)
Test(y = 7, x = 3)

最后两行代码就是关键字参数

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


 ***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“前途很远,也很暗,然而不要怕,不怕的人前面才有路”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。 

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

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

相关文章

元宇宙VR虚拟线上展馆满足企业快速布展的需要

想要拥有一个VR线上虚拟展馆,展现您的城市风采或企业特色吗? 相比实体展馆搭建,VR线上虚拟展馆投入资金少,回报周期短,只需几个月的时间,您就能开始资金回笼。那么一个VR线上虚拟展馆多少钱呢? 深圳VR公司华锐视点基…

C语言如何使⽤指针?

一、问题 指针变量在初始化以后就可以使⽤和参与操作了,那么就要⽤到对指针变量最常⽤的两个操作符——> * 和 & 。 二、解答 这⾥⼜要提到始终贯穿着指针的⼀个符号“ * ”,但是这⾥的“ * ”是作为指针运算符使⽤的,叫做取内…

三大常用自动化框架对比

上次发布过性能测试工具的对比后,有小伙伴后台留言,想了解一下自动化测试框架的对比,尤其是RobotFramework、pytest和unitest之间的优劣势情况。 这不我们今天就来分析一下他们之间的区别和各自的优缺点。 1 RobotFramework 优点:…

selenium 下载文件取消安全下载的方法

问题描述 我要从一个网站上下载文件,谷歌浏览器总是自动阻止下载,并询问我是否保留。 可是,我想要的是不要询问,默认下载即可。 运行环境 OS: macOSselenium: 4.19.0python: 3.10.11Chrome: 124.0.6367.62selenium chromedrive…

openEuler-23.03下载

下载地址:openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本:openEuler-23.03-x86_64-dvd.iso

CTF中常见的四种python逆向

说在前面: 什么是pyc文件? pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高, pyc 文件是 Python 编译过的字节码文…

WdatePicker异常,无法弹出日期选择框

官网:My97日期控件官方网站 My97 DatePickerhttp://www.my97.net/ 可能使版本太老了,可以更新一下,然后根据官方的文件进行使用。 我的异常是因为在网上找的包里面缺少文件,去官网拉了一下最新的就行了。

【Linux驱动层】iTOP-RK3568学习之路(二):vscode中设置头文件路径-完成代码自动补全

在Ubuntu下用vscode写Linux驱动层的时候&#xff0c;需要添加头文件&#xff1a; #include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h>但vscode没有智能提示&#xff0c;因此需要我们手动添加自己的头文件路径&#xff1a; topeetu…

Ubuntu 23.10.1 nginx源码安装

注&#xff1a;以下所有命令均在root管理员模式下&#xff0c;若不是&#xff0c;请在所有命令前加sudo 1、安装依赖库 1.1、安装gcc g的依赖库 apt-get install build-essential apt-get install libtool1.2、安装pcre依赖库 apt-get update apt-get install libpcre3 lib…

嵌入式科普(15)小米su7成本分析和拆解之智驶、座舱分析

目录 一、概述 二、小米su7成本分析 2.1 整车成本构成 2.2 三电系统 2.3 车身与底盘 2.3 智能网联 2.4 内外饰 三、小米su7拆解之智驶、座舱分析 3.1 主要芯片 3.2 智能驾驶&智能座舱 四、NXP S32K324汽车通用微控制器 嵌入式科普(15)小米su7成本分析和拆解之智…

【结构型模式】外观模式

​一、外观模式概述 外观模式定义与意图&#xff1a;外观类为复杂的子系统提供了一个统一的入口。外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。&#xff08;对象结构型模式&#xff09; 外观模式的特点&#xff1a; 1.又叫做门面模式&#xf…

JRT在线初始化完善

之前实现的在线初始化留了个尾巴&#xff0c;那就是环境下载页构造zip包的时候没修改JRTBrowser的连接串地址为当前网站&#xff0c;这样就要求网站部署好之后给用户下载之前有人要把服务器的浏览器地址配置好。这样就增加一个运维工作&#xff0c;如果忘了或者不知道的人就会导…

在Windows安装R语言

直接安装R语言软件 下载网址&#xff1a;R: The R Project for Statistical Computing 下载点击install R for the first time 通过Anaconda下载RStudio 提前下载好Anaconda 点击Anaconda Navigate 点击RStudio的Install下载就好了

labelimg安装和使用(解决闪退问题)

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f525; 系列专栏&#xff1a;计算机视觉 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到我的代码世界~ &#x1f601; 喜…

【行为型模式】命令模式

一、命令模式概述 命令模式的定义&#xff1a;将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。(对象行为型) 命令模式优缺点&#xff1a; 优点&#xff1a; 1.类间解耦&#xff1a;调用者角色与接收者角色之间没有任何依…

复合升降机器人教学科研平台——技术方案

一&#xff1a;功能概述 1.1 功能简介 复合升降机器人是一款集成移动底盘、机械臂、末端执行器、边缘计算平台等机构形成的教学科研平台&#xff0c;可实现机器人建图导航、路径规划&#xff0c;机械臂运动学、动力学、轨迹规划、视觉识别等算法功能和应用&#xff0c;提供例如…

Kubernetes 容器网络技术架构及原理分析,赋能数字化转型

浅谈容器网络原理 我们将深入探讨容器和 Kubernetes 的网络原理,以全面了解 Kubernetes Network 的 Service。这些知识将帮助您轻松理解和使用 Service。 容器技术充分利用 Linux 的原生功能,如命名空间隔离、cgroup 限制和 rootfs,实现隔离和限制。同样地,容器网络也依赖…

改手机IP地址的软件推荐

随着移动互联网的普及&#xff0c;手机已成为人们日常生活中不可或缺的一部分。而在使用手机的过程中&#xff0c;IP地址作为一个重要的网络标识&#xff0c;有时也需要进行修改或更改。为了满足这一需求&#xff0c;市面上涌现出了许多改手机IP地址的软件。虎观代理将对这些软…

202462读书笔记|《一世珍藏的诗歌200首》——你曾经羞赧地向我问起, 是谁最早在此留下足印

202462读书笔记|《一世珍藏的诗歌200首》——你曾经羞赧地向我问起&#xff0c; 是谁最早在此留下足印 《一世珍藏的诗歌200首》作者金宏宇&#xff0c;很多美好的诗&#xff0c;有徐志摩&#xff0c;戴望舒&#xff0c;林徽因&#xff0c;舒婷等的诗精选&#xff0c;很值得一读…

ins视频批量下载,instagram批量爬取视频信息【爬虫实战课1】

简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…