Python 基础语法

任何一种编程语言(Python、Java、C 等)都有自己的一套语法规则,编译器(或者解释器)就是负责把符合编程语言语法规则的源代码转换成计算机 CPU 能够执行的机器码,然后执行。从这里开始,我们将正式开始 Python 程序设计语言语法规则 的学习。

Python 官方标准库地址 >>> 【传送门】,从这里你可以获取到关于 Python 程序设计语言的所有说明文档。

在开始正式学习 Python 基础语法规则之前,我们先来说明一些 Python 编程中需要注意的最最基本的语法规则或编码规范:


标点符号的使用

Python 默认语法中,标点符号都是 【半角英文】 输入。不小心用了中文标点的话,计算机会无法识别,然后报错:

1
SyntaxError: invalid character in identifier

源文件编码

Python3 源文件默认情况下(不明确指定),是以 UTF-8 进行编码的,所有字符串都是 unicode 字符串。

1
# -*- coding: utf-8 -*-

当然你也可以为源码文件指定不同的编码:

1
# -*- coding: GB2312 -*-

上述定义允许在源文件中使用 GB2312(simplified) 字符集中的字符编码,对应适合语言为简体中文。


标识符命名规范

程序设计语言中,标识符(Identifier)就是用于给变量、常量、函数、类、对象以及模块等命名,以建立起名称与使用之间的关系。

但标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:

【1】 标识符可以由字母、数字和下划线组成,不能包含空格、@、% 以及 $ 等特殊字符。

【2】 第一个字符必须是字母表中字母或下划线 "_"

【3】 标识符对大小写敏感。

【4】 下划线开头的标识符是有特殊意义的:

  • 以单下划线开头的标识符(如 _width),表示不能直接访问的类属性,其无法通过 from...import * 的方式导入;
  • 以双下划线开头的标识符(如__add)表示类的私有成员;
  • 以双下划线作为开头和结尾的标识符(如 __init__),是特殊方法专用标识符。代表类的构造函数。

因此,除非特定场景需要,应避免使用以下划线开头的标识符。

【5】 Python 中允许使用汉字作为标识符(避免使用),例如: 你好 = "ni hao"

【6】 除了要遵守以上这几条规则外,不同场景下的标识符命名规范:

  • 模块名全小写,多个单词可用下划线分割;
  • 包名全小写,com.mr、com.mr.book;
  • 常量全大写,多个单词可用下划线分割;
  • 变量、函数名,类中的属性名、方法名全部小写,多个单词可用下划线分割;
  • 类名首字母全大写,多个单词可用下划线分割。

=============================== 英文名 ===============================

【7】 英文名可参照 CODELF 给出,不可以使用 Python 关键字,不推荐使用 内置函数名

困扰:取名字真难?!!对于英语水平高考即巅峰的同学(当然不是贬低)达到见面知义有一定难度。

这里推荐一个网站:CODELF。命名前可以输入中文看看网络大佬们都是如何进行命名的。


Python 保留字

保留字即关键字,已经被 Python 系统赋予了特定的意义,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字(35):

1
2
3
4
>>> 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']
>>> len(keyword.kwlist)

使用 Python 中的保留字作为标识符,则解释器会报错:

1
SyntaxError: can't assign to keyword

注释

注释是给开发人员看的,可以是任意你想写的内容,解释器会自动忽略掉注释。由于解释器忽略的属性也可用于代码测试。

1 –> 行注释

Python 中单行注释以 # 开头,实例如下:

1
2
3
4
5
6
7
8
#!/usr/bin/python3

# 第一个注释
print ("Hello, Python1!")
print ("Hello, Python2!")
print ("Hello, Python3!")

print ("Hello, Python4!") # 第二个注释

说明多行代码的功能时,一般将注释放在代码的上一行;说明单行代码的功能时一般将注释放在代码的右侧。

2 –> 块注释

多行注释可以用多个 # 行注释,还可以使用三个连续单引号 ''' ''' 或三个双引号 """ """ 实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/python3

# 第一个注释
# 第二个注释

'''
使用 3 个单引号分别作为注释的开头和结尾
可以一次性注释多行内容
这里面的内容全部是注释内容
'''

"""
使用 3 个双引号分别作为注释的开头和结尾
可以一次性注释多行内容
这里面的内容全部是注释内容
"""

