这是自己之前整理的学习Python的资料,分享出来,希望能给别人一点帮助。

Learning Plan

  • Python是什么?- 对Python有基本的认识

    • 版本区别
    • 下载
    • 安装
    • IDE
    • 文件构造
  • Python语言 - 基础的语言知识
    • 变量
    • 数据类型
    • 列表/元组/字典/集合
    • 条件语句
    • 循环语句
    • 函数
    • 模块
    • 面向对象
    • 异常处理
    • Python命令行运行时带参数
  • Reference

Python是什么?- 对Python有基本的认识

Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。

除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。当然,如果你开发的代码通过很好的封装,也可以作为第三方库给别人使用。

Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。 总的来说,Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码

任何编程语言都有缺点,Python也不例外。第一个缺点就是运行速度慢, 和C程序相比非常慢,因为Python是解释型语言,代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是 运行前直接编译成CPU能执行的机器码,所以非常快。但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。第二个缺点就是代码不能加密。 如果要发布Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是Windows上常见 的.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解 释型的语言,则必须把源码发布出去。Python还有其他若干小缺点,不一一列举。

版本区别

目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的。当初为了修复2.x版本中的一些问题,并且不带入过多的累赘,3.X版本在设计的时候没有考虑向下相容。两个版本具体区别可以参考后面的参考链接。

下载

https://www.python.org/downloads/

安装

Python可应用于多平台包括 WindowsLinuxMac OS X

以下为在 Window 平台上安装 Python 2.7的简单步骤:

  • 打开WEB浏览器访问http://www.python.org/download/
  • 在下载列表中选择Window平台安装包,包格式为:python-XYZ.msi 文件 , XYZ 为你要安装的版本号。
  • 下载后,双击下载包,进入Python安装向导,安装非常简单,要注意选上"Add python.exe to Path".
  • 你只需要使用默认的设置一直点击"下一步"直到安装完成即可。

以下为安装Python3的简单步骤:

  • 下载后,双击下载包,进入Python安装向导,注意选上"Add Python 3.x to Path".
  • 选择自定义安装
  • 修改安装路径为C:\Python35
  • 使用默认的设置一直点击"下一步"直到安装完成即可。

可以先后安装2.7和3两个版本,并作以下设置让其共存。

  1. 确保环境变量PATH中有这些值,C:\Python35\Scripts\;C:\Python35\;C:\Python27\Scripts\;C:\Python27\;
  2. 重命名C:\Python35\python.exe为C:\Python35\python3.exe

之后在命令行窗口输入python即调用python2.7,输入python3即调用python3.5

