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

🌈 个人主页:白子寰
🔥 分类专栏: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.mfbz.cn/a/555427.html

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

相关文章

js BOM模型常用方法梳理

1、Bom定义 BOM是操作浏览器的模型,主要是对浏览器的一些操作。 2、获取浏览器窗口的尺寸 window.innerHeight:获取窗口的高度。 window.innerWidth:湖区窗口的宽度,只在window浏览器下使用。 3、弹出层 alert:弹出框。 confirm:确认框。返回值有true …

Redis中的Lua脚本(三)

Lua脚本 EVAL命令的实现 EVAL命令的执行过程可以分为以下三个步骤: 1.根据客户端给定的Lua脚本,在Lua环境中定义一个Lua函数2.将客户端给定的脚本保存到lua_scripts字典,等待将来进一步使用3.执行刚刚在Lua环境中定义的函数,以此来执行客户…

2.核心概念与安装配置

核心概念与安装配置 文章目录 核心概念与安装配置1、核心概念Docker整体架构及底层通信原理 2、安装DockerCentos安装Docker引擎阿里云镜像加速Docker run的过程 3、Docker相关命令 1、核心概念 镜像(image) Docker 镜像(Image)就…

Linux 搭建私有yum源仓库

一、环境准备 IP系统版本作用192.168.140.155CentOS 7.9.2009yum源仓库192.168.140.153CentOS 7.9.2009测试 准备两台服务器,一台作为yum源仓库,另一台作为测试使用。 二、搭建yum源服务器 (无法连接外网的情况,需要去官网下载镜…

ssm058基于Java的共享客栈管理系统+jsp

共享客栈管理系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对房屋出租信息管理混乱,出…

语言的未来:深度学习在自然语言处理中的革命

语言的未来:深度学习在自然语言处理中的革命 1 引言 自古以来,语言就是人类表达思想、传递信息、进行社会互动的基石。语言的复杂性既体现在其变化多端的语义、句法和语用层面,同时也反映在人类如何理解和产生自然语言的深奥之中。在这一节中…

飞企互联FE业务协作平台 ProxyServletUti 任意文件读取漏洞复现

0x01 产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外,支持企业B2B、C2B与O2O等核心需求,为不同行业客户的互联网+转型提供支持。其特色在于提供云端工作环境,整合…

活动报名 | 如何进行全增量一体的异构数据库实时同步

伴随着新技术的不断涌现,市场竞争也在不断开辟新的角斗场——新的业务需求,新的应用设想都在这里迸发。 面对如此日新月异的竞争环境,企业的当务之急,是为新应用扎根准备好随时可取、准确一致的高质量数据土壤。在这样的背景下&a…

电工与电子技术选择题填空题计算题复习题含参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 电工与电子技术复习题 一 . 单选题(共 33 题&a…

[Meachines][Easy]Headless

Tools https://github.com/MartinxMax/MDOG 针对XXS攻击 Main $ nmap -sC -sV 10.10.11.8 --min-rate 1000 类似于留言板 通过目录扫描,发现一个仪表盘 $ gobuster dir -u "http://10.10.11.8:5000" -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt 回…

邮箱群组是什么?怎么创建邮箱群组?

在我们群发邮件时,可能会遇到这样的状况,一个个输入邮箱地址效率很低,而且很容易就漏发。而对于一个企业来说,如果出现这样的问题,很有可能会影响公司的业务进展和团队协作。这个时候我们就需要邮箱群组这个功能&#…

移远通信:立足5G RedCap新质生产力,全力推动智能电网创新发展

随着全球能源结构的转型和电力需求的持续增长,智能电网产业迎来了新的发展机遇。而物联网、大数据等前沿技术的创新和应用,正在为电力行业的发展注入强劲的新质生产力。 4月9日,第四十八届中国电工仪器仪表产业发展技术研讨及展会在杭州拉开帷…

使用自己训练好的模型YOLOv8进行X-AnyLabeling自动标注

目录 1. 下载项目2. 创建环境3. 运行程序3.1 自行下载和添加官方模型3.2 使用自己训练好的模型标注自己的数据集 本机环境:win 10, GPU 1. 下载项目 git clone https://github.com/CVHub520/X-AnyLabeling.git2. 创建环境 仔细查看项目的README文件 …

电脑技巧:如何把Edge浏览器扩展程序打包安装到其他浏览器

目录 1、进入浏览器扩展界面 2、找到Edge浏览器扩展插件的路径 3、找到需要扩展的插件ID 4、打开浏览器扩展插件目录 5、进入打包扩展界面 6、 安装到其他浏览器 大家日常使用浏览器的时候通常会安装很多浏览器插件,从而大大提升我们的办公效率,有…

CTF中常见的四种python逆向

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

文件IO基础

一、文件描述符 调用 open 函数会有一个返回值,该返回值就是一个文件描述符( file descriptor),这说明文件描述符是一个 非负整数;对于 Linux 内核而言,所有打开的文件都会通过文件描述符进行索引。 当调用…

2024年第十六届“华中杯”(B题)大学生数学建模挑战赛| 时间序列,滑动窗口 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看华中杯 (B题)! CS团队倾…

《四月女友》定档5月18日 佐藤健、长泽雅美演绎唯美爱情

由川村元气担任编剧,山田智和导演,佐藤健、长泽雅美、森七菜主演的唯美爱情电影《四月女友》今日正式宣布定档5月18日,并发布了“相恋”版预告和“相拥”版海报。预告中,优美宁静的风景令人心生向往,藤代俊&#xff08…

【深度学习实战(8)】如何绘制loss曲线图

一、步骤 我们先定义一个dict,每一个key对应的value都是一个list。 loss_history dict((k, []) for k in ["epoch", "train_loss", "val_loss"])每一轮或者每一次迭代的损失都通过list记录下来。 loss_history["epoch"…

改手机IP地址的软件推荐

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