print ("Hello, Python!")

块注释通常用来为 Python 文件、模块、类或者函数等添加版权或者功能描述信息。


Python 语句

1 –> 语句行

Python 可以在同一行中使用分号 ; 来写多条语句,以下是一个简单的实例:

1
name = "Google"; age = 20; job = "IT";

2 –> 跨行语句

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 (\) 来实现语句跨行,例如:

1
2
3
4
5
6
7
8
9
# 表达式:
total = item_one + \
item_two + \
item_three

# 字符串(注意可能会引入空格,避免使用):
str_roll = "This is the first lines \
This is the second lines \
This is the second lines"

Python 语法规范中,不推荐使用反斜杠实现语句跨行,这里你只需要知道有相关用法即可。推荐语句跨行方法见下文【Python 语句相关编码规范要求 >>>> 2】中说明。

| >>> =============================== Python 语句相关编码规范要求 >>>> ============================= <<< |

1】 每行只写一个语句,而且语句行尾不加(;)。

2】 Python 语法规则中规定 每行不超过 80 个字符。如果语句行过长时,建议使用圆括号 () 来实现语句跨行:

Python 重要特性 >>>> 会将 圆括号 (), 中括号 [] 和花括号 {} 中的多行内容隐式的连接起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 函数过长,实现跨行:
Yes: foo_bar(self, width, height, color='black', design=None, x='foo',
emphasis=None, highlight=0)
# If 条件过长,实现跨行:
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong'):

# 文本字符串过长,实现跨行:
x = ('This will build a very long long '
'long long long long long long string')

# 表达式过长,实现跨行:
total = (item_one +
item_two +
item_three)

避免宁缺毋滥的使用括号 (),除非是用于实现跨行连接, 否则不要在返回语句或条件语句中使用括号,元组两边正常使用即可。

某些不便于跨行的特殊情况下 >>>> 可写于一行内(> 80 chars)

  • 长的导入模块语句;
  • 注释里的 URL、路径以及其他的一些长标记;
  • 不便于换行,不包含空格的模块级字符串常量,比如 url 或者路径。

3】 除非是在 with 语句需要三个以上的上下文管理器的情况下,否则不要使用反斜杠连接行。

1
2
3
4
5
6
7
8
9
10
11
12
Yes:  with very_long_first_expression_function() as spam, \
very_long_second_expression_function() as beans, \
third_thing() as eggs:
place_order(eggs, beans, spam, beans)

No: with VeryLongFirstExpressionFunction() as spam, \
VeryLongSecondExpressionFunction() as beans:
PlaceOrder(eggs, beans, spam, beans)

Yes: with very_long_first_expression_function() as spam:
with very_long_second_expression_function() as beans:
place_order(beans, spam)

缩进

Python 最具特色的就是使用 缩进 来表示代码块,不再需要使用大括号 {}

缩进有利有弊:

缩进的好处 –> 是强迫你写出格式化的代码,但没有规定缩进是几个空格还是 Tab(但上下文要一致,不要混用 Tab 和 空格,否则会报错)。

按照约定俗成的管理,应该始终坚持使用 4 个空格的缩进。缩进不一致导致的错误:

1
IndentationError: unindent does not match any outer indentation level

缩进的坏处 –> 就是 “复制-粘贴” 功能失效了,这是最坑爹的地方。当你重构代码时,粘贴过去的代码必须重新检查缩进是否正确。


import && from … import

在 Python 中用 import 或者 from...import 来导入相应的模块从而调用其内置方法:

  • 将整个模块(somemodule)导入,格式为: import somemodule

  • 为方便模块使用,简写格式为:import somemodule as xxx

  • 从某个模块中导入某个函数,格式为: from somemodule import somefunction

  • 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

  • 将某个模块中的全部函数导入,格式为: from somemodule import *


Google Style 编码规范

并不是只要遵循了上述 Python 基础语法规范,你就可以随心所欲的写脚本代码了。通常,在日常开发过程中,你必须遵循一定的编码规范,以提高代码的可读性。

这里,提供一个 Google Style 的 Python 风格规范

工作项目中,你还可以使用编码规范的自动化工具来自动化规范你的代码,这是重要且合理的。


Author

Waldeinsamkeit

Posted on

2018-01-04

Updated on

2024-01-13

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.