Python Learning

时间:2020-11-27 21:54:37

这是自己之前整理的学习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开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证,事半功倍!

文件构造Python LearningPython Learning

示例:

#!/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 Learning

Python Learning

Python Learning

列表的应用场景

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

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

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

元组(tuple)

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

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

Python Learning

元组的应用场景

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

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

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

字典

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

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

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

键区分字母大小写

Python Learning

集合

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 Learning

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