Python 作为一门计算机语言自然有它自己的语法规则,就像英语、汉语都有自己的语法规则一样。Python 的语法以简洁著称,它以行、缩进、注释、标识符、保留关键字等几方面来规定了自己的语法。
下面我们先看一段 Python 代码:
Python 的行
在 Python 里面,行分为 逻辑行
和物理行
。物理行就是以行结束符(\n
) 结尾算作一行,通常一个物理行也就是一个逻辑行。但有时候,一个逻辑行可以包含多个物理行,比如下面的代码,一个表达式太长我们就用多行来写,用斜杠 (\
) 连接:
whole = 'This is a example of too long string' + \
'which should be splited into multi-lines' + \
'to show it'
print(whole)
如果语句中含有 (), [], {}
这些括号,就不需要用斜杠做连接符,比如:
# list 元素可以多行书写
months = ['January', 'Februray', 'March', 'April',
'June', 'July', 'August', 'September',
'October', 'November', 'December']
# 字符串太长也可以通过 () 来多行书写。# 这个特性在写很长的字符串(如 SQL 语句)时很有用
sql = ('select id, name, age, height from'
'students where id > 100')
空行
空行也是一种行(内容为空),也是代码的一部分。常用于分割代码块,便于代码维护,这种代码规范中有详细定义。
单行多条语句
Python 语法允许一行中有多条语句存在,语句之间用分号(;
) 分割,但是编码规范中强烈不建议这样做,还是一行一条语句更清晰。
# 合法但不提倡的单行多语句写法
print('hi'); a = 10; b = 20; print(a+b)
缩进
Python 语法与其它语言的一个明显区别就是:通过缩进来表示代码块,而不是像 C /C++、Java 等用大括号{}
。
不过,缩进并没有严格限制字符,可以是 Tab 键,也可以是多个空格。但是同一个源文件 (.py
文件)中缩进必须相同,也就是说,要么都用 Tab 键,要么都用 2 个空格,要么都用 4 个空格。官方的编码规范(PEP 8)中规定用 4 个空格作为一个缩进。
如果缩进不一致,就会报错:IndentationError。比如以下代码:
#!/usr/bin/env python3
# coding:utf-8
# File: demo.py
# 缩进混乱,执行时报错
a = 10
if a > 10:
print('a > 10')
else:
print('a <= 10')
执行上面代码,就会出现如下错误:
python3 demo.py
File "demo.py", line 6
a = 10
^
IndentationError: unexpected indent
注释
注释是对代码的解释,是给读代码的人看的文字,不是给 Python 解释器运行的代码。
行内注释以 #
开头,即一行中 #
后面的文字都是注释内容。
多行注释使用三个单引号 ('''
) 或三个双引号 ("""
) 引起来,多用于 docstring(对模块、类、和函数进行说明)
# 这是注释
print('hi, 吃了啊') # 这也是注释
def myadd(a, b):
'''my add() function
param: a, int or float
param: b, int or float
return a + b
'''
return a + b
标识符(Identifiers)
标识符,也就是名称,即变量名、函数名、类名。Python 给起名字做了相关的规定。
可以用在名称中的字符有:
- 大写字母:
A-Z
- 小写字母:
a-z
- 阿拉伯数字:
0-9
- 下划线:
_
- 更多的 Unicode 字符:你可以用中文给变量起名字
标识符(起名字)可以包括以上字符,但是 不能以数字开头 ,同时名称是 区分大小写 的。
Python2 只支持 ASCII 码作为标识符的字符集, 而 Python 3 扩展了标识符字符集,我们可以在程序中起中文名字,但是打中文会累死人的哦。
def 加法(加数, 被加数):
return 加数 + 被加数
计算机 = 1
编程 = 2
print(加法(计算机, 编程))
保留关键字
虽然 Python 程序中可以使用那么多的字符,但是它也保留了一些字(如下表所示)作为语言本身的关键字,你给你的变量、函数、类起名字的时候不能使用这些关键字:
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
这些单词是 Python 语言里面的单词,一共不到 40 个,跟我们人类的语言(比如,英语)比起来单词量少之又少啊,计算机语言真简单!虽然计算机语言单词量很少,但是它讲逻辑,这么少的词汇加上运算符、变量和类等就可以构建出复杂的计算机程序。
保留的类标识符
这些类的标识符有特殊的含义,它们都是以下划线 _
开头和结尾的形式:
-
_*
不会被语句from module import *
导入。 -
__*__
系统定义的名称。 -
__*
类的私有名称。