news 2026/5/16 5:19:35

1.【Python】Python3 基础语法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.【Python】Python3 基础语法

第一步:分析与整理基础语法


1. 编码

  • Python 3 默认 UTF-8 编码,所有字符串为 Unicode。
  • 可指定其他编码(如# -*- coding: cp-1252 -*-),用于特定语言字符集。
# -*- coding: cp-1252 -*- # 允许 Windows-1252 字符集

2. 标识符命名规则

规则说明正确示例错误示例
首字符字母(a-z, A-Z) 或下划线 _age,_total2nd_place
其他字符字母、数字、下划线user_nameuser-name
大小写敏感countCount不同注意区分-
禁止关键字不能使用if,for,classclass_可以class
长度无硬性限制,建议≤20字符--

Unicode 标识符(允许中英文)

姓名="张三"# 合法π=3.14159# 合法

测试标识符合法性函数

defis_valid_identifier(name):try:exec(f"{name}= None")returnTrueexcept:returnFalseprint(is_valid_identifier("2var"))# Falseprint(is_valid_identifier("var2"))# True

3. 保留关键字

  • 使用keyword模块查看:
importkeywordprint(keyword.kwlist)

常见关键字分类表(部分):

类别关键字
逻辑值True,False,None
逻辑运算and,or,not
条件控制if,elif,else
循环for,while,break,continue
异常try,except,finally,raise
函数def,return,lambda
类与对象class,del
模块import,from,as
作用域global,nonlocal
异步async,await
其他assert,in,is,pass,with,yield

4. 注释

  • 单行注释:# 注释内容
  • 多行注释:三个单引号'''...'''或三个双引号"""..."""
#!/usr/bin/python3# 第一个注释print("Hello, Python!")# 第二个注释''' 第三注释 第四注释 '''""" 第五注释 第六注释 """

5. 行与缩进

  • 缩进代替大括号表示代码块,同一代码块必须缩进一致(通常 4 个空格)。
  • 错误示例:缩进不一致 →IndentationError
ifTrue:print("True")else:print("False")# 下面这行缩进错误print("False")# 会导致 IndentationError

6. 多行语句

  • 使用反斜杠\换行:
total=item_one+\ item_two+\ item_three
  • [],{},()中不需要\
total=['item_one','item_two','item_three','item_four','item_five']

7. 数字(Number)类型

类型示例说明
整数 int1,100,-5任意长度
布尔 boolTrue,False本质是 int 子类
浮点数 float1.23,3E-2双精度
复数 complex1+2j,1.1+2.2j实部+虚部

8. 字符串(String)

  • 单引号'与双引号"等价。
  • 三引号'''...'''"""..."""表示多行字符串。
  • 转义符\r前缀表示原始字符串(不转义)。
  • 字符串不可变,支持+(连接)和*(重复)。
  • 索引:从左 0 开始,从右 -1 开始。切片:[start:end:step]
str='123456789'print(str[0:-1])# 12345678print(str[2:5])# 345print(str[1:5:2])# 24print(str*2)# 重复两次print(str+'你好')# 连接# 转义与原始字符串print('hello\nrunoob')# 换行print(r'hello\nrunoob')# 输出 hello\nrunoob

9. 空行

  • 空行不是语法要求,但用于分隔代码块,提高可读性。函数、类之间通常留空行。

10. 等待用户输入

input("\n\n按下 enter 键后退出。")

程序会暂停,直到用户按回车。


11. 同一行多条语句

  • 使用分号;分隔:
importsys;x='runoob';sys.stdout.write(x+'\n')

12. 代码组(suite)

  • 冒号:开始,缩进相同的行组成一个代码组(子句)。例如iffordefclass等。
ifexpression:suiteelifexpression:suiteelse:suite

13.print输出

  • 默认换行,使用end=""不换行:
print("a",end=" ")print("b",end=" ")print()# 输出换行

14.importfrom...import

形式示例说明
导入整个模块import sys使用时需加模块名:sys.argv
导入单个成员from sys import argv直接用argv
导入多个成员from sys import argv, path逗号分隔
导入所有成员from sys import *不推荐(污染命名空间)

15. 命令行参数

  • 使用python -h查看帮助。
  • 脚本中可通过sys.argv获取参数列表。

第二步:费曼学习法教学

学习 Python 基础语法,我该关注什么?

Python 是一门对新手极其友好的语言,它的设计哲学是“简洁、明确、优雅”。你不需要像 C 语言那样操心大括号和分号,但缩进是必须严格遵守的——这是初学最容易出错的地方。

1. 标识符命名(起名字的规矩)
  • 核心原则:只能包含字母、数字、下划线,不能以数字开头。
  • 为什么要这样:Python 解释器解析代码时,遇到数字开头会混淆(比如2a是数字还是变量名?)。
  • 好处:统一的命名规则让代码可读性强。
  • 常见错误my-name(包含短横)、class(关键字)。
  • 工作中的应用:写自动化脚本时,给变量、函数起有意义的名字,比如log_file_pathcalculate_average

💡小技巧:使用is_valid_identifier()函数可以快速测试名字是否合法。

2. 关键字(Python 的“保留词”)
  • iffordef等是 Python 自己用的词,你不能拿来当变量名。
  • 为什么:如果允许重定义,解释器会分不清你是想写循环还是想用变量。
  • 如何记住:不用刻意背,写代码时编辑器会高亮关键字。遇到报错SyntaxError: invalid syntax时,检查是否误用了关键字。
3. 缩进(Python 的灵魂)
  • 其他语言用{},Python 用缩进表示代码块。
  • 好处:强制你写出整洁、结构清晰的代码,团队协作时不会出现括号位置争吵。
  • 学习要点:统一使用4 个空格(不要混用 Tab 和空格,很多编辑器会自动转换)。
  • 工作中:如果你写了一段if,下面必须缩进;否则解释器报IndentationError。这也是 Code Review 中常抓的问题。
4. 字符串常见操作
  • 单引号双引号没区别,但建议统一使用单引号(PEP 8 推荐)。
  • 三引号用于多行字符串或文档注释。
  • r前缀特别有用:在正则表达式或文件路径中避免转义,例如r'C:\new_folder'(否则\n会被解析为换行)。
  • 字符串不可变:str[0] = 'a'会报错,必须创建新字符串。
5.import模块(使用现成的工具)
  • Python 有海量的内置模块和第三方库。import让你直接使用它们,不用重新造轮子。
  • from module import func可以少写模块名前缀,但可能导致命名冲突。大型项目中建议用import module保持清晰。

如何高效学习并应用?

  1. 写代码 + 立刻运行:每学一个知识点,在交互式环境(python或 IDLE)中测试。比如试一下print(r'\n')看输出。
  2. 犯错并解决:故意写出缩进错误、关键字变量名,看报错信息——这能帮你记住规则。
  3. 结合项目:比如写一个简单的学生成绩管理系统,用到变量、条件、循环、函数、输入输出。
  4. 工作中:芯片验证工程师常用 Python 写自动化回归脚本日志分析工具数据格式化处理。基础语法是这一切的根基。

综合示例:学生成绩统计

这个示例综合了变量、列表、循环、条件、print 格式化、input、函数定义等。

# 文件: score_stats.py# 功能: 输入学生成绩,计算平均分并评级defget_grade(score):"""根据分数返回等级"""ifscore>=90:return'A'elifscore>=80:return'B'elifscore>=70:return'C'elifscore>=60:return'D'else:return'F'defmain():scores=[]print("请输入学生成绩(输入 -1 结束):")whileTrue:try:raw=input("成绩: ")ifraw=='-1':breakscore=float(raw)if0<=score<=100:scores.append(score)else:print("成绩应在 0~100 之间")exceptValueError:print("请输入数字")ifnotscores:print("没有输入任何成绩")returnaverage=sum(scores)/len(scores)print(f"\n共{len(scores)}名学生")print(f"平均分:{average:.2f}")print(f"班级整体等级:{get_grade(average)}")print("最高分:",max(scores))print("最低分:",min(scores))if__name__=="__main__":main()

讲解

  • 变量命名:scoresaverage清晰表意。
  • 使用了if-elif-elsewhiletry-except异常处理。
  • def定义函数,文档字符串用三引号。
  • f-string格式化输出(f"{average:.2f}")。
  • 模块化设计:main()函数,if __name__ == "__main__"使得脚本可被导入而不自动执行。

通过这个示例,你不仅复习了基础语法,还学会了一个实用小工具。


第三步:芯片验证工程师视角的 Python 应用示例

作为芯片验证工程师,我经常用 Python 处理仿真日志波形数据回归测试等。下面给出一个真实场景示例:解析仿真器输出的文本报告,提取测试用例名称和结果,生成汇总表格

这个示例将用到:

  • 文件读写(open
  • 字符串方法(split,startswith,strip
  • 列表推导式
  • 字典
  • 格式化输出
# 文件名: parse_simulation_log.py# 功能: 解析仿真日志,提取测试用例通过/失败信息,并生成Markdown报告# 作者: 验证工程师# 日期: 2026-05-15importsysfrompathlibimportPathdefparse_log(log_file_path):""" 解析单个日志文件,返回 (test_name, status, time_ns) status: 'PASS' 或 'FAIL' """test_name=Nonestatus=Nonetime_ns=0try:withopen(log_file_path,'r',encoding='utf-8')asf:forlineinf:line=line.strip()# 假设日志中有形如 "TEST: alu_test" 的行ifline.startswith("TEST:"):test_name=line.split(":")[1].strip()# 假设结果行形如 "RESULT: PASS time: 123456 ns"elifline.startswith("RESULT:"):parts=line.split()iflen(parts)>=3:status=parts[1]# PASS 或 FAIL# 提取时间,格式 "time:123456"time_part=parts[2]iflen(parts)>2else""iftime_part.startswith("time:"):time_ns=int(time_part.split(":")[1])returntest_name,status,time_nsexceptFileNotFoundError:print(f"错误: 文件{log_file_path}不存在",file=sys.stderr)returnNone,None,0defgenerate_report(log_dir):""" 扫描 log_dir 下所有 .log 文件,汇总结果,生成 report.md """log_dir_path=Path(log_dir)ifnotlog_dir_path.is_dir():print(f"错误:{log_dir}不是有效目录",file=sys.stderr)returnresults=[]forlog_fileinlog_dir_path.glob("*.log"):name,status,time_ns=parse_log(str(log_file))ifnameandstatus:results.append({"name":name,"status":status,"time_ns":time_ns})else:print(f"警告:{log_file.name}解析失败")# 统计通过率total=len(results)passed=sum(1forrinresultsifr["status"]=="PASS")failed=total-passed pass_rate=(passed/total*100)iftotal>0else0# 生成 Markdown 报告withopen("report.md","w",encoding="utf-8")asmd:md.write("# 仿真回归报告\n\n")md.write(f"**总测试用例**:{total}\n")md.write(f"**通过**:{passed}**失败**:{failed}\n")md.write(f"**通过率**:{pass_rate:.1f}%\n\n")md.write("| 测试用例 | 状态 | 耗时(ns) |\n")md.write("|----------|------|----------|\n")forrinresults:# 使用表情符号增强可读性status_icon="✅"ifr["status"]=="PASS"else"❌"md.write(f"|{r['name']}|{status_icon}{r['status']}|{r['time_ns']}|\n")print(f"报告已生成: report.md")# 可选:打印到控制台print(f"\n通过率:{pass_rate:.1f}% ({passed}/{total})")if__name__=="__main__":# 用法: python parse_simulation_log.py ./logsiflen(sys.argv)!=2:print("用法: python parse_simulation_log.py <日志目录>")sys.exit(1)log_directory=sys.argv[1]generate_report(log_directory)

示例详解

  1. 为什么要用 Python 做这个?
    仿真输出几十上百个日志文件,人工检查效率低。Python 能快速提取关键信息,生成统一报告,便于跟踪质量。

  2. 知识点对应

    • 命令行参数(sys.argv):脚本接收目录路径。
    • 文件操作(open,with):自动关闭文件,避免资源泄漏。
    • 字符串方法startswith过滤行,split提取字段,strip去除空白。
    • pathlib 模块:现代化路径处理,比os.path更优雅。
    • 列表推导式sum(1 for r in results if r["status"] == "PASS")简洁统计。
    • f-string 格式化:生成 Markdown 表格。
    • 异常处理FileNotFoundError避免脚本崩溃。
  3. 如何扩展

    • 添加正则表达式匹配更复杂的日志格式。
    • 将结果写入 Excel(使用openpyxl库)。
    • 集成邮件发送功能,自动通知失败用例。
  4. 实际工作中的价值

    • 每晚回归测试后,运行此脚本生成报告,团队早上就能看到结果。
    • 通过率趋势分析,定位经常失败的测试模块,推动 RTL 修复。
    • 为 CI/CD 流程提供数据接口。

通过这个示例,你应该能体会到:Python 基础语法不仅仅是应付考试的工具,而是解决实际工程问题的利器。掌握好变量、字符串、文件、条件循环,你已经能写出不少有用的自动化脚本了。继续深入,还可以学习面向对象、正则表达式、多线程等,进一步提升验证效率。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 5:15:11

Protégé工具与OWL本体建模实践指南

1. 本体建模基础与Protg工具概述本体&#xff08;Ontology&#xff09;作为知识工程领域的核心概念&#xff0c;最初源自哲学领域&#xff0c;在计算机科学中被重新定义为"对共享概念体系的明确形式化规范说明"。在语义网架构中&#xff0c;本体位于XML和RDF层之上&a…

作者头像 李华
网站建设 2026/5/16 5:10:04

GIS开发实战(一)--GeoServer发布DEM地形图并实现三维可视化

1. DEM地形图与三维可视化基础 第一次接触DEM地形图三维可视化时&#xff0c;我被那些起伏的山脉和逼真的地形效果震撼到了。DEM&#xff08;Digital Elevation Model&#xff09;数字高程模型&#xff0c;简单说就是用数字方式记录地表高低起伏的数据。就像我们小时候玩的橡皮…

作者头像 李华