从 C 语言过渡到 Python:给 C 程序员的快速入门教程

面向已经学过 C 语言、理解变量、函数、数组、指针、结构体、文件操作和基本算法的同学。
本文目标不是重新教你编程,而是帮助你把 C 语言思维平滑迁移到 Python。


一、为什么 C 程序员要学习 Python?

如果你已经学过 C 语言,你通常已经掌握了这些基础能力:

  • 变量和数据类型
  • 条件判断
  • 循环结构
  • 函数封装
  • 数组使用
  • 指针理解
  • 结构体
  • 文件操作
  • 基本算法
  • 程序调试思维

这些能力非常重要,因为 C 语言更接近底层,能帮助你理解内存、地址、数据结构和程序执行过程。

但是在很多场景下,Python 会更加高效。

例如:

  • 自动化脚本
  • 数据处理
  • 爬虫开发
  • 人工智能
  • 机器学习
  • 后端开发
  • 测试工具
  • 文件批处理
  • 图像处理
  • 科学计算
  • 数据可视化

可以简单理解:

C 语言:更接近底层,适合系统开发、嵌入式、驱动、性能敏感场景
Python:更接近业务和工具层,适合快速开发、自动化、数据处理、AI 应用

如果你已经会 C,那么学习 Python 会比零基础更快,因为你已经理解了程序的基本逻辑。


二、C 和 Python 的核心区别

1. C 语言需要编译,Python 通常直接运行

C 语言执行流程:

源代码 .c
   ↓
编译
   ↓
生成可执行文件
   ↓
运行程序

例如:

gcc main.c -o main
./main

Python 执行流程:

源代码 .py
   ↓
解释器执行

例如:

python main.py

Python 不需要像 C 那样手动编译生成 exe 文件,因此更适合快速测试和快速开发。


2. C 语言需要声明类型,Python 不需要显式声明类型

C 语言:

int age = 18;
float price = 9.9;
char name[] = "Tom";

Python:

age = 18
price = 9.9
name = "Tom"

Python 是动态类型语言,变量不需要提前声明类型。

但是这不代表 Python 没有类型,而是解释器会根据赋值自动判断类型。

x = 10
print(type(x))

x = "hello"
print(type(x))

输出:

<class 'int'>
<class 'str'>

3. C 语言用大括号表示代码块,Python 用缩进表示代码块

C 语言:

if (age >= 18)
{
    printf("成年人\n");
}

Python:

if age >= 18:
    print("成年人")

Python 非常重视缩进。

错误写法:

if age >= 18:
print("成年人")

正确写法:

if age >= 18:
    print("成年人")

建议统一使用 4 个空格缩进。


4. C 语言每行通常要加分号,Python 不需要

C 语言:

int a = 10;
int b = 20;
int c = a + b;

Python:

a = 10
b = 20
c = a + b

Python 不需要在每行末尾加分号。


5. C 语言手动管理内存,Python 自动管理内存

C 语言中你可能会用:

malloc()
free()

Python 通常不需要手动申请和释放内存。

例如:

nums = [1, 2, 3, 4, 5]

Python 会自动管理对象的创建和释放。

但是你依然要理解:

变量名不是数据本身,而是对象的引用

这一点和 C 语言中的指针思想有一点相似。


三、C 和 Python 基础语法对照表

C 语言 Python 说明
int a = 10; a = 10 Python 不需要声明类型
printf() print() 输出
scanf() input() 输入
if (...) {} if 条件: 条件判断
for(i=0;i<n;i++) for i in range(n) 循环
while (...) {} while 条件: while 循环
数组 列表 list Python 列表更灵活
字符数组 字符串 str Python 字符串更方便
结构体 struct 类 class / 字典 dict 根据场景选择
指针 引用 Python 没有 C 那种裸指针
#include import 导入库
.c / .h .py 文件类型
编译运行 解释执行 Python 更适合快速开发

四、输入和输出

1. C 语言输出

#include <stdio.h>

int main()
{
    printf("Hello C\n");
    return 0;
}

2. Python 输出

print("Hello Python")

Python 的输出非常简单。


3. C 语言输入

int age;
scanf("%d", &age);
printf("age = %d\n", age);

4. Python 输入

age = input("请输入年龄:")
print(age)

注意:input() 得到的默认是字符串。

如果需要整数,要手动转换:

age = int(input("请输入年龄:"))
print(age + 1)

如果需要小数:

price = float(input("请输入价格:"))
print(price)

五、变量和数据类型

1. C 语言常见类型

int a = 10;
float b = 3.14;
double c = 3.1415926;
char d = 'A';
char str[] = "hello";

