【C语言转AI系列】阶段1-Python生态适应-第1-2周-Python语法差异
·
| 周次 | 文件 | 主题 |
|---|---|---|
| 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语言工具(如日志分析器)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)