哈喽!大家好,我是你们的Python学习搭子,跟你一样,从零开始。
在大家学习Python函数的时候,是不是也被下面这些问题搞得晕头转向:明明已经把函数定义好了,调用时却没得到想要的结果?函数一调用就不对,不是故障SyntaxError就是IndentationError?感觉形参与实参就是双胞胎,一不小心就认错?不过没关系,下面我就通过"一杯奶茶外卖",让大家彻底把这3件事搞明白:函数怎么设、怎么调、形参实参怎么分!
一、函数是什么?为什么要创建函数?
1)由一杯奶茶说起
- 大家试想这样一个场景:如果你每天都要点奶茶,每次都重复输入一遍“杯型、糖度、冰量”等个人喜好,是不是又麻烦又影响体验感? 所以平时我们的外卖软件都是这样一套点餐方式:把“点单流程”变成一系列固定步骤,顾客只需要轻点选项便能完成喜好选择。
2)当现实映射到代码
- 编写代码也是一样,有些代码我们需要反复使用,每次重复编写不仅耗时费力,还容易出错。既然奶茶点餐可以模块化,我们是否也能让代码复用变得同样便捷?答案是肯定的!于是,我们把一段能反复调用的代码打包起来,起个名字,这个打包出来的东西就叫:函数!
二、怎么创建一个函数?
例1:做一杯"基础款奶茶"
deforder_milktea(): print("我要一杯奶茶")
为了演示函数的创建过程,方便大家理解,这里 print()输出语句仅作为演示,大家不要误认为“函数就是为了打印”,在后面的学习中我们会用 return让函数“交出结果”。
1) def 关键字
对于初学函数的朋友来说,上面这段代码可能显得陌生又熟悉,为什么陌生呢?因为代码起始的def好似是一个声明,至于它的作用是什么?对整个函数的影响又是什么?细究起来,大家却云里雾里。其实,当看到 def 时,相当于你对Python说:“我要开始定义一个函数了。”
2) 冒号与缩进
说到熟悉,函数的创建与我们前面学习的if语句、for循环等流程控制语句一样,函数尾部同样需要加英文冒号“:”,表示函数头的结束,这也是为了告诉 Python:“下面的内容属于这个函数。”与流程控制语句一样,函数的执行程序也需要敲Tab键进行缩进(缩格规则),用来界定函数体的范围,正因如此,冒号和正确的缩进缺一不可,否则程序会抛出 IndentationError 或 SyntaxError。这里我为大家总结了一句口诀:冒号一出,缩进跟上,希望可以帮助大家理解运用。
3)函数命名与括号
紧跟在def后面的是函数名order_milktea(订奶茶),这个名字是不是很有辨识度?就算英语基础不怎么好的人,也能猜出这个名字与奶茶相关,但如果你看到一个叫 abc() 或者 function1() 的函数,肯定会一头雾水,因为你根本就无法通过该函数名判断出该函数是做什么的。小编本人就深受其害,希望各位编写程序时一定要引以为戒
,从一开始就规范格式。对于函数的命名规则,其实与我们前面学习的变量命名可谓是大同小异,由于函数的命名需体现函数的功能,所以,对于函数的命名,我们通常使用 "动词+名词" 的结构。综上,函数创建的基础知识我们已有详尽地学习,但需要我们值得注意的是,函数创建后并不会自行运行,我们还需要调用!
小结
在Python中,每个函数对象都是一个由关键字 def 引领的复合语句。其主要包含函数头与函数体两部分。与流程控制类复合语句一样,都需要遵守缩格规则,且需要在函数头尾部加英文冒号(:),如下示例所示:
def 函数名 (参数列表): 函数体
三、函数的调用
例2:
# 代码1deforder_milktea(): print("我要一杯奶茶")# 代码2order_milktea()
先做个小预测:如果大家只写代码1,但不写代码2,Python会执行函数代码吗?
︵
请尝试编写︶
答案是:不会。因为 def 只是把流程存起来,只有通过 order_milktea() 函数名调用后,该函数才会执行,最后输出我要一杯奶茶 。 打个比方:公司会议前主管点名,必须员工到会后(创建函数),主管叫到该员工的名字才会有回应(调用函数),两者缺一不可。函数调用也是如此,所以这里给大家一个记忆口诀:先创建,后点名,即我们需要先创建函数,运行该函数时需要通过函数名进行调用 。所以,用一句话总结就是: 函数写好了不等于它会自动运行。你得"叫它一声",它才会干活。这个动作就叫调用。四、参数传递
要想函数按我们的意愿“干活”,仅仅只是“叫它一声”,可远远不够,我们还需要参数来配合。
1) 形参与实参
现在,我们继续以奶茶点餐为例为各位演示参数如何传递。例3:
deforder_milktea(size): print(f"我要一杯{size}的奶茶")order_milktea("大杯")# 输出为:我要一杯大杯的奶茶
在例3示例中, size 与 大杯 均为参数,大家可以猜测一下,其中那个是形参那个是实参?像size这样,在定义函数中创建的参数为形参,其作用为函数实参的占位符,像大杯 这种调用函数时输入的值,便是实参。总结一下,其实规则很简单:
- 调用函数时括号里的是实参,也就是我们需要传递给函数的信息。
在一个函数中我们可以传入多个参数,为大家留个课后作业,请分别传入相应实参,让下列函数可以正常运行。
课后例题
deforder_milktea(size,sugar,ice): print(f"我要一杯{size},{sugar},{ice}的奶茶")
参考答案详见评论区