2. Python 常见类型

a = 10              # int 整数
b = 3.14            # float 小数
c = "hello"         # str 字符串
d = True            # bool 布尔值
e = [1, 2, 3]       # list 列表
f = (1, 2, 3)       # tuple 元组
g = {"name": "Tom"} # dict 字典
h = {1, 2, 3}       # set 集合

查看变量类型:

x = 100
print(type(x))

六、条件判断

1. C 语言写法

if (score >= 90)
{
    printf("优秀\n");
}
else if (score >= 60)
{
    printf("及格\n");
}
else
{
    printf("不及格\n");
}

2. Python 写法

score = 85

if score >= 90:
    print("优秀")
elif score >= 60:
    print("及格")
else:
    print("不及格")

注意:

C 语言:else if
Python:elif

七、循环结构

1. while 循环

C 语言:

int i = 0;

while (i < 5)
{
    printf("%d\n", i);
    i++;
}

Python:

i = 0

while i < 5:
    print(i)
    i += 1

2. for 循环

C 语言:

for (int i = 0; i < 5; i++)
{
    printf("%d\n", i);
}

Python:

for i in range(5):
    print(i)

输出:

0
1
2
3
4

range(5) 表示生成 0 到 4。


3. 指定起点和终点

for i in range(1, 6):
    print(i)

输出:

1
2
3
4
5

4. 指定步长

for i in range(0, 10, 2):
    print(i)

输出:

0
2
4
6
8

5. break 和 continue

C 语言和 Python 都有 breakcontinue

Python 示例:

for i in range(10):
    if i == 5:
        break
    print(i)
for i in range(10):
    if i == 5:
        continue
    print(i)

八、函数

1. C 语言函数

int add(int a, int b)
{
    return a + b;
}

int main()
{
    int result = add(10, 20);
    printf("%d\n", result);
    return 0;
}

2. Python 函数

def add(a, b):
    return a + b

result = add(10, 20)
print(result)

Python 使用 def 定义函数。

格式:

def 函数名(参数1, 参数2):
    函数体
    return 返回值

3. Python 函数可以返回多个值

C 语言中如果想返回多个值,通常需要使用指针或结构体。

Python 可以直接返回多个值:

def get_info():
    name = "Tom"
    age = 18
    return name, age

name, age = get_info()

print(name)
print(age)

4. 默认参数

Python 支持默认参数:

def say_hello(name="同学"):
    print("你好," + name)

say_hello()
say_hello("小明")

输出:

你好,同学
你好,小明

九、数组和列表

1. C 语言数组

int nums[5] = {1, 2, 3, 4, 5};

printf("%d\n", nums[0]);

C 语言数组长度通常固定,操作也比较底层。


2. Python 列表 list

nums = [1, 2, 3, 4, 5]

print(nums[0])
print(nums[1])

Python 列表可以存储不同类型的数据:

data = [1, "hello", 3.14, True]
print(data)

3. 添加元素

nums = [1, 2, 3]

nums.append(4)

print(nums)

输出:

[1, 2, 3, 4]

4. 删除元素

nums = [1, 2, 3, 4]

nums.remove(3)

print(nums)

输出:

[1, 2, 4]

5. 按下标删除

nums = [10, 20, 30, 40]

del nums[1]

print(nums)

输出:

[10, 30, 40]

6. 遍历列表

nums = [10, 20, 30, 40]

for num in nums:
    print(num)

如果需要下标:

nums = [10, 20, 30, 40]

for i in range(len(nums)):
    print(i, nums[i])

更推荐使用:

nums = [10, 20, 30, 40]

for index, value in enumerate(nums):
    print(index, value)

十、字符串

1. C 语言字符串

C 语言中字符串本质上是字符数组:

char str[] = "hello";

操作字符串通常需要:

strlen()
strcpy()
strcmp()
strcat()

2. Python 字符串

Python 字符串非常方便:

name = "Python"

print(name)
print(len(name))
print(name[0])

3. 字符串拼接

first = "Hello"
second = "Python"

result = first + " " + second

print(result)

4. 格式化字符串

推荐使用 f-string:

name = "Tom"
age = 18

print(f"我叫{name},今年{age}岁")

类似 C 语言:

printf("我叫%s,今年%d岁", name, age);

5. 常用字符串方法

text = " hello python "

print(text.strip())       # 去掉两边空格
print(text.upper())       # 转大写
print(text.lower())       # 转小写
print(text.replace("python", "C"))
print(text.split())

十一、字典 dict:类似更强大的结构体和键值表

C 语言中如果要描述一个学生,可能会用结构体:

