周次 文件 主题
1-2 01_C_to_Python_语法对照.py Python语法与C的差异
# -*- coding: utf-8 -*-
"""
C语言工程师转型Python - 语法差异对照学习
目标:帮助有C背景的工程师快速理解Python语法
"""

# =============================================================================
# 1. 变量声明 - Python是动态类型,无需声明类型
# =============================================================================

# C语言: int a = 10; float b = 3.14; char c = 'x';
# Python: 直接赋值,类型自动推断
a = 10          # 整数
b = 3.14        # 浮点数
c = 'x'         # 字符串(Python没有char类型)
d = "hello"     # 字符串
e = True        # 布尔值

# 查看类型
print(f"a的类型: {type(a)}")  # <class 'int'>
print(f"b的类型: {type(b)}")  # <class 'float'>

# =============================================================================
# 2. 数据结构 - Python的强大之处
# =============================================================================

# 2.1 列表(List)- 类似于C的数组,但更强大
# C: int arr[] = {1, 2, 3};
arr = [1, 2, 3, 4, 5]

# 列表可以混合类型(C语言数组做不到)
mixed = [1, "hello", 3.14, True]

# 列表推导式(C语言需要循环实现)
squares = [x**2 for x in range(10)]  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(f"平方列表: {squares}")

# 切片操作(非常强大)
print(f"前3个元素: {arr[:3]}")      # [1, 2, 3]
print(f"后2个元素: {arr[-2:]}")     # [4, 5]
print(f"间隔取值: {arr[::2]}")      # [1, 3, 5]

# 2.2 字典(Dict)- 键值对,类似于C的结构体+哈希表
# C需要定义struct,Python直接创建
person = {
    "name": "张三",
    "age": 30,
    "is_engineer": True,
    "skills": ["C", "Python", "AI"]
}

print(f"姓名: {person['name']}")
print(f"技能: {person['skills']}")

# 2.3 元组(Tuple)- 不可变的列表
# 类似于C的const数组
tuple_data = (1, 2, 3)
# tuple_data[0] = 10  # 错误!元组不可修改

# =============================================================================
# 3. 控制流 - 比C语言更简洁
# =============================================================================

# 3.1 if语句 - 无需括号,使用缩进
# C: if (a > 5) { printf("big\n"); }
if a > 5:
    print("a大于5")
elif a == 5:
    print("a等于5")
else:
    print("a小于5")

# 三元表达式(C: a > 5 ? "big" : "small")
result = "big" if a > 5 else "small"

# 3.2 for循环 - 迭代器思维,不是索引思维
# C: for (int i = 0; i < 5; i++) { printf("%d\n", i); }
# Python更简洁:
for i in range(5):
    print(i)

# 遍历列表
for item in arr:
    print(f"元素: {item}")

# 带索引的遍历(C语言习惯)
for idx, item in enumerate(arr):
    print(f"索引{idx}: {item}")

# 3.3 while循环 - 类似C
# C: while (condition) { ... }
count = 0
while count < 3:
    print(f"计数: {count}")
    count += 1

# =============================================================================
# 4. 函数定义 - 无需声明返回类型和参数类型(动态类型)
# =============================================================================

# C: int add(int a, int b) { return a + b; }
def add(a, b):  # 注意:无类型声明
    """函数文档字符串(docstring)"""
    return a + b

# 函数可以有默认参数(C语言做不到)
def greet(name, greeting="你好"):
    return f"{greeting},{name}!"

print(greet("张三"))          # 你好,张三!
print(greet("李四", "早上好"))  # 早上好,李四!

# 可变参数(*args, **kwargs)
def flexible(*args, **kwargs):
    """接受任意数量的位置参数和关键字参数"""
    print(f"位置参数: {args}")
    print(f"关键字参数: {kwargs}")

flexible(1, [1, 2, 3], 3, name="张三", age=30)

# =============================================================================
# 5. 面向对象 - 比C的struct+函数指针更强大
# =============================================================================

class Engineer:
    """工程师类 - 对比C的结构体+函数"""
    
    # 类属性(类似于C的static变量)
    company = "智谱AI"
    
    def __init__(self, name, years_exp, language):
        """构造函数 - 自动调用"""
        self.name = name
        self.years_exp = years_exp
        self.language = language
        self._private_var = "私有变量"  # 约定:下划线开头表示私有
    
    def introduce(self):
        """方法 - 自动绑定self(类似于C++的this)"""
        return f"我是{self.name},{self.years_exp}年{self.language}开发经验"
    
    @classmethod
    def create_junior(cls, name):
        """类方法 - 替代C的工厂函数"""
        return cls(name, 0, "Python")
    
    @staticmethod
    def is_valid_language(lang):
        """静态方法 - 无需实例"""
        return lang in ["C", "C++", "Python", "Java"]

