Python语法大全

一、Python的特点

简单Python是一种代表简单思想的语言。

易学Python有极其简单的语法。

免费、开源Python是FLOSS(自由/开放源码软件)之一。

高层语言使用Python编写程序时无需考虑如何管理程序使用的内存一类的底层细节。

可移植性Python已被移植到很多平台,这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC。

解释性可以直接从源代码运行。在计算机内部,python解释器把源代码转换为字节码的中间形式,然后再把它翻译成计算机使用的机器语言。

面向对象Python既支持面向过程编程也支持面向对象编程。

可扩展性部分程序可以使用其他语言编写,如c/c++。

可嵌入型可以把Python嵌入到c/c++程序中,从而提供脚本功能。

丰富的库Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。

二、基本概念

1. python中数有四种类型:整数、长整数、浮点数和复数。

整数, 如 1

长整数 是比较大的整数

浮点数 如 1.23、3E-2

复数 如 1 + 2j、 1.1 + 2.2j

2. 字符串(字符的序列)

python中单引号和双引号使用完全相同。

使用三引号('''或""")可以指定一个多行字符串。

转义符 ''

自然字符串, 通过在字符串前加r或R。 如 r"this is a line with " 则 会显示,并不是换行。

python允许处理unicode字符串,加前缀u或U, 如 u"this is an unicode string"。

字符串是不可变的。

按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。

3. 标识符的命名

第一个字符必须是字母表中字母或下划线'_'。

标识符的其他的部分有字母、数字和下划线组成。

标识符对大小写敏感。

4. 对象python程序中用到的任何“东西”都成为“对象”。

5. 逻辑行和物理行物理行是我们在编写程序时看到的,逻辑行则是python看到的。python中分号;标识一个逻辑行的结束,但是实际中一般每个物理行只写一个逻辑行,可以避免使用分号。多个物理行中可以写一个逻辑行,如下:

上面的使用被称为‘明确的行连接’, 又如:

6. 缩进 空白在python是非常重要的,行首的空白是最重要的,又称为缩进。行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而决定语句分组。这意味着同一层次的语句必须有相同的缩进,每一组这样的语句称为一个块。注意:不要混合使用空格和制表符来缩进,因为在跨越不同的平台时无法正常工作。

三、运算符与表达式

2. 运算符优先级(从低到高)

3. python 控制台输出

四、控制语句

1. if 语句

2. while语句

3. for 循环 for..in

注意: 当for循环结束后执行else语句; range(a, b)返回一个序列,从a开始到b为止,但不包括b,range默认步长为1,可以指定步长,range(0,10,2);

4. break语句

终止循环语句,如果从for或while中终止,任何对应循环的else将不执行。

5. continue语句

continue语句用来调过当前循环的剩余语句,然后继续下一轮循环。

五、函数

函数通过def定义。def关键字后跟函数的标识符名称,然后跟一对圆括号,括号之内可以包含一些变量名,该行以冒号结尾;接下来是一块语句,即函数体

1. 函数形参

函数中的参数名称为‘形参’,调用函数时传递的值为‘实参’

2. 局部变量

在函数内定义的变量与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。这称为变量的作用域。 global语句, 为定义在函数外的变量赋值时使用global语句。

3. 默认参数

通过使用默认参数可以使函数的一些参数是‘可选的’。

注意: 只有在形参表末尾的那些参数可以有默认参数值,即不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参,只是因为赋给形参的值是根据位置而赋值的。

4. 关键参数

如果某个函数有很多参数,而现在只想指定其中的部分,那么可以通过命名为这些参数赋值(称为‘关键参数’)。 优点:不必担心参数的顺序,使函数变的更加简单;假设其他参数都有默认值,可以只给我们想要的那些参数赋值。

5. return 语句

return语句用来从一个函数返回,即跳出函数。可从函数返回一个值。 没有返回值的return语句等价于return None。None表示没有任何东西的特殊类型。

6. DocStrings(文档字符串)

六、模块

模块就是一个包含了所有你定义的函数和变量的文件,模块必须以.py为扩展名。模块可以从其他程序中‘输入’(import)以便利用它的功能。 在python程序中导入其他模块使用'import', 所导入的模块必须在sys.path所列的目录中,因为sys.path第一个字符串是空串''即当前目录,所以程序中可导入当前目录的模块。

1. 字节编译的.pyc文件

导入模块比较费时,python做了优化,以便导入模块更快些。一种方法是创建字节编译的文件,这些文件以.pyc为扩展名。 pyc是一种二进制文件,是py文件经编译后产生的一种byte code,而且是跨平台的(平台无关)字节码,是有python虚拟机执行的,类似于java或.net虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的。

2. from .. import

如果想直接使用其他模块的变量或其他,而不加'模块名+.'前缀,可以使用from .. import。 例如想直接使用sys的argv, fromsysimportargv或 fromsysimport*

3. 模块的_name_

每个模块都有一个名称,py文件对应模块名默认为py文件名,也可在py文件中为name赋值;如果是name,说明这个模块被用户单独运行。

4. dir()函数

dir(sys)返回sys模块的名称列表;如果不提供参数,即dir(),则返回当前模块中定义名称列表。 del -> 删除一个变量/名称,del之后,该变量就不能再使用。

七、数据结构

python有三种内建的数据结构:列表、元组和字典。

1. 列表

list是处理一组有序项目的数据结构,列表是可变的数据结构。列表的项目包含在方括号[]中,eg: [1, 2, 3], 空列表[]。判断列表中是否包含某项可以使用in, 比如 l = [1, 2, 3]; print 1 in l; #True;支持索引和切片操作;索引时若超出范围,则IndexError;使用函数len()查看长度;使用del可以删除列表中的项,eg: del l[0] # 如果超出范围,则IndexError list函数如下:

append(value)  ---向列表尾添加项value

count(value)  ---返回列表中值为value的项的个数

extend(list2)  ---向列表尾添加列表list2

index(value, [start, [stop]])  ---返回列表中第一个出现的值为value的索引,如果没有,则异常 ValueError

insert(i, value)  ---向列表i位置插入项vlaue,如果没有i,则添加到列表尾部

pop([i])  ---返回i位置项,并从列表中删除;如果不提供参数,则删除最后一个项;如果提供,但是i超出索引范围,则异常IndexError

remove(value)  ---删除列表中第一次出现的value,如果列表中没有vlaue,则异常ValueError

reverse()  ---列表反转

sort(cmp=None, key=None, reverse=False)  ---列表排序

2. 元组

tuple和list十分相似,但是tuple是不可变的,即不能修改tuple,元组通过圆括号中用逗号分割的项定义;支持索引和切片操作;可以使用 in 查看一个元素是否在tuple中。空元组();只含有一个元素的元组("a",) #需要加个逗号 优点:tuple比list速度快;对不需要修改的数据进行‘写保护’,可以是代码更安全 tuple与list可以相互转换,使用内置的函数list()和tuple()。

元组最通常的用法是用在打印语句,如下例:

函数如下:

count(value)  ---返回元组中值为value的元素的个数

index(value, [start, [stop]])  ---返回列表中第一个出现的值为value的索引,如果没有,则异常 ValueError

3. 字典

字典由键值对组成,键必须是唯一的;eg: d = ;空字典用{}表示;字典中的键值对是没有顺序的,如果想要一个特定的顺序,那么使用前需要对它们排序;d[key] = value,如果字典中已有key,则为其赋值为value,否则添加新的键值对key/value;使用del d[key] 可以删除键值对;判断字典中是否有某键,可以使用in 或 not in;

dict函数如下: clear()  ---删除字典中所有元素

copy()  ---返回字典的一个副本(浅复制)

dict.fromkeys(seq,val=None) ---创建并返回一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值(默认为None)

get(key,[default])  ---返回字典dict中键key对应值,如果字典中不存在此键,则返回default 的值(default默认值为None)

has_key(key)  ---判断字典中是否有键key

items()  ---返回一个包含字典中(键, 值)对元组的列表

keys()  ---返回一个包含字典中所有键的列表

values()  ---返回一个包含字典中所有值的列表

pop(key, [default])  ---若字典中key键存在,删除并返回dict[key],若不存在,且未给出default值,引发KeyError异常

popitem()  ---删除任意键值对,并返回该键值对,如果字典为空,则产生异常KeyError

setdefault(key,[default])  ---若字典中有key,则返回vlaue值,若没有key,则加上该key,值为default,默认None

update(dict2)  ---把dict2的元素加入到dict中去,键字重复时会覆盖dict中的键值

viewitems()  ---返回一个view对象,(key, value)pair的列表,类似于视图。优点是,如果字典发生变化,view会同步发生变化。在迭代过程中,字典不允许改变,否则会报异常

viewkeys()  ---返回一个view对象,key的列表

4. 序列

序列类型是指容器内的元素从0开始的索引顺序访问,一次可以访问一个或者多个元素;列表、元组和字符串都是序列; 序列的两个主要特点是:索引操作符和切片操作符;索引可以得到特定元素;切片可以得到部分序列;

切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。 如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。 注意,返回的序列从开始位置 开始 ,刚好在结束位置之前 结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。 可以用负数做切片。负数用在从序列尾开始计算的位置。

5. 绑定

当创建一个对象并给它赋一个变量的时候,这个变量仅仅“指向”那个对象,而不是表示这个对象本身! 也就是说,变量名指向计算机中存储那个对象的内存,这被称作名称到对象的绑定。 如果要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单对象),那么必须使用切片操作符来取得拷贝。

八、面向对象编程

python支持面向对象编程;类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例。

对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域;对象也可以使用属于类的函数,这样的函数称为类的方法;域和方法可以合称为类的属性。

域有两种类型--属于实例的或属于类本身;它们分别被称为实例变量和类变量。

类使用关键字class创建,类的域和方法被列在一个缩进块中。

类的方法必须有一个额外的第一个参数,但是在调用时不为这个参数赋值,这个特殊变量指对象本身,按照惯例它的名称是self,类似C#中的this。

_init_方法  在类的一个对象被创建时调用该方法;相当于c++中的构造函数。

_del方法  在类的对象被销毁时调用该方法;相当于c++中的析构函数。在使用del删除一个对象时也就调用del_方法。

Python中所有的类成员(包括数据成员)都是public的;只有一个例外,如果使用的数据成员以双下划线为前缀,则为私有变量。

继承:为了使用继承,基类的名称作为一个元组跟在类名称的后面;python支持多重继承。下面是一个关于继承的例子:

九、输入/输出

程序与用户的交互需要使用输入/输出,主要包括控制台和文件;对于控制台可以使用rawinput和print,也可使用str类。rawinput(xxx)输入xxx然后读取用户的输入并返回。

1. 文件输入/输出

可以使用file类打开一个文件,使用file的read、readline和write来恰当的读写文件。对文件读写能力取决于打开文件时使用的模式,常用模式有读模式("r")、写模式("w")、追加模式("a"),文件操作之后需要调用close方法来关闭文件。

2. 存储器 python提供一个标准的模块,成为pickle,使用它可以在一个文件中存储任何python对象,之后可以完整的取出来,这被称为持久地存储对象;还有另外一个模块成为cPickle,它的功能和pickle完全一样,只不过它是用c写的,要比pickle速度快(大约快1000倍)。

十、异常

当程序中出现某些异常的状况时,异常就发生了。python中可以使用try ... except 处理。

可以让try ... except 关联上一个else,当没有异常时则执行else。 我们可以定义自己的异常类,需要继承Error或Exception。

try...finally

十一、Python标准库

Python标准库是随Pthon附带安装的,包含了大量极其有用的模块。

1. sys模块  sys模块包含系统对应的功能

sys.argv  ---包含命令行参数,第一个参数是py的文件名

sys.platform  ---返回平台类型

sys.exit([status])  ---退出程序,可选的status(范围:0-127):0表示正常退出,其他表示不正常,可抛异常事件供捕获

sys.path    ---程序中导入模块对应的文件必须放在sys.path包含的目录中,使用sys.path.append添加自己的模块路径

sys.modules  ---This is a dictionary that maps module names to modules which have already been loaded

sys.stdin,sys.stdout,sys.stderr  ---包含与标准I/O 流对应的流对象

2. os模块  该模块包含普遍的操作系统功能

os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径

os.getenv()和os.putenv()函数分别用来读取和设置环境变量

os.listdir()返回指定目录下的所有文件和目录名

os.remove()函数用来删除一个文件

os.system()函数用来运行shell命令

os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用' ',Linux使用' '而Mac使用' '

os.sep 操作系统特定的路径分割符

十二、其他

1. 一些特殊的方法

例如:

2. 综合列表

通过列表综合,可以从一个已有的列表导出一个新的列表。

3. 函数接收元组/列表/字典

当函数接收元组或字典形式的参数的时候,有一种特殊的方法,使用和前缀。该方法在函数需要获取可变数量的参数的时候特别有用。 由于在args变量前有前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是前缀,多余的参数则会被认为是一个字典的键/值对。

4. lambda

lambda语句被用来创建新的函数对象,并在运行时返回它们。lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。 注意,即便是print语句也不能用在lambda形式中,只能使用表达式。

5. exec/eval

exec语句用来执行储存在字符串或文件中的Python语句;eval语句用来计算存储在字符串中的有效Python表达式。

6. assert

assert语句用来断言某个条件是真的,并且在它非真的时候引发一个错误-- AssertionError。

7. repr函数

repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。 注意,在大多数时候有 eval(repr(object))==object。可以通过定义类的repr方法来控制对象在被repr函数调用的时候返回的内容。

十三、练习

实现一个通讯录,主要功能:添加、删除、更新、查询、显示全部联系人。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180111A0H7YW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券