跟着NOAI考纲学Python,学完就能考,第8课

跟着NOAI考纲学Python,学完就能考,第8课

本文核心观点
NOAI 自学 Python 系列第 8 课:def 定义函数、参数与返回值、默认参数与关键字参数、函数封装与代码复用。

跟着NOAI考纲学Python,学完就能考,第8课

每天一个知识点,带你自学NOAI,加入我们吧~

前面写的代码,用一次写一次。但如果同一段代码要用好多次呢?总不能复制粘贴十遍吧。这节课学函数——把一段代码打包起来,取个名字,以后一句话就能调用。

定义函数

def 关键字定义一个函数:

def say_hello():
    print("你好!")

say_hello()
say_hello()

你好!
你好!

拆开看:

def say_hello(): — 定义一个叫 say_hello 的函数,冒号结尾

下面缩进的代码是函数的函数体,定义的时候不会执行

say_hello() — 调用函数,加括号才会执行

定义函数 = 写好菜谱,调用函数 = 按菜谱做菜。写菜谱的时候不会做菜,你喊一声"做!"才动手。

给函数传参数

函数可以接收参数,这样每次调用可以传不同的值:

def say_hello(name):
    print("你好," + name + "!")

say_hello("小明")
say_hello("小红")

你好,小明!
你好,小红!

括号里的 name 就是参数。调用的时候传了 "小明",函数里的 name 就等于 "小明"

参数可以有多个,用逗号隔开:

def add(ab):
    print(a + b)

add(35)
add(1020)

8
30

返回值

上面的函数用 print 把结果直接打印出来了。但很多时候,你想让函数把结果交回来,自己再拿去用。这时候用 return

def add(ab):
    return a + b

result = add(35)
print(result)
print(add(1020) + 1)

8
31

拆开看:

return a + b — 函数算完 a + b,把结果交回去

result = add(3, 5) — 调用函数,返回值存到 result

add(10, 20) + 1 — 返回值可以直接拿来运算,30 + 1 = 31

print 是把东西显示在屏幕上给你看。return 是把东西交回给程序,程序还能接着用。

return 会立刻结束函数

函数执行到 return 就停了,后面的代码不会执行:

def check(score):
    if score >= 60:
        return "及格"
    return "不及格"

print(check(80))
print(check(45))

及格
不及格

传入80,score >= 60 成立,执行 return "及格",函数立刻结束,下面的 return "不及格" 不会执行。传入45,条件不成立,跳过第一个return,执行第二个。

组合起来用

函数可以调用函数,也可以和循环、列表配合。看一个实际的例子——算全班平均分:

def average(numbers):
    total = 0
    for n in numbers:
        total = total + n
    return total / len(numbers)

scores = [8892756095]
print("平均分:"average(scores))

平均分: 82.0

把"算平均分"这个逻辑打包成函数后,不管是语文成绩、数学成绩还是别的列表,都可以一句 average(列表) 搞定。

易错点

1. 定义了不调用,什么都不会发生

def say_hello():
    print("你好!")

# 只定义没调用,屏幕上什么都不输出

定义函数只是"写好菜谱",你不喊 say_hello(),它不会自己执行。

2. 调用时忘加括号

print(add)     # 输出的是函数本身,不是计算结果
print(add(35)) # 加括号才是调用,输出 8

3. 搞混 print 和 return

def add_wrong(ab):
    print(a + b)     # 只是显示,没有交回结果

result = add_wrong(35)
print(result)

8
None

函数里用了 print 而不是 return,所以屏幕上确实显示了8,但 result 拿到的是 None(什么都没有)。想把结果交回来,必须用 return。

动手试试

自己先想,想完了香农平台上写代码跑一遍验证。

练习1:预测输出

下面这段代码运行后,屏幕上会输出什么?

def double(x):
    return x * 2

print(double(4))
print(double(10) + 3)

提示:return 把结果交回来,交回来的值可以直接参与运算。

练习2:找bug

下面这段代码想算长方形的面积,但运行后 result 的值是 None。哪里出了问题?

def area(widthheight):
    print(width * height)

result = area(53)
print("面积是:"result)

提示:回头看看"易错点"第3条。

练习3:写代码

写一个函数 max_of_three(a, b, c),接收三个数字,返回其中最大的那个。然后调用它,打印结果。

提示:可以用 if 判断,也可以想想之前学的列表有没有什么方法能帮忙。

去平台上手写代码

学会函数,你的代码可以"复用"了。回顾一下:

def 函数名(参数): — 定义函数

函数名(值) — 调用函数,括号不能少

return — 把结果交回给程序,函数立刻结束

print ≠ return — print是给你看的,return是给程序用的

这篇文章讲的是香农NOAI学习平台"Python基础"模块的第八课。平台上有更多的练习题,写完代码点运行,对不对立刻就知道。

香农NOAI学习平台
地址:shannon.arpa.school
微信扫码登录就能用,免费。
找到「Python基础」→「函数」,从第一道题开始写。

下一篇讲字典——用"名字:值"的方式存数据,比列表更灵活,查东西更方便。

微信二维码

扫码备注【NOAI】加交流群