函数:python与c语言

1 def test_func(compute): # ① 定义 test_func(不执行)

2 result = compute(1, 2) # ⑤ 调用 compute,跳转到第5行

3 print(result) # ⑦ 打印结果

4

5 def compute(x, y): # ② 定义 compute(不执行)

6 return x + y # ⑥ 计算1+2,返回3

7

8 test_func(compute) # ③ 调用 test_func,跳转到第1行

Python(解释型,顺序执行)

· 只能:先定义,后调用(物理顺序)

· 没有"声明"这个概念

**```python

✅ 正确:先定义

def func():
pass
func()**

# ❌ 错误:调用在前
func() # NameError
def func():
pass
```


C语言(编译型,全局扫描)

两种方式都可以:

方式1:先定义,后调用(最简单)

```c
void func() { } // 定义
int main() {
func(); // 调用
}
```

方式2:先声明,后调用,定义放main后面

```c
void func(); // 声明
int main() {
func(); // 调用
}
void func() { } // 定义在后面
```

两种都完全合法,编译都能通过。


关键对比表

语言 先定义后调用 先声明后调用(定义在后) 只声明不定义

Python ✅ 可以 ❌ 没有声明机制 ❌ 不行

C语言 ✅ 可以 ✅ 可以 ❌ 链接会报错


为什么C语言多一个"声明"的选项?

因为编译时,编译器需要知道:

· 函数叫什么名

· 参数是什么类型

· 返回值是什么类型

声明就是告诉编译器:"这个函数存在,细节在后面,你先让我用。"

定义才是真正写出函数体代码。

Python不需要声明,是因为执行到def时才创建函数对象,不存在"提前告诉编译器"这个步骤。

Python:必须先定义才能调用,顺序固定
C语言:可以先定义后调用,也可以先声明后调用(定义放后面),两种都行

Python:
调用前必须有 def(定义)
没有"声明"这个东西

C语言:
调用前可以有声明(不一定需要定义)
定义可以放在调用的后面
当然也可以定义在前,调用在后

声明 vs 定义

· 声明:只告诉编译器"有这个函数,参数和返回值是什么样的",不写具体代码

```c

void drive(); // 声明,没有大括号 {}

```

· 定义:写出函数的具体代码

```c

void drive() { // 定义,有大括号 {}

printf("开车");

}

```

帮你记一个死规则

在 Python 里,只要你在代码里写 函数名()(带括号),那么在这行代码执行之前,这个函数必须已经被 def 定义过了。
而只是写 函数名(不带括号),只是拿它的"地址",不会触发"定义必须在前"的问题。

相关推荐
今儿敲了吗14 分钟前
02词云生成器
笔记·python
李高钢15 分钟前
Python Tornado 框架入门:从零搭建你的第一个异步 Web 应用
前端·python·tornado
白色的北极熊15 分钟前
c语言 输出菱形字符串
c语言·开发语言
学习智者41 分钟前
《玄》IDE v3.6.3重磅发布:全功能修复与性能飞跃
开发语言·c++·ide·算法·中文语言 玄
奔跑吧树袋熊1 小时前
多租户隔离该做到哪一层:从连接池到 ORM 的取舍
开发语言·数据库·oracle·系统架构
大江东去浪淘尽千古风流人物1 小时前
【LoMa】局部特征匹配重访:从LoMa-B到旋转不变LoMa-R的架构与工程实践
开发语言·深度学习·计算机视觉·r语言·视觉定位·sfm·局部特征匹配
菜鸟~noob2331 小时前
【电子战】测向精度极限——克拉美-罗下限(CRLB)与误差分析【含matlab代码】
开发语言·matlab
m0_734571761 小时前
深入理解C++ 析构函数<二>析构顺序
开发语言·c++
ocean21031 小时前
2025-2026年Python大厂面试高频问题
python·面试·面试经验
T1mzhou1 小时前
ARM64 Linux 6.10 内核驱动(14):drivers/base/platform.c:板级设备主战场
linux·c语言·开发语言·arm开发