基础语法
优美优于丑陋,明了优于隐晦简单优于复杂,复杂优于繁杂
扁平优于嵌套,稀疏优于稠密
可读性很重要!
特例亦不可违背原则,即使实用比纯粹更优。错误绝不能悄悄忽略,除非它明确需要如此
面对不确定性,拒绝妄加猜测。
任何问题应有一种,且最好只有一种,显而易见的解决方法。
做优于不做,然而不假思索还不如不做。
很难解释的,必然是坏方法。
很好解释的,可能是好方法。
中文翻译为Python之禅,可以理解为Python语言的设计哲学。
缩进
Python 最具特色的就是使用缩进来表示代码块。不需要使用大括号 。
缩进的空格数是可变的,常见的有 2 个空格、4 个空格、8 个空格。但是同一个代码块的语句必须包含相同的缩进空格数。
后来出台的代码规范 PEP 8,建议使用 4 个空格作为缩进。
if True:
print ("True")
else:
print ("False")
注释
注释是代码中不会被 Python 解释器执行的文本。用于解释代码,方便阅读。
Python 支持单行注释和多行注释。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 在过去,需要 py 文件编码声明 utf-8 才能正常显示中文,不过现在只有使用其他编码(如 GBK)时才需要声明。
# 单行注释使用#号,可以单独一行写在代码上方
a = 1
b = 2 # 也可以写在代码后面
"""
多行注释使用三个双引号。
通常写在代码文件的最上方,描述这个代码文件的用途。
或者写在函数、方法内,描述这个函数、方法的用途。
"""
# 在函数、类、方法中,可以使用三个双引号添加注释,这样的注释称为文档字符串(docstring)。
# 可以被正确解析为函数的属性。
# 在 docstring 前后都没有空行。
# 即便只有一行,也推荐这样写,这使得以后扩展它变得容易。
# 单行文档字符串不应是重复函数/方法参数的“签名”,最好写一些有用的信息,例如功能、参数的含义、返回值的含义。
def add_numbers(a,b):
"""
实现一个求和的函数
:param a: 第一个数
:param b: 第二个数
:return: 两数之和
"""
return a+b
print(add_numbers.__doc__)
# 输出:
# 实现一个求和的函数
# :param a: 第一个数
# :param b: 第二个数
# :return: 两数之和
class Person:
"""Person类,描述一个Person对象"""
def __init__(self, name, age):
"""初始化一个Person对象"""
pass
print(Person.__doc__)
# 输出:
# Person类,描述一个Person对象
print(Person.__init__.__doc__)
# 输出:
# 初始化一个Person对象
如果你违反这些惯例,最坏的结果也不过是招来一些不友好的目光。
但有些软件(如 PEP 256 和 PEP 258 的 Docutils 文档字符串处理系统)会知晓这些惯例,因此遵循它们将为你带来最佳效果。
丰富的内置内容
Python 易于学习的另外一个原因,就是丰富的内置内容。所有的内置对象在代码编辑器中都会有Code Highlight?。
关键字
关键字是语言中预先定义的标识符。(在开发工具中会显示特殊颜色。)
我们把它们用 作标识符名称会引发错误或导致其功能失效。
Python 的标准库提供了一个 keyword module,可以输出当前版本的所有保留字,后续我们会深入学习每一个保留字的作用。
import keyword
print(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']
某些标识符仅在特定上下文中被保留。它们被称为软关键字。
-
match, case, _中case和_只有在match语句下才有特殊功能。 -
type在语法这一部分中仅被解释为关键字。巧合的是:内置函数中也有名为type()的函数。
软关键字虽然没有收录在 keyword.kwlist 中,但本文亦将其列出。
内置数据类型
有部分教材会归纳为六类基础数据类型:数字、字符串、列表、元组、字典、集合。
如果只追求学习 Python 基础语法,确实可以只学习这六类基础数据类型。
事实上,Python3.14 内置有数据类型非常多。
注意:Python 中,
bool是int的子类。
而且 Python 中你自己创建一个新类,设置一下实例,就是一种新的数据类型。
内置异常
异常是 Python 中用于处理错误和异常情况的关键机制。
内置函数
内置函数指的是Python解释器自带的函数,不需要导入模块、不需要定义就可以使用。
内置常量
Python3.14中,内置常量有:
True: 布尔值True。False: 布尔值False。None: 空值。__debug__: 用于判断是否为开发模式(注意与调试模式区分)。Ellipsis: 用于切片操作,等价于...。NotImplemented: 用于在类中重载运算符,表示该运算符未实现。
注意 None 、 False 、 True 和 __debug__ 这些名称不能重新赋值(将它们作为属性名赋值也会引发 SyntaxError ),因此它们可以被认为是“真正的”常量。
对于这些常量,我们倾向用is判断是否相等,而不是==。例如变量 is None。
对于Ellipsis,我们实际使用中,一般使用...来代替。
import numpy as np
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(a[Ellipsis]) # 输出整个列表
# 等价于
print(a[...])
# 判断...是否是Ellipsis
print(... is Ellipsis) # 输出True
site模块(在启动时自动导入,除非提供了 -S 命令行选项)会添加几个常量。它们对交互式解释器很有用,但不应在程序中使用。
quit(code=None)与exit(code=None):名称不同而已,都是退出解释器。较为常用。help:显示帮助信息。输入help(object)获取关于object的帮助。copyright:显示Python的版权信息。credits:显示Python的贡献者信息。license:显示Python的许可证信息。
标准库
标准库就是内置的模块库,不需要安装,直接导入就可以使用。
运算符
运算符和内置部分一样,可以直接使用。
运算符当中,除了= is not and or 不能被重载,其他运算符都可以被重载。
我们假设a = 10,b = 20。