Python 3 基础语法
任何事物都有它自己的运行法则,Python 也不例外
本章节我们就来学习 Python 最基本的语法规则
Python 文件扩展名
Python 文件默认的扩展名是 .py
字符编码
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串
当然你也可以为源码文件指定不同的编码,但我们不推荐你这么做
# -*- coding: GBK -*-
UTF-8 是最流行的最通用的编码方式,所以建议你不要随意替换
Python 标识符
-
Python 的标识符不能以数字开头,除此之外可以是任意字符,但建议都只使用
字母、数字、下划线(_)
>>> 3 = 4 SyntaxError: can't assign to literal >>> 3s = 4 SyntaxError: invalid syntax
-
Python 中的标识符是区分大小写的
>>> hello = "Hello World" >>> print(hello) Hello World >>> print(Hello) Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> print(Hello) NameError: name 'Hello' is not defined
-
以下划线开头的标识符是有特殊意义的
- 以单下划线开头
_foo
的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用from xxx import
而导入 - 以双下划线开头的
__foo
代表类的私有成员 - 以双下划线开头和结尾的
__foo__
代表 Python 里特殊方法专用的标识,如__init__()
代表类的构造函数
- 以单下划线开头
-
Python 3 中,非-ASCII 标识符也是允许的了
>>> 你好 = "Hello World" >>> print(你好) Hello World
Python 保留字符
保留字不能用做函数名、变量名,或任何其它标识符名称,不然会发生意想不到的结果
所有 Python 的保留字只包含小写字母
Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字
>>> import keyword >>> print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', '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'] >>> print(len(keyword.kwlist)) 33
False | None | True |
---|---|---|
and | as | assert |
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 # file:main.py # 这是一个注释 print ("Hello, Python") # 第二个注释
运行结果
Hello, Python
python 中多行注释使用三个单引号(''')或三个双引号(""")
#!/usr/bin/python # filename: demo.py ''' 这是多行注释,使用单引号 这是多行注释,使用单引号 这是多行注释,使用单引号 ''' """ 这是多行注释,使用双引号 这是多行注释,使用双引号 这是多行注释,使用双引号 """
行和缩进
Python 语言与其它语言最大的区别就是
Python 的代码块不使用大括号 {} 来控制类,函数以及其它逻辑判断 python 最具特色的就是用缩进来写模块
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行
缩进造成的错误,应该名列 Python 错误榜第一,君不见一不小心就 IndentationError
一般情况下设置为 4 个空格,因为各个平台和编辑器的差异,建议设置一个制表符设置为 4 个空格
if True: print ("True") else: print ("False")
以下代码将会执行错误
#!/usr/bin/python # filename:demo.py if True: print ("Answer") print ("True") else: print ("Answer") print ("False") # 没有严格缩进,在执行时会报错
运行上面的 Python 代码,会触发 IndentationError 错误
$ python main.py File "main.py", line 5 if True: ^ IndentationError: unexpected indent
IndentationError: unexpected indent 错误是 Python 编译器是在告诉你 "Hi,你的文件里格式不对了,可能是 tab 和空格没对齐的问题"
Python 对格式要求非常严格,很多编译错误都是由于缩进不当引起的
如果是 IndentationError: unindent does not match any outer indentation level 错误表明,你使用的缩进方式不一致,有的是 tab 键缩进,有的是空格缩进,改为一致即可。
多行语句
一般情况下,Python 中的语句都是以换行符为语句的结束符
如果语句太长,一行放不下 (超出了屏幕),那么可以用反斜杠 ( \ ) 划分为多行
greeting = "Hello " + \ "Python" + \ "Nice to meet you"
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠( \ )
lang = ['Python', 'PHP', 'Perl', 'JavaScript', 'C++']
千万不能把完整的字面量拆分成多行,不然结果就不得而知了
pi = 3. 1415926 print (pi)
运行结果
$ python main.py
3.0
数据类型
Python 3 中数有三种类型:整数、浮点数和复数
- 整数, 如 1, 12345556666666
- 浮点数,如 1.23、3E-2
- 复数,如 1 + 2j、 1.1 + 2.2j
字符串
- Python 中单引号和双引号使用完全相同
- 使用三引号('''或""")可以指定一个多行字符串
- 转义符 '\'
- 自然字符串, 通过在字符串前加
r
或R
如 r"this is a line with \n" 则\n
会显示,并不是换行 - 字符串是不可变的
- 按字面意义级联字符串,如 "this " "is " "string" 会被自动转换为 this is string
word = '字符串' sentence = "这是一个句子" paragraph = """这是一个段落, 可以由多行组成"""
Python 空白行
如果一行只包含空格,制表符,回车换行符,那么我们称该行为空白行
空白行不是 Python 语句的一部分,主要用于分隔两段不同功能或含义的代码
比如函数之间或类的方法之间用空行分隔,表示一段新的代码的开始
类和函数入口之间也用一行空行分隔,以突出函数入口的开始
空行与代码缩进不同,空行并不是 Python 语法的一部分
书写时可以不插入空白行,Python 解释器运行也不会出错
空行也是程序代码的一部分,用于增加代码可读性
读取用户输入
可以使用 input([prompt])
提示和读取用户的输入,prompt 参数为提示语句
默认情况下读取到回车换行符就停止读取
>>> s = input("\n\nsay some words:") say some words:Nice to see you >>> print ( s ) Nice to see you
如果要输入换行符,需要使用 '\r\n' 字符串
print 输出
前面我们已经使用过无数次的 print() 函数
print() 用于输出数据到标准输出( 一般为屏幕 )
print() 默认是会添加换行符的,如果要不换行,则需要传递参数 end= ''
#!/usr/bin/python x="Hello" y="World" # 换行输出 print (x) print (y) print ('---------') # 不换行输出 # print(x, end='') print(x, end='')
运行以上 Python 代码,输出结果如下
Hello World --------- HelloWorld
逗号(,) 可以理解为,等等我还有话要说,你 (换行符) 别插嘴...
Python 语句分隔符
Python 每条语句结尾的分号 (;) 不是强制需要的,因为 Python 默认以换行符(新行) 分隔每条语句
如果不是特殊情况,请删掉分号,这样才 pythonic
甚至我们推荐,请忘记 Python 中的分号(;)
#!/usr/bin/python print ('hello') print ('简单教程')
输出
hello 简单教程
如果要同一行显示多条语句、方法,可以是用分号 (;) 分开
>>> print ('Hello');print ('World'); Hello World
可以这么写,但我们不推荐你这么做
Python 引号
Python 可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串
引号的开始与结束必须的相同类型的
三引号可以由多行组成,是编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释
word = 'word' sentence = "这是一个句子" paragraph = """这是一个段落 包含了多个语句""" '''这就是 一个 注释语句了 '''
多行注释其实就是一个字符串,因为没有赋值给任何一个变量,所以运行的结果就被丢弃了
代码块
一般情况下,我们把缩进相同的语句称之为一个代码块
if 、while 、def 和 class 这样的复合语句,首行以关键字开始,以冒号( : )结束, 该行之后的一行或多行代码构成代码块
有时候我们也会把首行及后面的代码块称为一个子句 (clause ) ,例如
if expression : statement(s) elif expression : statement(s) else : statement(s)
命令行参数
我们已经知道了可以在命令行中输入 python
来启动 Python
交互式 Shell
其实还可以在输入 python
的同时附加一些参数来定制 python 和查看 Python 一些信息,比如
$ python V
Python 3.6.4
用于查看 Python 的版本
python -h
用于显示 python
命令的帮助信息
$ python -h usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... Options and arguments (and corresponding environment variables): -B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x -c cmd : program passed in as string (terminates option list) -d : debug output from parser; also PYTHONDEBUG=x -E : ignore PYTHON* environment variables (such as PYTHONPATH) -h : print this help message and exit (also --help) -i : inspect interactively after running script; forces a prompt even if stdin does not appear to be a terminal; also PYTHONINSPECT=x
使用 python
命令运行脚本时还可以接收一些命令行参数,比如我们经常看到的安装第三方包的命令
python setup.py build python setup.py install
其中的 build
和 install
就是命令行参数了
更多命令行参数的知识,可以访问我们的 Python 命令行参数