# 创建对象
engineer = Engineer("张三", 10, "C")
print(engineer.introduce())

# 继承(C语言需要手动实现)
class AIEngineer(Engineer):
    """AI工程师继承自工程师"""
    
    def __init__(self, name, years_exp, language, ai_skills):
        super().__init__(name, years_exp, language)  # 调用父类构造函数
        self.ai_skills = ai_skills
    
    def introduce(self):  # 方法重写(多态)
        base = super().introduce()
        return f"{base},AI技能: {', '.join(self.ai_skills)}"

ai_eng = AIEngineer("李四", 5, "Python", ["LLM", "RAG", "Agent"])
print(ai_eng.introduce())

# =============================================================================
# 6. 异常处理 - 比C的错误码更优雅
# =============================================================================

# C: if (fp == NULL) { perror("fopen"); return -1; }
# Python:
try:
    with open("不存在的文件.txt", "r") as f:  # with语句自动关闭资源
        content = f.read()
except FileNotFoundError as e:
    print(f"文件不存在: {e}")
except Exception as e:
    print(f"其他错误: {e}")
else:
    print("成功读取")
finally:
    print("无论成功与否都执行(清理资源)")

# =============================================================================
# 7. 装饰器 - Python特有的高级特性
# =============================================================================

import time
import functools

def timing_decorator(func):
    """计时装饰器 - 类似于C的宏,但更强大"""
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        elapsed = time.time() - start
        print(f"{func.__name__} 耗时: {elapsed:.4f}秒")
        return result
    return wrapper

@timing_decorator
def slow_function():
    """被装饰的函数"""
    time.sleep(0.1)
    return "Done"

slow_function()

# =============================================================================
# 8. 生成器 - 惰性求值,处理大数据比C更省内存
# =============================================================================

def fibonacci_generator(n):
    """斐波那契生成器 - 每次只产生一个值"""
    a, b = 0, 1
    for _ in range(n):
        yield a  # 暂停并返回值,下次从这里继续
        a, b = b, a + b

# 使用生成器 - 内存友好
for num in fibonacci_generator(10):
    print(num, end=" ")
print()

# 生成器表达式(类似列表推导,但更省内存)
large_data = (x**2 for x in range(1000000))  # 不立即计算,按需生成

# =============================================================================
# 9. 文件操作 - 比C的fopen/fread/fclose简洁太多
# =============================================================================

# 写文件
with open("test.txt", "w", encoding="utf-8") as f:
    f.write("Hello Python\n")
    f.writelines(["Line 2\n", "Line 3\n"])

# 读文件
with open("test.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    print(f"文件内容: {lines}")

# 一行一行读(大文件友好)
with open("test.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(f"行: {line.strip()}")

# 删除测试文件
import os
os.remove("test.txt")

# =============================================================================
# 10. 实用技巧 - C工程师需要知道的最佳实践
# =============================================================================

# 10.1 解包(Unpacking)
coordinates = (10, 20, 30)
x, y, z = coordinates  # 比C的逐个赋值简洁

# 10.2 链式比较
# C: if (a >= 5 && a <= 10)
# Python:
if 5 <= a <= 10:
    print("a在5到10之间")

# 10.3 真值判断
# C: if (ptr != NULL && ptr->value != 0)
# Python:
some_list = [1, 2, 3]
if some_list:  # 非空列表为True
    print("列表不为空")

# 10.4 海象运算符(Python 3.8+)- 赋值表达式
# C: while ((c = getchar()) != EOF) { ... }
# Python:
# while (line := input()) != "quit":
#     print(f"输入: {line}")

# =============================================================================
# 学习检查点
# =============================================================================

print("\n" + "="*60)
print("第1-2周学习检查清单:")
print("="*60)
checklist = [
    "理解动态类型 vs 静态类型",
    "掌握列表推导式和切片操作",
    "熟练使用字典处理结构化数据",
    "理解函数默认参数和可变参数",
    "掌握类的定义、继承和方法重写",
    "理解异常处理机制",
    "会使用with语句管理资源",
    "了解装饰器的基本概念"
]
for i, item in enumerate(checklist, 1):
    print(f"{i}. [ ] {item}")

print("\n实践项目:用Python重写一个你熟悉的C语言工具")
print("建议:日志分析器、配置文件解析器、简单计算器")
python
在这里插入代码片

第1-2周:Python语法差异

核心转变

  • C: 手动内存管理 → Python: 自动垃圾回收
  • C: 静态类型 → Python: 动态类型
  • C: 循环索引 → Python: 迭代器思维

关键概念

  • 列表推导式 [x**2 for x in range(10)]
  • 切片操作 arr[::2]
  • 字典解析 {"key": value}
  • 装饰器 @timing_decorator

实践项目
用Python重写一个你熟悉的C语言工具(如日志分析器)

Logo

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

更多推荐