aaarticlea/png;base64,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PvDB7gMf7Iod0Kf2HXty79H5cp4/tA1K6blYu7IPPJb92tZn92/dvX/r7lcf3fXqo7teeXTXK1t3v7p19/7Hnt0PTchYSw8/seBARLu648U3dux9Y8feo09C9tLRJ19688mX3tyx9+j2F15/Ys/h+Rme/Vrc5+OxwxR/gMw/IqC5kWDRBJ5PHLzgYbX9hSNP7j26c9+xZ15995n97z29/72dr76785V3d7x07LE9rz+y++Afnnrld9v3/s/jL/xm63MPPPLsg3/JfujxPb/bvvePO195ZNeBrc8f2b73zZ2vRPd9+tV3n371XegR8dTLbz259+iOhaVBa3bsTZgJCyfD488dfCz7ta279z+665VHd+2b7+qz+x/PPrDt+UNP7DkS697riXPpifkTRfThEG/1oj7vWGhP7j365EtvPvXyWztjp4WnX33nqZff2v7i69ueP7h19/5Hnn75T0++8Idt2Q8/tuv3W5/53aNP//YvO3/7l6d++5edv3105+8effrhx3f97449f3n65ceyX4MePttfOAJNnm3PH3os+wA0Q7bu3v/Ys68tOkDQkd26e//WXa9CZT4GHeI9h3e8+Do0859+5Z2nX33n6VfffWb/uzv3vb39xTcee+7gI7te/d+n9j68fc9vH3v2N395+td/furBPz35wJ+efOB/d0TtT08+8Kcnf/PIzt89nv3HHS8+8swrW2OeobbMP06f3R+byfu37t6/deFMg8qJPxDik/+xZ1/b+uziwdtik2rx2Wbh/NwWP33FdtmW4DzqLRZ98bkIOh0lzIEd0SN4bOe+t3fuO7bjxTe2PX9o67P7H9m59+HHdz/0p+33/+6Re3/zx82/+cPmXz+8+cHfb37w95t//fC9v/nDfQ/9ccv//On+3z3y4MNbf/3Hx//nkR0PP777z0+9uHX3q7EEYkkmnMkTKk2cYwtOcdDJMMHegCZhdLLtO7bzlbef2f/urtfef/bgX7MPfZh96MPswx8+d+Sj5458mH3kg+zD72Uffjf78DvZh9/OPnws+9BbMTuWffhY9uG3sw+/m334vezD7z976P3dB97btf/dp1+FZOjN7S++vi126tj67P6tu+Pz6rXHsg9sey56QoYyiVnsFDT/AIFO5q9vXyxDRxLVav4ov3DkiT1H8isaFGZvP1vbx9b2jWr62VrIApHZm2+/O+u/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" alt="" />

IDE

在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。所以,实际开发脚本的时候,需要使用一个文本编辑器IDE来写代码,写完了,保存为一个后缀为.py的文件,这样程序就可以反复运行了。推荐两款文本编辑器:一个是Sublime Text,免费使用,但是不付费会弹出提示框。一个是Notepad++,免费使用,有中文界面。但是如果要比较方便地设置断点、单步执行,就需要一个支持调试功能的IDE。目前比较好的Python IDE有PyCharm

请注意,绝对不能用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。

Python的交互模式和直接运行.py文件的区别:

直接输入Python进入交互模式,相当于启动了Python解释器,但是等待你一行一行地输入源代码,每输入一行就执行一行。

直接运行.py文件相当于启动了Python解释器,然后一次性把.py文件的源代码给执行了,没有机会以交互的方式输入源代码的。

用Python开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证,事半功倍!

文件构造

示例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py # 第一个注释
print ("Hello, Python!") # 第二个注释 # 代码块语句必须包含相同的缩进空白数量
if True:
print ("True")
else:
print ("False") # 使用斜杠( \)将一行的语句分为多行显示
total = item_one + \
item_two + \
item_three # 包含 [], {} 或 () 括号就不需要使用多行连接符
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday'] # 引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句""" # 在同一行中使用多条语句
import sys; x = 'runoob'; sys.stdout.write(x + '\n') # 不换行输出
x="a"
y="b"
print x,
print y,
# 输出: a b # if、while、def和class这样的复合语句, 以冒号( : )结束
if expression :
suite
elif expression :
suite
else :
suite
  • python 中单行注释采用 # 开头。第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码, 否则,你在源代码中写的中文输出可能会有乱码。申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码
  • Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python使用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量。
  • Python语句中一般以新行作为语句的结束符。但是我们可以使用斜杠( \)将一行的语句分为多行显示,语句中包含 [], {} 或 () 括号就不需要使用多行连接符。
  • Python还支持在一行最后以分号作为结尾,但建议最好不要写分号,以使脚本更规范整洁。
  • Python 可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须的相同类型的。常用于文档字符串,在文件的特定地点,被当做注释。
  • Python可以在同一行中使用多条语句,语句之间使用分号(;)分割
  • print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号
  • 空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

Python语言 - 基础的语言知识

变量

变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头。

变量值可以指定不同的数据类型。

变量是区分大小写的。

以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入

以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。

Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程。

每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。

每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

等号(=)用来给变量赋值。等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

