Python函数的定义
困难6让电脑记住你的“小魔法”——Python函数入门
嘿,小朋友!你有没有想过,如果电脑能记住一个“小魔法”,每次你念出它的名字,它就帮你做一件事,那该多酷?比如你喊一声“做早餐”,它就自动煎蛋、烤面包。在Python里,这种“小魔法”就叫 函数。函数可以把一段有用的代码打包起来,起个名字,以后只要叫这个名字,电脑就会自动执行那段代码,再也不用重复写很多遍了。
函数就像妈妈的“菜谱”
还记得妈妈教你炒鸡蛋吗?她告诉你:
- 打两个鸡蛋
- 加一点盐和葱花搅拌
- 倒油烧热
- 把蛋液倒进去炒熟
以后每次你想吃炒鸡蛋,只要说“我要炒鸡蛋”,妈妈就会按这个步骤做。Python里的函数就是这样一个“菜谱”:先定义好步骤,以后随时可以按步骤执行。
如何定义一个函数?—— def 关键字
在Python里,我们用 def 来定义函数,就像在电脑上写新菜谱。写法很简单:
def 函数名字():
要执行的代码(函数体)
def:告诉电脑“我要开始定义一个函数啦”- 函数名字:你自己取,最好有意义,比如
make_egg(做鸡蛋) - 小括号
():以后可以放参数(就像菜谱里的“加多少盐”),现在先空着 - 冒号
::表示“下面是函数体” - 函数体:要缩进(通常按一次Tab键或4个空格),表示这些代码属于这个函数
看一个最简单的例子:
def say_hello():
print("你好,欢迎学习Python!")
这个函数叫 say_hello,函数体只有一行:打印一句话。注意,函数体必须缩进,否则Python会报错。
函数名字怎么起?
函数名字就像给魔法起个咒语名字,要遵循规则:
- 只能包含字母、数字和下划线
_,不能以数字开头 - 不能用Python的“保留字”(比如
if、for、def这些关键字) - 最好用小写字母,多个单词用下划线连接,比如
make_sandwich、start_game - 名字要能看出函数的功能,比如
add_score(加分)比abc好100倍
错误的名字:1do_thing(数字开头)、my-function(用了减号)、print(和内置函数重名)
函数体里可以有很多条指令
就像做三明治不止一步,函数里也可以写很多行代码。下面这个函数会一步步打印做三明治的步骤:
def make_sandwich():
print("拿两片面包")
print("放上火腿和生菜")
print("盖上面包")
print("三明治做好了!")
函数体里也可以定义变量!比如我们想记录用了多少片火腿:
def make_sandwich():
ham_cnt = 2 # 火腿片数
bread_cnt = 2 # 面包片数
print("拿", bread_cnt, "片面包")
print("放上", ham_cnt, "片火腿和生菜")
print("盖上面包")
print("三明治做好了!一共用了", ham_cnt, "片火腿")
注意,函数里的变量只在函数内部有效,就像妈妈做菜时自己用的配料表,外面的人看不到。
为什么要用函数?
- 避免重复:如果你要在很多地方都打印“欢迎来到游戏!”,每次都写一遍很麻烦。定义一个函数
welcome(),以后每次只需写welcome()就够了。 - 更容易理解:把复杂的问题拆成几个小函数,每个函数做好一件事。比如做一个“计算器游戏”,可以拆成
show_menu()(显示菜单)、add_numbers()(加法)、sub_numbers()(减法)……代码就像搭积木一样清晰。 - 方便修改:如果有一天你想把“欢迎来到游戏”改成“欢迎来到Python冒险”,只需要改函数内部的一行代码,所有用到这个函数的地方都会自动更新,超级省力!
新手最容易犯的3个错误
-
忘记冒号
错误:def hello()(没有冒号)
正确:def hello(): -
缩进不一致
错误:函数体有的行缩进4个空格,有的缩进2个空格,或者忘了缩进
正确:所有函数体代码保持相同缩进(推荐4个空格或一个Tab) -
函数名字和内置函数重名
比如你定义一个函数叫print,会把Python原本的打印功能覆盖掉,导致混乱。可以用my_print或print_message。
完整可运行的例子
下面是一个完整的程序:定义了一个做披萨的函数,然后调用它两次(调用就是让函数真正执行,下一节会详细教,这里先试一下)。
# 定义函数:做披萨
def make_pizza():
topping = "芝士和火腿" # 配料
size = "大份" # 大小
print("准备" + size + "的披萨饼底")
print("放上" + topping)
print("放入烤箱烤15分钟")
print("香喷喷的" + size + "披萨做好啦!")
# 调用函数(让函数执行)
print("== 第一次做披萨 ==")
make_pizza()
print("")
print("== 第二次做披萨 ==")
make_pizza()
运行结果:
== 第一次做披萨 ==
准备大份的披萨饼底
放上芝士和火腿
放入烤箱烤15分钟
香喷喷的大份披萨做好啦!
== 第二次做披萨 ==
准备大份的披萨饼底
放上芝士和火腿
放入烤箱烤15分钟
香喷喷的大份披萨做好啦!
你看,只定义了一次 make_pizza,却可以反复使用,这就是函数的神奇之处!
接下来学什么?
你现在已经学会了如何定义函数(写“菜谱”),但还没有学“怎么让函数真正跑起来”以及“怎么给函数传递信息(比如要几片火腿?大小是多大?)”。下一节我们会学 函数的调用 和 参数。到时候你可以定义一个 make_pizza_with_topping(topping),每次做不同口味的披萨,就像给魔法加上“配料”参数,更加灵活!
继续加油,你已经学会了编程里最重要的一项技能:自定义函数!
例题精讲
在Python中,定义函数时使用的关键字是?
下列哪个是定义名为greet、无参数、打印'Hello!'的函数的正确语法?
在Python中,定义函数时,函数体可以为空,不包含任何语句。
以下代码定义了一个计算两数乘积的函数,请补充完整。
def multiply(a, b):
return ___以下代码定义了一个打印消息的函数,但缺少关键字。请补充。
___ show():
print('Hello, world!')