基础概念
Python 的设计哲学遵循"优雅胜过丑陋"的理念,在语法、概念和使用方式上与 JavaScript 采用了不同的设计思路。
输出函数
在开始学习 Python 语法之前,我们先来了解最常用的输出函数。在 JavaScript 中,我们使用console.log()
等方法来输出信息到控制台:
Python 使用print()
函数作为标准输出方式,它的作用类似于 JavaScript 的console.log()
,但语法更加简洁。print()
是 Python 的内置函数,无需导入任何模块即可使用:
print()
函数会自动在输出末尾添加换行符,如果不想换行,可以使用end
参数:
代码块
在 JavaScript 中,我们使用花括号{}
来定义代码块,缩进只是为了美观,即使不缩进代码也能正常运行。这种设计给了开发者很大的自由度,但也可能导致代码风格不统一。
甚至可以写成这样(虽然很难阅读):
Python 则采用了完全不同的哲学。Python 最独特的特性之一就是使用缩进来表示代码块,完全没有花括号。这个设计强制所有 Python 代码都必须保持良好的缩进格式,从而确保了代码的可读性。
在 Python 中,如果缺少缩进或缩进不一致,解释器会直接报错。这看起来可能有些严格,但长期来看能让代码保持整洁统一:
这种设计背后的理念是"优雅胜过丑陋"(Beautiful is better than ugly),这是 Python 禅宗中的重要原则。强制缩进虽然在初学时可能感觉束缚,但能培养良好的编程习惯。
建议的缩进标准:Python 社区推荐使用 4 个空格进行缩进(PEP 8 标准),这比 JavaScript 常用的 2 个空格稍多一些,但能让代码层级更加清晰。
变量声明
JavaScript 开发者已经习惯了明确的变量声明语法。现代 JavaScript 使用let
和const
来声明变量,这样可以明确表达变量的可变性意图:
JavaScript 的这种设计让我们能清楚地知道哪些变量是可以改变的,哪些是常量。解构赋值更是让变量声明变得非常灵活:
Python 的变量声明哲学完全不同:简洁胜过复杂。在 Python 中,你无需任何声明关键字,直接赋值即可创建变量。这种设计让代码更加简洁直观:
Python 的变量类型也是动态的,可以随时改变,这点和 JavaScript 类似:
Python 同样支持多重赋值和类似解构的操作,语法甚至更加优雅。特别是变量交换,Python 提供了非常直观的写法:
关于常量的约定:虽然 Python 没有const
关键字,但社区约定使用全大写的变量名来表示常量,比如MAX_SIZE = 100
、PI = 3.14159
。这是一个约定俗成的规则,虽然这些"常量"在技术上仍然可以被修改。
函数调用基础
在深入学习 Python 各种数据类型之前,我们需要了解函数调用的基本语法。函数是一段可重复使用的代码块,就像 JavaScript 一样,Python 也大量使用函数。
位置参数
JavaScript 中按位置顺序传递参数:
Python 的位置参数语法几乎相同:
关键字参数
Python 函数还支持关键字参数,即通过参数名指定值的参数:
这种语法让函数调用更加灵活和可读。我们会在专门的函数章节中详细学习如何定义和使用函数,现在只需要理解如何调用已有的函数即可。
命名规范
JavaScript 社区广泛采用驼峰式命名(camelCase)作为变量命名规范,这已经成为前端开发的标准:
Python 社区则偏好蛇形式命名(snake_case),这被写入了 PEP 8 官方编码规范中:
Python 命名规范的细节
需要注意的是,Python 的命名规范并不是完全统一的蛇形式。实际上存在几个不同的层次:
为什么 Python 的内置方法使用驼峰命名?
这是历史原因造成的。Python 早期受到了其他语言的影响,很多内置方法沿用了驼峰命名。随着语言的发展,PEP 8 规范确立了蛇形式命名的偏好,但为了向后兼容,内置方法的命名没有改变。现在的规则是:
- 新的用户代码:遵循 PEP 8,使用蛇形式
- 内置方法:保持现有的驼峰命名以确保兼容性
- 第三方库:大多数遵循 PEP 8,但也有例外
注释
JavaScript 开发者熟悉两种主要的注释方式:单行的//
和多行的/* */
。JSDoc 风格的注释更是前端开发中不可或缺的文档化工具:
Python 的注释系统相对简单,主要使用#
号。对于单行注释,Python 和 JavaScript 的//
作用相同。当需要多行注释时,Python 开发者通常使用多个#
号:
Python 的独特优势:文档字符串(docstring)
Python 有一个非常特殊且强大的功能:文档字符串(docstring)。与 JavaScript 的 JSDoc 不同,Python 的 docstring 不仅仅是注释,它们是语言的内置特性,可以在运行时被程序访问。
docstring 使用三重引号("""
)包围,通常放在模块、类或函数的开头。这些文档字符串不仅能帮助开发者理解代码,还能被 Python 的内置帮助系统和各种文档生成工具直接使用:
这种设计让 Python 的文档化程度通常比 JavaScript 更高。你可以使用help()
函数查看任何对象的文档,这在交互式开发中特别有用。许多 Python 库都有详细的 docstring,这让学习和使用这些库变得更加容易。
语句结束
在 JavaScript 中,分号的使用一直是个有争议的话题。虽然现代 JavaScript 可以依赖自动分号插入(ASI)机制,但很多团队仍然选择显式使用分号来避免潜在的问题:
有些特殊情况下,不使用分号可能会导致意外的行为,需要特别注意。你可以尝试删除这里的分号后运行:
Python 在这方面要简单得多:换行即表示语句结束,完全不需要分号。这种设计符合 Python"简洁胜过复杂"的哲学,让代码更加清晰易读:
当然,如果你真的需要在一行中写多个语句,Python 也支持使用分号分隔,但这通常不被推荐:
对于比较长的语句,Python 提供了反斜杠续行的功能:
不过,Python 更推荐使用括号来进行隐式的行连接,这样更加优雅:
最佳实践建议:Python 强烈鼓励一行写一个语句的风格,这让代码逻辑更清晰,也更容易调试。这种约束看起来可能限制了灵活性,但实际上能让代码质量显著提升。
小结
Python 基础语法概念体现了"优雅胜过丑陋,明了胜过晦涩"的核心理念:
- 缩进定义代码块:使用 4 个空格缩进,强制保持代码整洁,提高可读性
- 变量赋值简洁:无需声明关键字,直接赋值创建变量,支持多重赋值和元组解包
- 函数调用简单:除了 JavaScript 那样的位置参数外,还支持关键字参数,更加灵活可读
- 命名规范统一:采用 snake_case 蛇形式命名,不同类型标识符有不同约定,与内置方法的历史驼峰命名共存
- 注释系统丰富:
#
号单行注释,docstring 文档字符串提供运行时可访问的文档 - 语句结束清晰:换行即表示语句结束,必要时可用反斜杠或括号进行续行
- 文档字符串特色:三重引号 docstring 是语言内置特性,支持运行时访问和工具生成文档
Python 的设计哲学强制开发者编写整洁、可读的代码,这种"约束"实际上提高了代码质量和团队协作效率。掌握这些基础语法概念,特别是函数调用的基本语法,为后续学习各种数据类型和操作打下了坚实基础。