数据类型

Python提供的基本数据类型主要有:整型、浮点型、字符串、布尔值、列表、元组、集合、字典等等

整型(int)

数学上的写法一模一样,例如:1100-80800等等。

浮点型(float)

浮点数可以用数学写法,如1.233.14-9.01等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e80.000012可以写成1.2e-5等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,而浮点数运算则可能会有四舍五入的误差。

Python支持的最大浮点数:

import sys
sys.float_info

字符串(str)

字符串是以单引号'或双引号"括起来的任意文本,比如'abc'"xyz"等等。请注意,''""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有abc这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I'm,空格,OK这6个字符

如果字符串内部既包含单引号'又包含双引号", 可以用转义字符\来标识。转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,\\表示字符\本身也要转义。print '\\\t\\'

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义。print r'\\\t\\'

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用三引号'''...'''或"""..."""的格式表示多行内容,三个单引号或三个双引号都可以。三个引号能包含多行字符串,同时常常出现在函数的声明的下一行,来注释函数的功能,与众不同的地方在于,这个注释作为函数的一个默认属性,可以通过 函数名.__doc__ 来访问

print '''line1
line2
line3'''

字符串编码问题请详见后面的参考链接。

格式化

在Python中,采用%实现格式化,举例如下:

print 'Hello, %s' % 'world'
print 'Hi, %s, you have $%d.' % ('Michael', 1000000)
print 'num=%.2f' %3.1415926
print 'num=%10d' %12345

在字符串内部,%s表示用字符串替换,%d表示用整数替换,%f表示用浮点数替换,%x表示用十六进制整数替换。

有几个%占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个,括号可以省略。

不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串。

字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%

print 'growth rate: %d%%' %7

布尔值(bool)

布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布尔值,也可以通过布尔运算计算出来。布尔值可以用andornot运算。

空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

Python中不同的类型的数据,初始化为空的值,比如null之类的,对应的写法是:

 
数值 digital_value = 0
字符串 str_value = "" 或 str_value = ”
列表 list_value = []
元祖 tuple_value = ()
字典 dict_value = {}

列表/元组/字典/集合

列表:(list)

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"]; print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]
list2[2] = 2001;
del list3[2];

列表的应用场景

尽管python 中的列表可以存储不同类型的数据,但是在开发中,更多的应用场景是:

1.列表存储相同类型的数据

2.通过迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作。

元组(tuple)

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = ("a", "b", "c", "d");

Python的元组与列表类似,不同之处在于元组的元素不能修改

元组的应用场景

尽管可以使用for in 遍历元祖,但是在开发中,更多的应用场景是:

1. 函数的参数和返回值,一个函数可以接受任意多个参数

2. 依次返回多个数据格式化字符串,格式化字符串后面的()本质上就是一个元祖;让列表不可以修改,以保护数据安全

字典

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
print "dict['Name']: ", dict['Name'];
print "dict['Age']: ", dict['Age'];

不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住

键必须不可变,所以可以用数字,字符串或元组充当,但是用列表就不行

键区分字母大小写

集合

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

s = set([1, 1, 2, 2, 3, 3])
s = set([1, 2, 3])

传入的参数[1, 2, 3]是一个list,而显示的set([1, 2, 3])只是告诉你这个set内部有1,2,3这3个元素,显示的[]不表示这是一个list。

集合用法

list1=[1,2,2,2,3,4,4,5]
list2=[2,3,5,98,23]
list(set(list1)&set(list2))
list(set(list1)|set(list2))
list(set(list1)-set(list2))
list(set(list2)-set(list1))

条件语句

Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块

if 判断条件:
执行语句……
else:
执行语句……

或者

if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……

还有一种简单语句。只要判断条件是非零数值、非空字符串、非空list等,就判断为True,否则为False

var = 100
if ( var == 100 ) : print "变量 var 的值为100"

循环语句

循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来

