python基本语法总结

📅 2026/8/26 14:01:53
python基本语法总结
参考Python3 基础语法 | 菜鸟教程 (runoob.com)Python 语言与 PerlC 和 Java 等语言有许多相似之处。但是也存在一些差异。在本章中我们将来学习 Python 的基础语法让你快速学会 Python 编程。编码默认情况下Python3 源码文件以UTF-8编码所有字符串都是 unicode 字符串。当然你也可以为源码文件指定不同的编码比如# -*- coding: cp-1252 -*-上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码对应适合语言为保加利亚语、白俄罗斯语、马其顿语、俄语、塞尔维亚语。一般保持默认即可。Python 标识符在 Python 里标识符由字母、数字、下划线组成。在 Python 中所有标识符可以包括英文、数字以及下划线(_)但不能以数字开头。Python 中的标识符是区分大小写的。有些以下划线开头的标识符是有特殊意义的比如以单下划线开头_foo的代表不能直接访问的类属性再比如以双下划线开头的__foo代表类的私有成员以双下划线开头和结尾的__foo__代表 Python 里特殊方法专用的标识如__init__()代表类的构造函数……这些后续再对应学习这里了解有这么回事即可。python保留字保留字即关键字我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块可以输出当前版本的所有关键字 import keyword keyword.kwlist [False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield] 每种语言都有的很好理解就不多说了。Python注释单行注释python中单行注释采用#开头。实例#!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名test.py # 第一个注释 print (Hello, Python!) # 第二个注释输出结果Hello, Python!注释可以在语句或表达式行末name Runoob # 这里的内容是一个注释多行注释python 中多行注释使用三个单引号或三个双引号。实例#!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名test.py 这是多行注释使用单引号。 这是多行注释使用单引号。 这是多行注释使用单引号。 这是多行注释使用双引号。 这是多行注释使用双引号。 这是多行注释使用双引号。 多行注释其实就是一段字符串只要我们不使用它就可以当做一段注释。注意多行注释是由三个单引号 或三个双引号 来定义的而且这种注释方式并不能嵌套使用。当你开始一个多行注释块时Python 会一直将后续的行都当作注释直到遇到另一组三个单引号或三个双引号。嵌套多行注释会导致语法错误。例如下面的示例是不合法的实例 这是外部的多行注释 可以包含一些描述性的内容 这是尝试嵌套的多行注释 会导致语法错误 在这个例子中内部的三个单引号并没有被正确识别为多行注释的结束而是被解释为普通的字符串。这将导致代码结构不正确最终可能导致语法错误。如果你需要在注释中包含嵌套结构推荐使用单行注释以#开头而不是多行注释。单行注释可以嵌套在多行注释中而且不会引起语法错误。例如实例 这是外部的多行注释 可以包含一些描述性的内容 # 这是内部的单行注释 # 可以嵌套在多行注释中 这样的结构是合法的并且通常能够满足文档化和注释的需求。注意注意三引号...本质上是普通字符串不是注释符号这不是注释这是一个字符串为什么会产生误解因为三引号看起来像多行注释而且有时候被当作注释使用虽然不报错所以很多人误以为它是注释。# 很多人这样写以为在注释 这里写了很多说明 看起来像是注释 但其实是个字符串 Python解释器看到这段代码时会创建一个字符串对象然后立即丢弃因为没有赋值给任何变量。因为不报错大家就误以为这是多行注释。Python中真正的注释只有## 这是真正的注释 ✅ # 单行注释用 # # 多行注释也用 #每行都加 def start(): # 这是函数内的注释 # 可以写多行 # 每行都用 # passPython没有原生的多行注释语法只能用#逐行注释。三引号 vs#注释本质区别对比项三引号...#注释本质字符串字面量真正的注释解释器处理创建字符串对象可能被优化掉完全忽略不生成任何代码作用存储文本数据 / 文档字符串给程序员看的说明是否可访问可以赋值后能用不可访问是否占用内存是除非被优化否所以因为三引号不是真正的注释属于字符串字面量所以三引号注释也要遵守python的语法缩进规则比如你看报错了缩进不对。多行注释三引号的正确使用场景一、唯一正式用途文档字符串Docstring三引号在Python中唯一的官方用途就是文档字符串用于为模块、类、函数、方法编写说明文档。# ✅ 正确用法 1函数文档 def calculate_discount(price, rate): 计算折扣后的价格 参数: price (float): 原价 rate (float): 折扣率0-1之间 返回: float: 折扣后的价格 示例: calculate_discount(100, 0.2) 80.0 return price * (1 - rate) # ✅ 正确用法 2类文档 class UserProfile: 用户个人信息管理类 属性: username (str): 用户名 email (str): 邮箱地址 pass # ✅ 正确用法 3模块文档文件开头 数据清洗模块 提供数据去重、格式转换、缺失值处理等功能。 依赖: pandas, numpy 二、常见的错误用法❌ 不推荐❌ 用三引号临时注释掉大段代码# ❌ 不推荐假装是注释其实是字符串 def process_data(): data load_data() data clean_data(data) data transform_data(data) return result虽然不报错但这不是注释它会被解释器当作字符串处理虽然被丢弃了会误导阅读者且IDE不会把它当注释高亮。三、正确使用多行注释的方式方式1用#写多行注释最推荐# # 用户认证模块 # 功能: 处理登录、注册、token验证 # 作者: 张三 # 更新日期: 2026-08-25 # def login(): # 步骤1: 验证用户名和密码 # 步骤2: 生成JWT token # 步骤3: 记录登录日志 pass方式2用if False:块临时禁用代码def start(): # 正式运行时的代码 if False: # 临时禁用下面的调试代码 log_file_path setup_log(LOG_DIR, PHONE_SN) validate_config(CONFIG_PATH) initialize_database() # 继续执行其他逻辑 run_app()这种方法在临时调试时很好用因为整个块缩进统一IDE可以一键折叠。四、实战对比表格场景用什么示例函数/类说明三引号 docstringdef foo(): 说明模块开头说明三引号 docstring文件第一行写模块说明代码解释1-2行#单行注释# 判断用户是否登录代码解释多行#多行注释每行都用#临时禁用几行代码#注释选中后按Ctrl/临时禁用大段代码if False:块缩进包起来方便折叠写待办事项# TODO:# TODO: 优化性能写注意事项# NOTE:# NOTE: 这里需要加锁五、实际项目中的注释模板#!/usr/bin/env python3 # -*- coding: utf-8 -*- 模块名称: user_service.py 功能描述: 提供用户注册、登录、权限管理功能 作者: 张三 创建日期: 2026-08-25 修改记录: 2026-08-25 张三 初始版本 2026-08-26 李四 添加了密码加密功能 import hashlib import logging # 配置日志 logger logging.getLogger(__name__) class UserService: 用户服务类处理所有用户相关业务逻辑 def __init__(self, db_connection): 初始化用户服务 参数: db_connection: 数据库连接对象 self.db db_connection def register(self, username, password): 注册新用户 参数: username (str): 用户名3-20个字符 password (str): 密码至少8位 返回: bool: 注册成功返回True失败返回False 异常: ValueError: 用户名已存在或格式不合法 # TODO: 添加邮箱验证功能 # FIXME: 密码需要加盐加密当前不安全 # 检查用户名是否已存在 if self._user_exists(username): raise ValueError(用户名已存在) # 加密密码临时方案需要改进 hashed hashlib.md5(password.encode()).hexdigest() # 保存到数据库 return self.db.save_user(username, hashed) def _user_exists(self, username): 检查用户名是否已存在私有方法 # 实现略 pass总结一句话多行三引号...只用在文档字符串docstring中给函数/类/模块写说明书其他所有需要注释的地方都用#。如果你想临时注释掉大段代码用IDE的批量注释功能Ctrl/或Cmd/加#或者用if False:块包裹。代码块缩进学习 Python 与其他语言最大的区别就是Python 的代码块不使用大括号{}来控制类函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。缩进的空白数量是可变的但是所有代码块语句必须包含相同的缩进空白数量这个必须严格执行。以下实例缩进为四个空格:if True: print (True) else: print (False)以下代码将会执行错误#!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名test.py if True: print (Answer) print (True) else: print (Answer) # 没有严格缩进在执行时会报错 print (False)执行以上代码会出现如下错误提醒File test.py, line 11 print (False) ^ IndentationError: unindent does not match any outer indentation levelIndentationError: unindent does not match any outer indentation level错误表明你使用的缩进方式不一致有的是 tab 键缩进有的是空格缩进改为一致即可。如果是IndentationError: unexpected indent错误, 则 python 编译器是在告诉你Hi老兄你的文件里格式不对了可能是 tab 和空格没对齐的问题所以 python 对格式要求非常严格。因此在 Python 的代码块中必须使用相同数目的行首缩进空格数。建议你在每个缩进层次使用单个制表符或两个空格或四个空格, 切记不能混用。注意只在该缩进的时候缩进如果在不该缩进的地方强行缩进会报错的比如上来第一行就缩进会报错的比如只有需要缩进的地方才需要缩进并且保持同一层级的缩进一致多行语句Python语句中一般以新行作为语句的结束符。而不是分号;。但是我们可以使用斜杠 \将一行的语句分为多行显示如下所示total item_one \ item_two \ item_three语句中包含 [], {} 或 () 括号就不需要使用多行连接符。如下实例days [Monday, Tuesday, Wednesday, Thursday, Friday]更多待补充。Python 引号Python 可以使用引号()、双引号()、三引号(或) 来表示字符串引号的开始与结束必须是相同类型的。其中三引号可以由多行组成编写多行文本的快捷语法常用于文档字符串在文件的特定地点被当做注释。word word sentence 这是一个句子。 paragraph 这是一个段落。 包含了多个语句更多待补充。Python空行函数之间或类的方法之间用空行分隔表示一段新的代码的开始。类和函数入口之间也用一行空行分隔以突出函数入口的开始。空行与代码缩进不同空行并不是Python语法的一部分。书写时不插入空行Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码便于日后代码的维护或重构。等待用户输入下面的程序执行后就会等待用户输入按回车键后就会退出#!/usr/bin/python # -*- coding: UTF-8 -*- raw_input(按下 enter 键退出其他任意键显示...\n)以上代码中 \n实现换行。同一行显示多条语句Python可以在同一行中使用多条语句语句之间使用分号(;)分割以下是一个简单的实例#!/usr/bin/python import sys; x runoob; sys.stdout.write(x \n)执行以上代码输出结果为$ python test.py runoob更多待补充。多个语句构成代码组缩进相同的一组语句构成一个代码块我们称之代码组。像if、while、def和class这样的复合语句首行以关键字开始以冒号( : )结束该行之后的一行或多行代码构成代码组。我们将首行及后面的代码组称为一个子句(clause)。如下实例if expression : suite elif expression : suite else : suite更多待补充。print 输出print默认输出是换行的如果要实现不换行需要在变量末尾加上 end实例(Python 3.0)#!/usr/bin/python3 xa yb # 换行输出 print( x ) print( y ) print(---------) # 不换行输出 print( x, end ) print( y, end ) print()以上实例执行结果为a b --------- a b命令行参数很多程序可以执行一些操作来查看一些基本信息Python 可以使用-h参数查看各参数帮助信息我们在使用脚本形式执行 Python 时可以接收命令行输入的参数具体使用可以参照Python 命令行参数。Python 运算符具体参考Python3 运算符 | 菜鸟教程 (runoob.com)python大部分运算符和其他语言一样个别不同如下/就是直接的除法得到是什么结果就是什么结果不像c语言里一样会取整python中取整除是用//和c语言里的/效果一样。另外注意python里没有自增和自减的运算符。首先要知道的是Python 中是没有 和 -- 的。那么要实现自增和自减的话可以使用如下操作a a 1或a 1原因分析我们知道 python中的数字类型是不可变数据。也就是数字类型数据在 内存 中是不会发生改变当变量值发生改变时会新申请一块内存赋值为新值然后将变量指向新的内存地址。错误和异常处理参考Python3 错误和异常 | 菜鸟教程 (runoob.com)Python 有两种错误很容易辨认语法错误和异常。语法错误Python 的语法错误或者称之为解析错是初学者经常碰到的如下实例 while True print(Hello world) File stdin, line 1, in ? while True print(Hello world) ^ SyntaxError: invalid syntax这个例子中函数 print() 被检查到有错误是它前面缺少了一个冒号 : 。语法分析器指出了出错的一行并且在最先找到的错误的位置标记了一个小小的箭头。异常即便 Python 程序的语法是正确的在运行它的时候也有可能发生错误。运行期检测到的错误被称为异常。大多数的异常都不会被程序处理都以错误信息的形式展现出来: 10 * (1/0) # 0 不能作为除数触发异常 Traceback (most recent call last): File stdin, line 1, in ? ZeroDivisionError: division by zero 4 spam*3 # spam 未定义触发异常 Traceback (most recent call last): File stdin, line 1, in ? NameError: name spam is not defined 2 2 # int 不能与 str 相加触发异常 Traceback (most recent call last): File stdin, line 1, in module TypeError: can only concatenate str (not int) to str异常以不同的类型出现这些类型都作为信息的一部分打印出来: 例子中的类型有 ZeroDivisionErrorNameError 和 TypeError。错误信息的前面部分显示了异常发生的上下文并以调用栈的形式显示具体信息。异常处理try/except异常捕捉可以使用 try/except 语句try/except...elsetry/except 语句还有一个可选的else子句如果使用这个子句那么必须放在所有的 except 子句之后。else 子句将在 try 子句没有发生任何异常的时候执行。try-finally 语句try-finally 语句无论是否发生异常都将执行最后的代码。抛出异常Python 使用 raise 语句抛出一个指定的异常。raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类也就是 Exception 的子类。如果你只想知道这是否抛出了一个异常并不想去处理它那么一个简单的 raise 语句就可以再次把它抛出。更多直接参考菜鸟教程。PEP 8PEP 8Python Enhancement Proposal 8是 Python 社区的官方代码风格指南旨在提高代码的可读性和一致性。参考官方文档https://peps.python.org/pep-0008/它定义了 Python 代码的最佳实践包括缩进、命名规范、注释、空格使用等细节。遵循 PEP 8 能让代码更易被他人理解也有助于团队协作和项目维护。