【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 = 0for i in range(begin, end + 1):sum += iprint(sum)#调用函数
calcSum(1, 100)
calcSum(1, 1000)
calcSum(300, 400)

代码解释及语法格式 


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

1、函数调用

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

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

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

3、函数参数

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

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

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

注:

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

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

4、函数的返回值

返回值的使用和作用

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

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

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

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

一般写函数用return语句返回

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

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

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

def isOld(sum):if sum % 2 == 0:return Trueelse:return Falseresult = isOld(7)
print(result)
result = isOld(10)
print(result)

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

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

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

输出坐标轴上的点x和y

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

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

输出坐标轴上的点y

def getpoint():x = 3y = 6return 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 xx = 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 1return 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.mzph.cn/bicheng/181.shtml

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

相关文章

Leo赠书活动-24期 【三大层次学习企业架构框架TOGAF】文末送书

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…

自定义Centos的终端的命令提示符

背景 当我们使用终端登陆Centos时,就自动打开了ssh终端。这个终端的命令提示符一般是这样的: 这个以#号结束的一行字,就是我们说的命令提示符了。 这个是腾讯云的服务器的提示符,可以看到主机名是VM-4-7-centos。 但是这个看起…

STL库 —— priority_queue 的编写

目录 一、 优先级队列的介绍 二、优先级队列的使用 2.1 建大堆 less 2.2 建小堆 greater 2.3 详解 greater 与 less 三、 priority_queue 的模拟实现 3.1 编写框架 3.2 编写简单函数 3.2 进堆 向上调整 3.3 出堆 向下调整 四、完整代码 一、 优先级队列的介绍 1.…

web轮播图

思路: 例如:有5张轮播的图片,每张图片的宽度为1024px、高度为512px.那么轮播的窗口大小就应该为一张图片的尺寸,即为:1024512。之后将这5张图片0px水平相接组成一张宽度为:5120px,高度依然为:5…

守望先锋2怎么在steam上玩 守望先锋归来steam下载安装

守望先锋2怎么在steam上玩 守望先锋归来steam下载安装 《守望先锋2》是知名游戏开发商暴雪娱乐开发的团队射击游戏。与第一部相比,守望先锋2加入了更多元素和新特性。游戏设定在未来的世界,玩家可以选择不同的英雄(heroes)加入战…

python聊天室

python聊天室 文章目录 python聊天室chat_serverchat_client使用方式1.局域网聊天2.公网聊天 下面是一个简单的示例,包含了chat_client.py和chat_server.py的代码。 chat_server chat_server.py监听指定的端口,并接收来自客户端的消息,并将消…

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

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

AR地图导览小程序是怎么开发出来的?

在移动互联网时代,AR技术的发展为地图导览提供了全新的可能性。AR地图导览小程序结合了虚拟现实技术和地图导航功能,为用户提供了更加沉浸式、直观的导览体验。本文将从专业性和思考深度两个方面,探讨AR地图导览小程序的开发方案。 编辑搜图 …

数据结构之排序了如指掌(二)

目录 题外话 正题 选择排序 选择排序思路 选择排序代码详解 选择排序复杂度 双向选择排序 双向选择排序思路 双向选择排序代码详解 堆排序 堆排序思路 堆排序代码详解 堆排序复杂度 冒泡排序 冒泡排序思路 冒泡排序代码详解 冒泡排序复杂度 小结 题外话 今天…

变配电场所智能综合监控系统无人化与自动化升级改造

一 项目背景 国家电力建设飞速发展,为了提高管理水平,智能化建设迫在眉睫。变配电场所作为电网中的核心单元,数量巨大,是智能化建设的中坚部分。但由于变配电场所分布的地理位置过于分散,且配电网的自动化水平有待提高,单纯依靠人力来对变配电场所进行巡视,不仅增加…

【canvas】canvas综合运用:心形图案

#简言 利用canvas画出心形图案。 心形 心形图案可以两个椭圆相交组合&#xff0c;也可以直接画路径实现。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" conte…

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

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

图与图搜索算法

图搜索算法是一个非常重要的概念&#xff0c;它是计算机科学中图论和算法设计的基础部分。在开始讨论图搜索算法之前&#xff0c;我们需要先理解什么是图以及图的基本结构。 什么是图&#xff1f; 图&#xff08;Graph&#xff09;是一种非线性数据结构&#xff0c;它由一组点…

点云的投影------PCL

点云的投影 /// <summary> /// 参数化模型投影点云 /// </summary> /// <param name"cloud">点云</param> /// <param name"x">投影平面x面的系数</param> /// <param name"y"></param> /// &…

Python下利用Selenium获取动态页面数据

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

使用python进行网站答题操作

介绍&#xff1a; 使用Python和DrissionPage模块编写自动化脚本&#xff0c;以模拟人的行为访问网站并获取题目答案进行自动答题。这个脚本似乎是为答题网站设计的&#xff0c;通过监控特定数据包地址来获取题目答案&#xff0c;并模拟点击正确答案进行答题。 代码中的逻辑包…

C++奇迹之旅:探索C++拷贝构造函数

文章目录 &#x1f4dd;拷贝构造函数&#x1f320; 概念&#x1f309;特征 &#x1f320;浅拷贝(值拷贝)&#x1f309;深拷贝 &#x1f320;拷贝构造函数典型调用场景&#x1f320;应用时效率的思考&#x1f6a9;总结 &#x1f4dd;拷贝构造函数 &#x1f320; 概念 在现实生…

京西商城——前端项目的创建以及前后端联调

创建VUE项目 在jingxi_shop_project文件夹中再创建一个 frontend 文件夹用来存放前端项目 /jingxi_shop_project/backend/jingxi_shop_project....../frontend/jingxi_shop_web......首先要安装 node.js 和 VUE cli&#xff0c;进入到项目目录内创建项目 vue create jingxi_…

前端css中transition的使用

前端css中transition的使用 一、前言二、transition的4个属性三、例子1.源码12.源码1运行效果 四、结语五、定位日期 一、前言 CSS中的transition&#xff08;过渡&#xff09;&#xff0c;根据字面意思就可以理解成一种变化状态的过程。当我们有一个方形&#xff0c;我们想让…

Ubuntu 22最新dockers部署redis哨兵模式,并整合spring boot的详细记录(含spring boot项目包)

dockers部署redis哨兵模式&#xff0c;并整合spring boot 环境说明相关学习博客一、在docker中安装redis1、下载dockers镜像包和redis配置文件&#xff08;主从一样&#xff09;2、编辑配置文件&#xff08;主从一样&#xff09;3、启动redis&#xff08;主从一样&#xff09;4…