struct Student
{
    char name[20];
    int age;
    float score;
};

Python 可以用字典:

student = {
    "name": "Tom",
    "age": 18,
    "score": 95.5
}

print(student["name"])
print(student["age"])
print(student["score"])

1. 修改字典

student["age"] = 19
student["score"] = 98

print(student)

2. 添加字段

student["school"] = "ABC大学"

print(student)

3. 删除字段

del student["score"]

print(student)

4. 遍历字典

student = {
    "name": "Tom",
    "age": 18,
    "score": 95.5
}

for key, value in student.items():
    print(key, value)

十二、元组 tuple

元组和列表类似,但是元组创建后不能修改。

point = (10, 20)

print(point[0])
print(point[1])

适合表示固定数据,例如坐标:

position = (100, 200)

列表和元组区别:

类型 是否可修改 写法
list 列表 可以修改 [1, 2, 3]
tuple 元组 不可修改 (1, 2, 3)

十三、集合 set

集合的特点是:

元素不重复
适合去重
适合交集、并集、差集操作

示例:

nums = {1, 2, 3, 3, 4, 4, 5}

print(nums)

输出:

{1, 2, 3, 4, 5}

列表去重:

nums = [1, 2, 2, 3, 3, 4]

new_nums = list(set(nums))

print(new_nums)

十四、指针思维如何迁移到 Python?

C 语言中你会接触指针:

int a = 10;
int *p = &a;
printf("%d\n", *p);

Python 没有 C 语言那种裸指针,不能直接操作内存地址。

但是 Python 中变量保存的是对象的引用。

例如:

a = [1, 2, 3]
b = a

b.append(4)

print(a)
print(b)

输出:

[1, 2, 3, 4]
[1, 2, 3, 4]

原因是:

a 和 b 指向同一个列表对象

如果想复制一个新列表:

a = [1, 2, 3]
b = a.copy()

b.append(4)

print(a)
print(b)

输出:

[1, 2, 3]
[1, 2, 3, 4]

对于 C 程序员来说,可以这样理解:

Python 没有指针语法,但变量本质上是对象引用
可变对象要注意共享引用问题

十五、可变对象和不可变对象

Python 中常见不可变对象:

int
float
str
tuple
bool

常见可变对象:

list
dict
set

示例:

def change_list(data):
    data.append(100)

nums = [1, 2, 3]
change_list(nums)

print(nums)

输出:

[1, 2, 3, 100]

因为列表是可变对象,函数内部修改会影响原列表。

再看整数:

def change_num(x):
    x = x + 1

a = 10
change_num(a)

print(a)

输出:

10

因为整数是不可变对象,函数内部重新赋值不会改变外部变量。


十六、类和对象

C 语言没有原生的面向对象语法,一般用结构体加函数模拟。

C 语言结构体:

struct Student
{
    char name[20];
    int age;
};

Python 可以直接定义类:

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show_info(self):
        print(f"姓名:{self.name},年龄:{self.age}")

stu = Student("Tom", 18)
stu.show_info()

1. __init__ 是什么?

__init__ 是构造方法,对象创建时自动调用。

def __init__(self, name, age):
    self.name = name
    self.age = age

相当于初始化对象数据。


2. self 是什么?

self 表示当前对象本身。

类似 C 语言中你写结构体函数时传入结构体指针:

void show_info(struct Student *stu)
{
    printf("%s", stu->name);
}

Python 中:

def show_info(self):
    print(self.name)

可以粗略理解:

self ≈ 当前对象的指针

十七、模块和导入

C 语言中使用头文件:

#include <stdio.h>
#include "my_func.h"

Python 中使用 import

import math

print(math.sqrt(16))

也可以这样导入:

from math import sqrt

print(sqrt(16))

1. 自定义模块

创建文件 tools.py

def add(a, b):
    return a + b

创建文件 main.py

import tools

result = tools.add(10, 20)

print(result)

也可以:

from tools import add

print(add(10, 20))

十八、文件操作

1. C 语言文件操作

FILE *fp = fopen("test.txt", "w");

fprintf(fp, "hello");

fclose(fp);

2. Python 写文件

with open("test.txt", "w", encoding="utf-8") as f:
    f.write("hello python")

3. Python 读文件

with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()

print(content)

4. 按行读取