sum = 0
for x in range(101): #range范围从0到100
sum = sum + x
print sum

第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环

sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print sum

for … else 表示这样的意思和else的循环语句没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样

break语句

break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。break语句用在while和for循环中。

continue语句

continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。continue语句用在while和for循环中。

for letter in 'Python': # First Example
if letter == 'h':
continue
print 'Current Letter :', letter var = 10 # Second Example
while var > 0:
var = var -1
if var == 5:
continue
print 'Current variable value :', var
print "Good bye!"

pass语句

Python pass是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。

函数

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。参数可以是必选参数、默认参数、可变参数和关键字参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
  • 执行到return语句时,会退出函数,return之后的语句不再执行。。。
  • 函数可以同时返回多个值,但其实就是一个tuple。
  • 关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

  • 定义函数时,必选参数在前,默认参数在后,变化大的参数放前面,变化小的参数放后面,可以作为默认参数。默认参数值一定要用不可变的。
  • 调用函数时,默认参数的值如果没有传入,则被认为是默认值。
  • Python的内建函数
def printinfo( name, score, age = 15, location="Wuxi"):
print "Name: ", name;
print "score:", score
print "Age: ", age;
print "Location: ", location;
return; printinfo( age=16, name="miki", score=90 ); #使用关键字参数允许函数调用时参数的顺序与声明时不一致
printinfo( score=99, location="Suzhou", name="xiaowang" );
printinfo("xiaoxin",85) #省略关键字参数名

可变参数*args,args接收的是一个元祖tuple

def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
print(sum) calc(90,99,85)
nums = [1, 2, 3]
calc(nums[0], nums[1], nums[2])
calc(*nums)

关键字参数**kw, kw接收的是一个字典dict

def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw person('Adam', 45, gender='M', job='Engineer')
kw = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **kw)

定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数

模块

模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码

import datetime
import __builtin__
from xlrd import open_workbook,cellname
import xlrd

安装第三方模块

Python有2种安装第三方模块的方法。esay_install和pip

一般第三方模块可以从Python官网下载。下载解压后,进入安装包目录,运行以下命令就可完成安装:

python setup.py install

pip install <module name>

自定义模块

自定义的模块,如一个hello.py文件需要导入时,需放置在以下特定的位置,通过import hello语句就可以使用模块中定义的函数。因为当导入一个模块,Python解析器会对模块位置按顺序搜索:

  • 当前目录
  • 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
  • 如果都找不到,Python会察看默认路径。

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

aaarticlea/png;base64,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" alt="" />

包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。

假设Phone目录下的pots.py文件,保存了函数Posts(), 另外有两个保存了不同函数的文件:

  • Phone/Isdn.py 含有函数Isdn()
  • Phone/G3.py 含有函数G3()

在Phone目录下创建file __init__.py:

  • Phone/__init__.py
from Pots import Pots
from Isdn import Isdn
from G3 import G3

之后导入Phone包的时候,Pots, Isdn, G3都会被导入。使用方法如下:

import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()

面向对象

使用class语句来创建一个新类,class之后为类的名称,紧接着是(object),并以冒号结尾

类(Class)是抽象的模板,而实例(Instance)是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同

class Employee(object):
empCount = 0 def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1 def displayCount(self):
print "Total Employee %d" %Employee.empCount def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary emp1 = Employee("Zara", 2000)
emp2 = Employee("Manni", 5000)
emp1.age = 8
emp2.age = 9
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" %Employee.empCount

empCount变量是一个类变量,它的值将在这个类的所有实例之间共享。可以在内部类或外部类使用Employee.empCount访问。

方法就是与实例绑定的函数,和普通函数不同,类方法必须包含参数self,且为第一个参数。方法可以直接访问实例的数据;使用点(.)来访问对象的方法。

第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法。要创建一个类的实例时,可以使用类的名称,并通过__init__方法接受参数。__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身,不需要传递该参数。

