Python函数写好没反应_不是bug是你忘了喊它

你有没有遇到过这种情况:辛辛苦苦写了好几行代码,点击运行,控制台干干净净,一个字都没打印。

你反复检查,代码没报错,缩进没毛病,拼写没打错。然后你开始怀疑人生——这代码怎么不听话?

别慌,代码没毛病。你只是忘了"喊"它一声。

这就是Python函数最容易坑新手的地方:定义了不等于执行了

一、函数到底是个啥:一个智能家居的类比

官方定义说:函数是组织好的、可重复使用的、用于执行特定任务的代码块。

听着挺唬人,其实你早就会了。

想想智能家居的"场景模式"。你在手机上设置了一个叫"回家"的场景,里面排好了操作:开空调 → 温度调26度 → 开客厅灯 → 开卧室灯

设置好之后,每次回家你只需要说一句"执行回家场景",这一串操作就会依次自动执行。你不用再一个一个去点空调、点灯。

函数就是这个"场景模式"。

你提前把一堆代码写好,起个名字放那儿。以后想用的时候,喊一下这个名字,那堆代码就会依次执行。

二、函数能帮你干什么

有人可能会说:我直接写代码不就行了,干嘛还要包一层函数?

三个好处:

好处

大白话

代码复用

写一次,到处用。不用反复复制粘贴同一段代码

结构清晰

不同功能放在不同函数里,代码像收纳盒一样整整齐齐

模块化开发

大项目拆成小功能,团队成员各写各的函数,互不干扰

举个例子:你写了一段代码计算订单价格,300个地方都要用到。没有函数,你得把这段代码复制300遍。有了函数,你只需要写一次,然后喊300次名字就行。哪天价格算法改了,你只改函数里的代码,300个地方全部生效。

三、Python函数分三类

不是所有函数都需要你自己写。Python里的函数分成三类:

分类

特点

例子

内置函数

Python自带的,直接就能用

print()、type()、input()、range()

模块提供的函数

需要先导入模块才能用

math模块里的函数等

自定义函数

程序员自己写的,先定义再使用

你自己写的welcome()等

你其实早就在用函数了——print()就是Python官方给你准备好的内置函数。你不需要知道它内部怎么实现的,直接用就行。

但内置函数再全,也覆盖不了所有需求。真正体现你编码能力的,是自定义函数——这是你自己亲手写的。

四、手写一个函数:def是主角

定义一个函数,核心就一个关键字:def。

def welcome():
    print("欢迎来到xxx课堂")
    print("让天下没有难学的技术")

拆开看每一部分:

零件

代码

说明

关键字

def

define(定义)的缩写,告诉Python"我要定义函数了"

函数名

welcome

自己起的名字,要符合标识符命名规则

空格

def和welcome之间的空格

必须有,不写直接报错

圆括号

()

固定格式,不写就不是函数。以后可以在这里写参数

冒号

:

必须有,和if、for、while一样

函数体

两行print

缩进4个空格,属于函数的代码

def有个坑:不能写全称

def是define的缩写。有人可能会想:那我写全称define行不行?

# 这样写会报错!
define welcome():
    print("你好")

不行。Python只认def这三个字母,你写define它不认。

缩进决定了代码归不归函数管

和if、for、while一样,Python靠缩进来判断代码的归属。4个空格缩进的print属于函数体,不缩进的就不属于。

def welcome():
    print("第一句")      # 属于函数(有缩进)
    print("第二句")      # 属于函数(有缩进)
print("第三句")          # 不属于函数(没缩进)

五、为什么你的函数没反应:你忘了"喊"它

回到开头的问题:函数写好了,运行后控制台啥也没有——为什么?

因为你只定义了函数,没有调用它

# 定义函数
def welcome():
    print("欢迎来到xxx课堂")
    print("让天下没有难学的技术")

# 点击运行...控制台空空如也!

定义函数就像拍电影前的准备工作——场景搭好了,演员就位了,灯光打好了。但导演没喊"Action",谁都不会动。

调用函数就是喊"Action":函数名后面跟一对圆括号

# 定义函数
def welcome():
    print("欢迎来到xxx课堂")
    print("让天下没有难学的技术")

# 调用函数——这就是"喊它一声"
welcome()

运行结果:

欢迎来到xxx课堂
让天下没有难学的技术

这回有反应了。

新手第一大坑:写完def就觉得代码会自动运行。不会!定义函数只是"准备好了",调用函数才是"开始执行"。你必须写一行welcome()来喊它。

六、函数可以喊很多次

函数最大的价值就是复用——喊一次执行一次,喊三次执行三次:

def welcome():
    print("欢迎来到xxx课堂")
    print("让天下没有难学的技术")

welcome()   # 第1次调用
welcome()   # 第2次调用
welcome()   # 第3次调用

运行结果:

欢迎来到xxx课堂
让天下没有难学的技术
欢迎来到xxx课堂
让天下没有难学的技术
欢迎来到xxx课堂
让天下没有难学的技术

函数体里两行代码,调用了3次,就执行了6行输出。如果以后要改成4次、5次、100次,只需要多写几行调用,函数体一行都不用改。

七、先定义后调用:顺序不能反

Python里有一条铁律:函数必须先定义,后调用

如果你把调用写在定义前面:

welcome()   # 调用(在第2行)

def welcome():   # 定义(在第4行)
    print("你好")

运行直接报错:

NameError: name 'welcome' is not defined

翻译过来就是:"welcome"没定义

Python是从上往下执行代码的。执行到第2行welcome()的时候,它还不知道welcome是个什么东西——因为定义在第4行,还没执行到。就像你喊一个人名字,这人还没出生,怎么喊?

记住这个顺序:先def定义函数,再调用函数。就像先注册账号,再登录使用。没有"先登录再注册"的道理。

八、完整流程总结

写函数就两步:

第一步:定义函数(搭好场景,排好动作)

def 函数名():
    函数体(要执行的代码)

第二步:调用函数(喊一声"Action")

函数名()

两步缺一不可:

情况

结果

只定义,不调用

函数体一行都不执行,控制台没输出

只调用,不定义

直接报错:NameError: name is not defined

先调用,后定义

同样报错,Python从上往下执行,找不到未定义的函数

先定义,后调用

正常执行,函数体代码运行

写在最后

函数是编程世界里最重要的概念之一。这节我们只学了最基础的——无参数、无返回值的函数。

但就算是最基础的,也请记住这两件事:

第一,def只是定义,调用才会执行。你写了def却没写函数名+括号,代码就是一具没有灵魂的躯壳。

第二,先定义后调用,顺序不能反。Python从上往下执行,没见过的函数不能调用。

下节我们会学给函数加参数——让函数能接受不同的输入,干不同的活。比如welcome("张三")让函数对特定的人说欢迎。

留个思考题:如果同一个函数名定义了两次,Python会用哪一个?

把你的答案写在评论区。

展开阅读全文

更新时间:2026-07-14

标签:科技   函数   定义   代码   课堂   天下   技术   场景   控制台   空格   圆括号

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302034903号

Top