一、函数的定义
def
是 define(中文含义:定义)的缩写,表示你要向 Python 传授做事流程
这就是完整的教 Python 做事的代码结构,要注意以下几点:
- 用 def 引导出要定义的“暗号”,后面加上一对括号和冒号作结尾;
- 具体的做事代码直接写在下面,前面统一加缩进。
这样,Python 就记住了, make_juice
是它学会的“新暗号”,专门用来制作猕猴桃汁。以后,我们只要使用 暗号名()
的格式,就能让 Python 进行我们刚刚教会它的一系列操作。
# 前 6 行教会 Python 做猕猴桃汁
def make_juice():
print('将猕猴桃去皮')
print('将猕猴桃切块')
print('将切碎的猕猴桃放进榨汁机')
print('将果汁倒进杯子中')
print('制作完成!')
# 缩进结束,表示定义完毕
# 后 3 行用 Python 做三杯猕猴桃汁
make_juice()
make_juice()
make_juice()
在编程中有个专门的名字:函数。我们用严谨的语言来描述一下什么是 函数
函数的定义中,有三个要点:
- 组织好的:做猕猴桃汁的过程代码预先写在了教 Python 做事的过程中;
- 可重复使用的:我们可以和 Python 对无数次暗号,Python 就会乖乖执行无数次;
- 用来实现特定功能:做猕猴桃汁。
前面教 Python 做事,并设定好“暗号”的过程,叫作 定义函数。其中缩进的几行表示具体处理过程的代码,叫 函数体。
而后面让 Python 真正根据暗号做事的过程,叫作 调用函数,我们可以让 Python 执行无数次暗号,也就是说,函数一旦定义,就可以任我们随意调用。
二、函数的参数
果不管怎么变,都是要去皮、切块、放进榨汁机的。所以我们需要对函数进行改造,让它对所有水果都通用。
我们可以预设一个临时变量 fruit
,表示将要处理的水果,放进函数的定义过程中,让 Python 学习更灵活的做事流程。
# 定义函数时,括号中写进预设的变量 fruit
def make_juice(fruit):
# 把 fruit 写进函数体中
print('将' + fruit + '去皮')
print('将' + fruit + '切块')
print('将切碎的' + fruit + '放进榨汁机')
print('将果汁倒进杯子中')
print('制作完成!')
#主要传入水果的参数就行了
# 做苹果汁
make_juice('苹果')
# 做桃子汁
make_juice('桃子')
根据这个逻辑,Python 读到 make_juice('桃子')
时,也自然可以打印出榨桃子汁的正确流程。
定义函数时预设的临时变量,有个专门的名称:参数。定义过程所用的样板 fruit
,叫作 形式参数,简称 形参,只起示范作用;而实际调用函数时 make_juice('桃子')
中的 '桃子'
,叫作 实际参数,简称 实参。
参数,函数就更加灵活而强大了。定义函数时,我们只要专心总结出固定的操作流程,至于具体根据场景而变化的元素,只要交给 参数 去统一表示就可以啦。
这种“预设临时变量,写进固定流程”的思路,想必我们早就不陌生了,在学数学和物理公式时,用的都是这种思路。比如圆的周长公式 C = 2πr,我们只要用 π 乘以半径乘以 2,就能得出周长,具体的半径是多少,实际运算中代入就好。
由于思路相通,所以求圆周长的公式,我们可以写成一个函数,将半径 r 作为参数:
def circle(r): # π 取 3.14 c = 2 * 3.14 * r print('该圆的周长是' + str(c))
三、函数的返回值
在 Python 中,None
是一个特殊的值,表示“什么也没有”,在这里,表示变量 result
是空的,没有任何值,硬要通过 print(result)
打印的话,就只能打印出 None
通知你一下,“不要问,问就是没有”。
1、return语句
def circle(r):
c = 2 * 3.14 * r
result = circle(2)
print(result)
#None
函数内部的代码是一个封闭的“小团体”,不管里面的代码运行出了什么,都不会主动和外面的代码分享。就算函数体里面加个 print()
,也只是把结果打印在屏幕上而已,不会和别的代码互通有无
这时候,我们需要在函数内部的结尾,加上 return
语句来帮忙,它的作用就是函数内部与外部世界的“信使”,负责将函数内部的值传递给外面。
def circle(r):
c = 2 * 3.14 * r
# 函数体最后一行加上 return 语句
return c
result = circle(2)
print(result)
print('该圆的周长为' + str(result))
打印结果为:
四、函数的要点
1、典型的函数
- 告诉 Python,要定义一个函数;
- 暗号名,即函数的名字是什么;
- (非必要)这个函数需要什么 参数;
- 处理过程是什么样的;
- (非必要)把什么样结果 返回 给外部。
有了这个通用思路,我们一定能写出功能明确的函数!
Python 中自带了很多函数,给我们提供了很多常用的功能,我们已经接触过了一些,比如 type()
、 input()
、str()
等,它们都是既有参数,又有返回值的函数。
print(type(5)) # 输出: <class 'int'>
我们以 type()
函数为例,它的调用时,实际参数 是整数 5
,经过内部一系列不需要我们关心的操作后,得出的 返回值 为字符串 '<class 'int'>'
,借助 print()
函数打印了出来。
2、函数的命名
函数的命名和变量的命名是一样的,由数字、字母、下划线组成,并且不可以用数字作为名称的开头。另外,名称本身要表达自己的功能,要简单易读,并且中间不能有空格。
3、函数格式的易错点
中文的括号和冒号会被识别为无效字符
4、return语句的陷阱
return
语句有一个特别要注意的点,return
语句是函数执行结束的标记,运行完 return
语句,就会退出函数的执行,不管后面还有没有其它代码。所以我们一般都要把 return
语句放在最后。