Python基础语法
1. 程序的格式框架
Python采用严格的“缩进”来表明程序的格式框架。 缩进指每一行代码开始前的空白区域,用来表示代码之间的包含和层次关系。不需要缩进的代码顶行编写,不留空白。 代码编写中,缩进可以用 Tab键实现,也可以用多个空格(一般是4个空格)实现,但两者不混用。建议采用4个空格方式书写代码。
严格的缩进可以约束程序结构,有利于维护代码结构的可读性
\color{red}{严格的缩进可以约束程序结构,有利于维护代码结构的可读性}
严格的缩进可以约束程序结构,有利于维护代码结构的可读性。除了单层缩进,一个程序的缩进还可“嵌套”从而形成多层缩进。Python语言对语句之间的层次关系没有限制,可以“无限制”嵌套使用。
缩进表达了所属关系。单层缩进代码属于之前最邻近的一行非缩进代码,多层缩进代码根据缩进关系决定所属范围。需要注意,不是所有代码都可以通过缩进包含其他代码,一般来说,判断、循环、函数、类等语法形式能够通过缩进包含一批代码,进而表达对应的语义。但是,如 print()这样的简单语句不表达包含关系,不能使用缩进。
2. 注释
注释是程序员在代码中加入的一行或多行信息,用来对语句、函数、数据结构或方法等进行说明,提升代码的可读性。注释是辅助性文字,会被编译或解释器略去,不被计算机执行。
Python语言有两种注释方法:单行注释和多行注释。单行注释以#
开头,多行注释以'''
(3个单引号)或多引号"""
开头和结尾。例如:
# 这是单行注释,单行注释可以独占一行
print(pow(2,10)) # 计算2的10次方,单行注释可以从行的中间开始
'''
print(pow(2,10)) 此行是注释,不被代码执行
'''
"""
print(pow(2,10)) 此行是注释,不被代码执行
"""
Python程序中的非注释语句将按顺序执行,而注释语句则被解释器过滤掉,不被执行。注释主要有3个用途。第一,标明作者和版权信息。在每个源代码文件开始前增加注释,标记编写代码的作者、日期、用途、版权声明等信息,可以采用单行或多行注释。 第二,解释代码原理或用途。 在程序关键代码附近增加注释,解释关键代码作用,增加程序的可读性。由于程序本身已经表达了功能意图,为了不影响程序阅读连贯性,程序中的注释一般采用单行注释,标记在关键代码同行。对于一段关键代码,可以在其附近采用一个多行注释或多个单行注释给出代码设计原理等信息。第三,辅助程序调试。在调试程序时,可以通过单行或多行注释临时“去掉”行或连续多行与当前调试无关的代码,辅助程序员找到程序发生问题的可能位置。
3. 命名与保留字
与数学概念类似,Python程序采用“变量”来保存和表示具体的数据值。为了更好地使用变量等其他程序元素,需要给它们关联一个标识符(名字),关联标识符的过程称为命名。命名用于保证程序元素的唯一性。
Python语言允许采用大写字母、小写字母、数字、下画线_
和汉字等字符及其组合给变量命名,但名字的首字符不能是数字,中间不能出现空格,长度没有限制。
Python的命名不能以数字开头的原因:
如果允许变量名开头是数字,则无法区分变量名和数字类型,例如:如果变量名 091合法,则程序无法区分这个变量和数字 091。另外,有些数字可能含有字母,如浮点数 1E10。程序设计语言不能存在歧义,因此,需要约定变量名开头不能是数字,以便区分变量与数字。
以下是合法命名的标识符:
python_is_good、python_is_not_good、_is_it_a_question_
喜欢 Python语言、我喜欢这本 Python 书籍
注意:标识符对大小写敏感,python 和 Python是两个不同的名字。
一般来说,程序员可以为程序元素选择任何喜欢的名字,但这些名字不能与Python的保留字相同。Python 3.x版本共有33个保留字,如下表所示。
保留字(Keyword),也称为关键字,指被编程语言内部定义并保留使用的标识符。程序员编写程序时不能定义与保留宇相同的标识符,每种程序设计语言都有一套保留字,保留字一般用来构成程序整体框架、表达关键值和具有结构性的复杂语义等。掌握一门编程语言首先要熟记其所对应的保留字。
与其他标识符一样,Python的保留字也对大小写敏感。例如,for是保留字,而For则不是,程序员可以定义其为变量使用。
Python 3系列可以采用中文等非英语语言字符对变量命名。由于存在输入法切换、平台编码支持、跨平台兼容等问题,从编程习惯和兼容性角度考虑,一般不建议采用中文等非英语语言字符对变量命名。
4. 字符串
存储和处理文本信息在计算机应用中十分常见。文本在程序中用字符串(string)类型来表示。Python 语言中,字符串是用两个双引号""
或者单引号''
括起来的一个或多个字符。
字符串是字符的序列,可以按照单个字符或字符片段进行索引。字符串包括两种序号体系:正向递增序号和反向递减序号。如果字符串长度为L,正向递增以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1;反向递减序号以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。这两种索引字符的方法可以同时使用。
Python 访问子字符串,可以使用索引和切片操作。索引值以 0 为开始值,-1 为从末尾的开始位置。
<字符串>[n] (取第n个字符。索引)
<字符串>[n:m] (取从n到m的子串,不包含m。n、m可缺省。切片)
<字符串>[start:stop:step](取从start步长为step到stop的子串,不包含stop,三者都可缺省。称为切片)
示例说明:
[start:] 从start 提取到结尾;
[:stop] 从开头提取到stop - 1;
[:]提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串;
[start: stop] 从start 提取到stop - 1;
[start: stop :step] 从start 提取到stop - 1,每step 个字符提取一个。
5. 赋值语句
程序中产生或计算新数据值的代码称为表达式,类似数学中的计算公式。表达式以表达单一功能为目的,运算后产生运算结果,运算结果的类型由操作符或运算符决定。
Python语言中,=
表示“赋值”,即将等号右侧的计算结果赋给左侧变量,包含等号(=)的语句称为赋值语句。
此外,还有一种同步赋值语句,可以同时给多个变量赋值,基本格式如下:
<变量1>,...,<变量N> = <表达式1>,...,<表达式N>
同步赋值并非等同于简单地将多个单一赋值语句进行组合,因为,Python在处理同步赋值时首先运算右侧的N个表达式,同时将表达式的结果赋值给左侧N个变量。例如,互换变量x和y的值,如果采用单一语句,需要一个额外变量辅助,代码如下:
t = x
x = y
y = t
如果采用同步赋值,一行语句即可:
x,y = y,x
同步赋值语句可以使赋值过程变得更简洁,通过减少变量使用,简化语句表达,增加程序的可读性。但是,应尽量避免将多个无关的单一赋值语句组合成同步赋值语句,否则会降低程序可读性。那么,如何判断多个单一赋值语句是否相关呢?一般来说,如果多个单一赋值语句在功能上表达了相同或相关的含义,或者在程序中属于相同的功能,都可以采用同步赋值语句。
6. input()函数
在Python中我们可以使用input()函数从控制台获得用户输入,无论用户在控制台输入什么内容,input()函数都以字符串类型返回结果。
在获得用户输入之前,input()函数可以包含一些提示性文字,使用方法如下:
<变量> = input(<提示性文字>)
需要注意,无论用户输入的是字符或是数字,input()函数统一按照字符串类型输出。
7. eval()函数
语法介绍:
eval(<字符串>)
eval(<字符串>)的作用是将输入的字符串转变成Python语句,并执行该语句。
更多具体的用法可以参考这篇文章:Python中eval()函数的使用。
8. print()函数
语法介绍:
print(<待输出字符串>)
使用print(<待输出字符串>)
输出函数输出字符信息,其也能以字符形式输出变量。当输出纯字符信息时,可以直接将待输出内容传递给print()函数。当输出变量值时,需要采用格式化输出方式,通过format()方法将待输出变量整理成期望输出的格式。具体来说,print()函数用槽格式和 format()方法将变量和字符串结合到一起输出。
思考与练习
-
下面不符合 Python语言命名规则的是()。
A.monthly
B.monTHly
C.3monthly
D.Monthly3_ -
请写出Python语言的33个保留字,并解释这些保留字的基本含义。
- and:逻辑与操作符,用于连接两个条件表达式,当且仅当两个条件都为真时,结果为真。
- as:用于类型提示和别名,也用于
import
语句中创建别名。- assert:用于测试表达式,如果表达式为假,则引发
AssertionError
。- async:用于声明异步函数。
- await:只能在异步函数内部使用,用于暂停异步函数的执行,等待另一个异步操作完成。
- break:用于跳出循环(如
for
或while
循环)。- class:用于定义新类。
- continue:用于跳过循环的当前迭代,进入下一次迭代。
- def:用于定义函数或方法。
- del:用于删除对象。
- elif:
else if
的缩写,用于if
语句中的条件分支。- else:用于指定
if
语句或循环的默认分支。- except:用于异常处理,指定要捕获的异常类型。
- finally:无论是否发生异常,
finally
块中的代码总是会被执行。- for:用于遍历序列(如列表、元组、字符串等)或其他可迭代对象。
- from:用于导入模块或模块中的特定部分。
- global:声明变量为全局变量。
- if:用于条件判断。
- import:用于导入模块。
- in:用于检查元素是否存在于序列或其他可迭代对象中。
- is:检查两个对象是否相同。
- lambda:用于定义匿名函数。
- nonlocal:声明变量为非局部变量。
- not:逻辑非操作符,用于反转条件表达式的真假值。
- or:逻辑或操作符,用于连接两个条件表达式,当且仅当至少有一个条件为真时,结果为真。
- pass:空操作,用于占位。
- raise:用于引发异常。
- return:用于从函数或方法中返回值。
- try:用于异常处理,指定要尝试执行的代码块。
- while:用于创建循环,只要条件为真,就会一直执行循环体。
- with:用于简化资源管理的代码,如文件打开和关闭。
- yield:用于在函数中返回生成器的值。
- True 和 False:布尔值,分别表示真和假。
- 请用一行代码编写一个回声程序,将用户输入的内容直接打印出来。
print(input("内容"))
- 为什么Python的命名不能以数字开头?
如果允许变量名开头是数字,则无法区分变量名和数字类型
参考文章:
python变量命名为什么不能以数字开头
Python3有多少保留字?
Python字符串
Python中eval()函数的使用