with open("test.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

with open() 的好处是文件使用完会自动关闭。


十九、异常处理

C 语言中通常用返回值判断错误:

FILE *fp = fopen("test.txt", "r");

if (fp == NULL)
{
    printf("文件打开失败\n");
}

Python 使用异常处理:

try:
    with open("test.txt", "r", encoding="utf-8") as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print("文件不存在")
except Exception as e:
    print("发生错误:", e)

基本格式:

try:
    可能出错的代码
except 异常类型:
    出错后的处理

二十、列表推导式

Python 有一种非常方便的写法,叫列表推导式。

普通写法:

nums = []

for i in range(1, 6):
    nums.append(i * i)

print(nums)

列表推导式:

nums = [i * i for i in range(1, 6)]

print(nums)

输出:

[1, 4, 9, 16, 25]

带条件:

nums = [i for i in range(10) if i % 2 == 0]

print(nums)

输出:

[0, 2, 4, 6, 8]

二十一、Python 常用内置函数

函数 作用
print() 输出
input() 输入
type() 查看类型
len() 获取长度
int() 转整数
float() 转小数
str() 转字符串
list() 转列表
dict() 创建字典
set() 创建集合
range() 生成数字序列
sum() 求和
max() 最大值
min() 最小值
sorted() 排序
enumerate() 同时获取下标和值

示例:

nums = [3, 1, 5, 2, 4]

print(len(nums))
print(sum(nums))
print(max(nums))
print(min(nums))
print(sorted(nums))

二十二、包管理工具 pip

Python 的生态非常丰富,很多功能可以直接安装第三方库。

安装库:

pip install requests

使用库:

import requests

response = requests.get("https://www.example.com")

print(response.text)

常见第三方库:

库名 作用
requests 网络请求
pandas 数据处理
numpy 数值计算
matplotlib 数据可视化
flask Web 后端
django Web 后端
opencv-python 图像处理
beautifulsoup4 网页解析
selenium 自动化测试 / 动态网页
pyserial 串口通信

二十三、虚拟环境

Python 项目建议使用虚拟环境,避免不同项目依赖冲突。

创建虚拟环境:

python -m venv venv

Windows 激活:

venv\Scripts\activate

macOS / Linux 激活:

source venv/bin/activate

退出虚拟环境:

deactivate

安装依赖:

pip install requests

导出依赖:

pip freeze > requirements.txt

安装依赖文件:

pip install -r requirements.txt

二十四、C 程序员最容易踩的 Python 坑

1. 忘记缩进

错误:

if True:
print("hello")

正确:

if True:
    print("hello")

2. 把 === 搞混

赋值:

a = 10

判断相等:

if a == 10:
    print("a 等于 10")

3. input 得到的是字符串

错误:

age = input("请输入年龄:")

print(age + 1)

正确:

age = int(input("请输入年龄:"))

print(age + 1)

4. 列表下标越界

nums = [1, 2, 3]

print(nums[3])

错误原因:

nums 的下标只有 0、1、2

5. 可变对象共享引用

a = [1, 2, 3]
b = a

b.append(4)

print(a)

输出:

[1, 2, 3, 4]

如果想复制:

b = a.copy()

6. 不要用 C 的思维强行写 Python

C 风格:

nums = [1, 2, 3, 4, 5]

for i in range(len(nums)):
    print(nums[i])

Python 更推荐:

nums = [1, 2, 3, 4, 5]

for num in nums:
    print(num)

如果需要下标:

for index, value in enumerate(nums):
    print(index, value)

二十五、从 C 到 Python 的学习路线

阶段一:掌握 Python 基础语法

需要学习:

变量
输入输出
条件判断
循环
函数
列表
字符串
字典
元组
集合
文件操作
异常处理

目标:

能用 Python 写简单控制台程序

阶段二:掌握 Python 常用数据结构

重点学习:

list
dict
set
tuple
str

目标:

能熟练处理数据、文本、列表、表格型内容

阶段三:掌握模块和包管理

重点学习:

import
pip
venv
requirements.txt

目标:

会安装第三方库
会管理项目依赖
会拆分多个 Python 文件

阶段四:做自动化脚本

适合练习:

批量重命名文件
统计文件夹大小
读取 Excel
整理 txt 文件
批量处理图片
批量下载网页内容

目标:

能用 Python 解决日常重复性工作

阶段五:根据方向选择进阶路线

方向 推荐学习内容
数据分析 numpy、pandas、matplotlib
爬虫 requests、BeautifulSoup、selenium
后端开发 Flask、Django、FastAPI
人工智能 numpy、pytorch、scikit-learn
图像处理 OpenCV、Pillow
自动化测试 pytest、selenium
嵌入式上位机 pyserial、socket、tkinter、PyQt
工具开发 argparse、os、pathlib、logging

二十六、适合 C 程序员练习的 Python 小项目

项目 1:成绩管理系统

功能:

添加学生
删除学生
修改成绩
查询成绩
计算平均分
按照成绩排序
保存到文件

可以练习:

列表
字典
函数
文件操作
排序

项目 2:批量文件重命名工具

功能:

读取某个文件夹
批量修改文件名
添加前缀
添加编号
修改后缀

可以练习:

os
pathlib
字符串处理
文件操作

项目 3:串口数据读取工具

功能:

打开串口
读取 MCU 上传的数据
解析数据
保存到文件

可以练习:

pyserial
字符串解析
文件保存
异常处理

项目 4:简单爬虫

功能:

请求网页
提取标题
保存内容

可以练习:

requests
BeautifulSoup
文件操作

项目 5:数据可视化

功能:

读取 CSV 文件
统计数据
绘制折线图或柱状图

可以练习:

pandas
matplotlib
数据处理
图表绘制

二十七、C 和 Python 的综合对比

对比项 C 语言 Python
执行方式 编译执行 解释执行
类型系统 静态类型 动态类型
语法风格 大括号和分号 缩进
内存管理 手动管理 自动管理
运行速度 相对较慢
开发效率 较低 很高
底层能力 较弱
生态方向 嵌入式、系统、驱动 数据、AI、自动化、Web
学习难点 指针、内存、编译 库生态、对象引用、项目管理
适合场景 性能敏感、硬件底层 快速开发、工具、数据处理

二十八、一个完整 Python 小案例:学生成绩管理

下面这个案例适合刚从 C 语言过渡到 Python 的同学练习。

students = []

def add_student():
    name = input("请输入学生姓名:")
    score = float(input("请输入学生成绩:"))

    student = {
        "name": name,
        "score": score
    }

    students.append(student)
    print("添加成功")

def show_students():
    if len(students) == 0:
        print("暂无学生信息")
        return

    for index, student in enumerate(students):
        print(f"{index + 1}. 姓名:{student['name']},成绩:{student['score']}")

def average_score():
    if len(students) == 0:
        print("暂无学生信息")
        return

    total = 0

    for student in students:
        total += student["score"]

    avg = total / len(students)
    print(f"平均分:{avg}")

def main():
    while True:
        print("====== 学生成绩管理系统 ======")
        print("1. 添加学生")
        print("2. 查看学生")
        print("3. 计算平均分")
        print("0. 退出系统")

        choice = input("请输入操作编号:")

        if choice == "1":
            add_student()
        elif choice == "2":
            show_students()
        elif choice == "3":
            average_score()
        elif choice == "0":
            print("系统退出")
            break
        else:
            print("输入错误,请重新输入")

main()

这个案例涉及:

列表
字典
函数
循环
条件判断
输入输出
字符串格式化

如果你能看懂并自己修改这个案例,就说明你已经完成了从 C 基础到 Python 基础的第一步。


二十九、最终理解

从 C 语言过渡到 Python,最重要的是改变三个思维。

1. 从“关注内存细节”转向“关注数据处理”

C 语言更关注:

内存
地址
指针
数组边界
数据类型
编译链接

Python 更关注:

数据结构
业务逻辑
文件处理
第三方库
开发效率

2. 从“自己造轮子”转向“善用库”

C 语言中很多功能需要自己写。

Python 中很多功能可以直接使用库。

例如:

网络请求:requests
数据处理:pandas
图像处理:opencv-python
串口通信:pyserial
图表绘制:matplotlib

Python 的优势之一就是生态丰富。


3. 从“写给机器看”转向“写给人看”

Python 非常强调代码可读性。

好的 Python 代码应该:

变量名清晰
函数功能单一
缩进规范
逻辑直观
少写重复代码
多使用内置函数和标准库

三十、结语

如果你已经会 C 语言,学习 Python 并不难。

你只需要记住:

C 语言让你理解计算机底层
Python 让你快速解决实际问题

二者不是替代关系,而是互补关系。

可以这样理解:

C 语言适合打基础、做底层、追求性能
Python 适合做工具、做数据、做自动化、快速开发

当你既懂 C,又会 Python,你就可以同时具备:

底层理解能力
工程实现能力
快速开发能力
工具自动化能力
数据处理能力

这对于嵌入式开发、机器人开发、AI 应用、自动化测试、后端开发都非常有帮助。

从 C 到 Python,最推荐的路线是:

先掌握基础语法
再熟悉列表、字典、字符串
然后学习文件操作和异常处理
接着学习 pip 和虚拟环境
最后通过小项目不断练习

只要你能用 Python 独立完成几个小工具,比如文件批处理、串口数据读取、成绩管理系统、简单爬虫,就说明你已经成功从 C 语言过渡到了 Python。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