基础语法
一、标识符
所谓的标识符就是对变量、常量、函数、类等对象起的名字。
必须说明的是Python语言在任何场景都要严格区分大小写的。
命名规则
1.第一个字符必须是字母中的字母或下划线“_”
例如:a, AS, _get_id,name等都是可以的,但是例如:! @ # ... 等符号不能再变量名中
中文:是可以作为变量名的,Python3全面支持Unicode后,对中文的兼容性是越来越来好了。可以使用中文的。
我的名字 = "小黑" print(我的名字) # 执行结果 小黑
然而支持中文标识符,但是没人会这么干,也不建议这么做,将第一个字符必须是字母表中的字母或下划线“_”作为原则来执行。
另外,以下划线开头的标识符通常都是有特殊意义的
单下划线开头的变量:例如_foo代表禁止外部访问的类成员,需要通过类提供的接口进行访问,不能用“from xxx import * ”导入。
双下划线开头的变量:例如__foo代表类的私有成员,以双下划线开头和结尾的(__foo__)是Python里特殊方法专用的表示,如:__init__() 代表类的构造函数。
2.标识符的其他的不分有字母、数字和下划线组成
也就是说标识符除了首字母不可以是数字外,其他部分可以包含数字的,
另外要注意的的是,由于l(小写L)和数字1,大小写o与数字0在外观上的相似度,请尽量不要让他们相邻出现,保持语义的清晰性,确保不会发现错误的情况。
3.标识符对大小写敏感
基于Python严格区分大小写的,所以标识符abc与ABC是不同的两个变量。
4.变量名全部小写,常量名全部大写
这一条不能算语法层面的要求,而是代码规范的要求,虽然你可以用PI来表示一个变量,但通常我们都会认为这是代表圆周率的一个常量。
5.函数和方法名用小写家下划线
同样也不是语法强制的,而是代码规范,我们在定义一个函数或者方法的名字时候,请尽量使用类似的 get、set、get_name、set_name之类的命名方式。
6.类名用大写驼峰
也不是语法强制的也是代码规范。所谓的大写驼峰指的是每个单词的首字母大写,组合在一起就像驼峰一样高低高低的排列。如:
PythonPython
7.模块和包名字用小写
尽量小写模块和包的名字,并且不要和标准库以及三方库同名。
8.变量的命名不用用关键字和内置函数的名字
二、Python保留字
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']
三、注释
在程序里不光有代码,还要有注释,注释说明性质的、帮助性质的,他们在代码执行过程中相当于不存在的,不参与任何工作。但在代码维护、解释、测试等等方面,发挥着不可或缺的重要作用。每一位程序员都啊哟尽量写出高质量的注释。具体的注释专题,有大量的高水平为重和描述。
在Python中注释的方法
单行注释
Python中,以符号 # 为单行注释的开始,从它往后倒文本的末尾都是注释内容
# 我是单行注释,这一行在执行程序是不会被执行
多行注释
Python么有真正意义上的多行注释(块注释)语法,通常用 (""" """ 或 ''' ''')
""" 我是多行注释, """ ''' 我是多行注释, '''
注释文档
在某些特定的位置,用三引号抱起来的部分,也被当做注释。但是这种注释专门的作用 ,用于为__doc__提供文档内容,这些内容可以通过现成的工具,自动收集起来,形成帮助文档。比如,函数和类的说明文档:
def func(x, y): """ 这个函数说明 :param x: 乘数 :param y: 乘数 :return: 返回乘积 """ return x * y class Foo: """ 类的说明 """ pass
ps:这类注释必须紧跟在定义体下面,不能再任意位置。
四、语句与缩进
语句:在代码中,能够完整表带某个意思、操作或者逻辑的最短代码,被称为语句。语句通常不超过一行,超过一行的称为多行语句。比如;
from time import time name = "xiaohei" print(name) print(name.split())
Python的标准语句不需要使用分号或逗号来表示语句结束,简简单单的换行就表示本语句结束了
代码块:为完成某一特定功能而联系在一起的一组语句构成一个代码块。有判断、循环、函数、类等各种代码块。代码块的首行通常以关键字开始,以冒号(:)结束的,比如;
# 判断流程代码块 name = 20 if name > 18: pass else: pass
# 类流程代码块 class Foo: def __init__(self, name, age, ): self.name = name self.age = age def get_name(self): return self.name
# 函数流程代码块 def func(x, y): """ 这个函数说明 :param x: 乘数 :param y: 乘数 :return: 返回乘积 """ return x * y
ps:Python最大的特色就是使用语法时使用缩进来表示代码块,不需要使用大括号({ })。
缩进的空格数是可变的,但是同一个代码块的语句必须抱哈相同的缩进空格数
缩进空格数不一致会抛出异常
File "test.py", line 6 print ("False") IndentationError: unindent does not match any outer indentation level
PEP8:建议使用四个空格作为缩进,再文本编辑器中,需要设置Tab自定转换为4个空格。Pycharm中已经自动转换。Linux中使用bim编辑器请使用空格不能使用tab建。
同一行协多条语句:
Python一行通常就是一条语句,一条语句通常也不会超过一行。其实,从语法层面Python灭有完全禁止在一行中使用多条语句,也可以使用分号实现多条语句在一行,比如:
import time;x =1;time.time()
上面这一行是三条语句,用分号隔开,强烈不建议这样做,会导致阅读困难、维护耗时、容易出错。
多行语句:
上面是多行语句在一行,如果太长也是可用用多行的,可以使用反斜杠(\)来表示多行语句,比如
string = "i love this country,"\ +"because it is very beautiful!"\ + "how do you think about it?" \ + "Do you like it too?"
在[],{},()中的多行语句,可以不需要使用反斜杠(\),比如;
sum_int = (1, 2, 3, 4) print(sum_int)
PEP8建议每一行的字符不超过79个字符。
五、pass语句
pass语句是占位语句,表示什么也不做,只是为了保证语法的正确性,以下场景可以使用pass语句。
1.后边的代码不知道怎么写的时候。
2.不需要写代码细节的时候。
3.语法必须写又没有实际内容可写的时候。
4.其他需要的场景。
if name > 18: pass # 什么也不做不会出现语法错误
六、空白字符与空白行
空白行、空白字符与代码缩进不同,并不是Python语法的一部分,空行或者空白字符会被当做空气忽略。连续的空行和空白字符和单独的空白行是没有区别的。
PEP8对于空行留白有专门的建议。
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
变量赋值的时候等号左右各给一个空白。逗号后面跟一个空白。
#!/usr/bin/env python # -*- coding:utf-8 -*- class Foo: pass def func(a, b): pass if __name__ == '__main__': pass
七、字符串的表示形式
字符串,表示一段连续的字符,可以是有意义的单词、词组、语句、也可以使无意义的字符组合,不在于它内部是由什么组成的,而在于他是否被引号引起来的。
比如:name可能是一个变量,但是"name"肯定是一个字符串
在Python中被引号括起来的都是字符串,这个引号可以使单引号,双引号,甚至3引号。
Python中单引号和双引号的作用是完全相同的。但是注意:在其他语言中双引号引起来的才是字符串,单引号引起来的是字符,列如C语言 列如json,json格式转换的时候,经常发生使用单引号,导致转换失败的问题。
使用三引号 ''' 或 """ 可以指定一个多行字符串。
转义符 “\”,用来特殊转义,列如\r\n,\\。他可以将引号转义为单纯的引号,没有任何作用的引号。
原生字符串:通过支付长春前加r或R,如r"No escape is required \n",表示这个字符串里的斜杠不需要转义,等同意自身。列子中的\n会显示出来,并且不换行。
unicode字符串:加前缀u或U,u"No escape is required \n +1"。
bytes类型:加前缀b,如:b"No escape is required",字符串中带有中文是不可以,字符串是不可变类型。