从 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 = 10Python 不需要声明类型
printf()print()输出
scanf()input()输入
if (...) {}if 条件:条件判断
for(i=0;i<n;i++)for i in range(n)循环
while (...) {}while 条件:while 循环
数组列表 listPython 列表更灵活
字符数组字符串 strPython 字符串更方便
结构体 struct类 class / 字典 dict根据场景选择
指针引用Python 没有 C 那种裸指针
#includeimport导入库
.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 都有 break 和 continue。

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数据可视化
flaskWeb 后端
djangoWeb 后端
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 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