有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数。

继承

定义一个class的时候,可以从某个现有的class继承,新的class称为子类,派生类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class),子类获得了父类的全部功能。当子类和父类都存在相同的的方法时,子类的方法覆盖了父类的方法,这是继承关系中的另一特点:多态

class后面紧接着是类名,紧接着是(object),表示该类是从哪个类继承下来的,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。所以对于上面的class Employee:类,这样写class Employee(object):是一样的。

class Parent(object):
parentAttr = 100
def __init__(self):
print "invoke parent class"
def parentMethod(self):
print 'invoke parent method'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print "parent attribute :", Parent.parentAttr class Child(Parent):
def __init__(self):
print "invoke child class"
def childMethod(self):
print 'invoke child method' c = Child()
c.childMethod()
c.parentMethod()
c.setAttr(200)
c.getAttr()

如果在继承元组中列了一个以上的类,那么它就被称作"多重继承"

class A:
.....
class B:
.....
class C(A, B):
.....

在python中继承中的一些特点:

  • 1:在继承中,基类的构造(__init__()方法)不会被自动调用,派生类需要另外定义构造。
  • 2:派生类在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。在类中调用普通函数时并不需要带上self参数。
  • 3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个从左至右搜索查找。(先在本类中查找调用的方法,找不到才去基类中找)

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self.__private_methods

异常处理

程序运行会遇到各种各样的错误,有的错误是是程序编写问题,是bug,需要修复;有的错误是用户输入导致,可以通过输入检查来解决。但有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。这类错误也称为异常

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

try....except...else的语法

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
#!/usr/bin/python
# -*- coding: UTF-8 -*- try:
fh = open("testfile", "w")
fh.write("This is a test file for testing except!")
except IOError:
print "Error: no file found or no read right"
else:
print "write file successfully"
fh.close()

使用except而不带任何异常类型, 会捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。

try:
正常的操作
......................
except:
发生异常,执行这块代码
......................
else:
如果没有异常执行这块代码

使用except而带多种异常类型。可以使用相同的except语句来处理多个异常信息,如下所示:

try:
正常的操作 ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
发生以上多个异常中的一个,执行这块代码
......................
else:
如果没有异常执行这块代码

try....except...else...finally的语法

finally 语句无论是否发生异常都将执行最后的代码。

try:
x = int(input('input x:'))
y = int(input('input y:'))
print('x/y = ',x/y)
except ZeroDivisionError:
print("ZeroDivision")
except (TypeError,ValueError,SyntaxError) as e:
print(e)
except:
print("it's still wrong")
else:
print('it work well')
finally:
print("Cleaning up")

异常的参数

一个异常可以带上变量参数,可作为输出的异常信息参数。

你可以通过except语句来捕获异常的参数,如下所示:

try:
正常的操作
......................
except ExceptionType, Argument:
print(Argument)

从Python2.6开始,又开始支持另外一种写法,如下。Python3.0中只支持下面的写法。

try:
正常的操作
......................
except ExceptionType as Argument:
print(Argument)

触发异常

可以使用raise语句自己触发异常, raise语法格式如下:

raise [Exception [, args ]]

raise IOError, "file error"

Python 2.6开始,还支持另外一种带括号写法,如下。Python3.0中也只支持下面的写法。

raise Exception(args) 或 raise Exception

raise IOError("file error")

用户自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

Python 标准异常

Python 命令行运行时带参数

例如有一个python文件sample.py,命令行带参数运行:python sample.py --version,运行结果为Version 1.2

import sys
def readfile(filename):
'''Print a file to the standard output.'''
f = file(filename)
while True:
line = f.readline()
if len(line) == 0:
break
print line,
f.close()
print "sys.argv[0]---------",sys.argv[0]
print "sys.argv[1]---------",sys.argv[1]
# Script starts from here
if len(sys.argv) < 2:
print 'No action specified.'
sys.exit()
if sys.argv[1].startswith('--'):
option = sys.argv[1][2:]
# fetch sys.argv[1] but without the first two characters
if option == 'version':
print 'Version 1.2'
elif option == 'help':
print '''"
This program prints files to the standard output.
Any number of files can be specified.
Options include:
--version : Prints the version number
--help : Display this help'''
else:
print 'Unknown option.'
sys.exit()
else:
for filename in sys.argv[1:]:
readfile(filename)

代码中sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径; 这里sys.argv[0]就代表“sample.py”,所以参数从1开始,sys.argv[1]代表--version,sys.argv[1][2:]表示取参数--version,再从第三个字符开始截取到最后结尾,则结果为version

Reference

Python Standard Library

Python2.7教程

Python3教程

Python 2.7.x 和 3.x 版本的重要区别

字符编码笔记:ASCII,Unicode和UTF-8

Python2.x与3.x版本区别

在线Python编译器

Python 代码风格 和 PEP8

Python Learning的更多相关文章

  1. python learning Exception & Debug.py

    ''' 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返 ...

  2. Python Learning Paths

    Python Learning Paths Python Expert Python in Action Syntax Python objects Scalar types Operators St ...

  3. How to begin Python learning?

    如何开始Python语言学习? 1. 先了解它,Wiki百科:http://zh.wikipedia.org/zh-cn/Python 2. Python, Ruby等语言来自开源社区,社区的学法是V ...

  4. Experience of Python Learning Week 1

    1.The founder of python is Guido van Rossum ,he created it on Christmas in 1989, smriti of ABC langu ...

  5. Python Learning: 03

    An inch is worth a pound of gold, an inch of gold is hard to buy an inch of time. Slice When the sca ...

  6. Python Learning: 02

    OK, let's continue. Conditional Judgments and Loop if if-else if-elif-else while for break continue ...

  7. Python Learning: 01

    After a short period of  new year days, I found life a little boring. So just do something funny--Py ...

  8. Python Learning - Three

    1. Set  Set is a collection which is unordered and unindexed. No duplicate members In Python sets ar ...

  9. Python Learning - Two

    1.  Built-in Modules and Functions 1) Function def greeting(name): print("Hello,", name) g ...

随机推荐

  1. LINQ标准查询操作符(五)

    十二.相等操作符 如果两个序列的对应元素相等且这两个序列具有相同数量的元素,则视这两个序列相等. SequenceEqual方法通过并行地枚举两个数据源并比较相应元素来判断两个序列是否相等.如果两个序 ...

  2. cocos2d-x 3.2读取xml和json练习

    读取和生成xml文件: #include "tinyxml2/tinyxml2.h" using namespace tinyxml2; void HelloWorld::make ...

  3. 文本读写vs二进制读写

    [文本读写vs二进制读写] 在学习C语言文件操作后,我们都会知道打开文件的函数是fopen,也知道它的第二个参数是 标志字符串.其中,如果字符串中出现'b',则表明是以打开二进制(binary)文件, ...

  4. invoking gdb

    [invoking gdb] The most usual way to start gdb is with one argument, specifying an executable progra ...

  5. hdu 1281 棋盘游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=1281 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  6. Session和Cookie的分析与区别

    首先说一下Web.config文件中的cookieless="false"的理解 cookieless="false"表示: 如果用户浏览器支持cookie时启 ...

  7. hdoj 5335 Walk Out

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5335 #include<stdio.h> #include<cstring> ...

  8. Linux下查看文件和文件夹大小的df和du命令

        转自:http://www.yayu.org/look.php?id=162 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比 ...

  9. InteractivePNG

    在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”.

  10. Docker 入门教程

    几个月以前,红帽(Red Hat)宣布了在 Docker 技术上和 dotCloud 建立合作关系.在那时候,我并没有时间去学习关于 Docker 的知识,所以在今天,趁着这个 30 天的挑战,我决定 ...