python知识

    xiaoxiao2021-08-31  179

    Python 简介

    Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

    Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

    Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

    Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。

    Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

    Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。

    运行Python

    有三种方式可以运行Python:

    1、交互式解释器:

    你可以通过命令行窗口进入python并开在交互式解释器中开始编写Python代码。

    你可以在Unix,DOS或任何其他提供了命令行或者shell的系统进行python编码工作。

    2、命令行脚本

    在你的应用程序中通过引入解释器可以在命令行中执行Python脚本,如下所示:

    $ python script.py # Unix/Linux 或者 C:>python script.py # Windows/DOS

    Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。

    解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者#coding=utf-8 就行了。

    实例(Python 2.0+)

    #!/usr/bin/python # -*- coding: UTF-8 -*- print "你好,世界";

    Python 标识符

    在python里,标识符有字母、数字、下划线组成。

    在python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

    python中的标识符是区分大小写的。

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

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

    行和缩进

    学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。

    缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。如下所示:

    if True: print "True" else: print "False"

    多行语句

    Python语句中一般以新行作为为语句的结束符。

    但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:

    total = item_one + \ item_two + \ item_three

    语句中包含[], {} 或 () 括号就不需要使用多行连接符。如下实例:

    days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

    Python 引号

    Python 接收单引号(' ),双引号(" ),三引号(''' """) 来表示字符串,引号的开始与结束必须的相同类型的。

    其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。

    word = 'word' sentence = "这是一个句子。" paragraph = """这是一个段落。 包含了多个语句"""

    等待用户输入

    下面的程序在按回车键后就会等待用户输入:

    #!/usr/bin/python raw_input("\n\nPress the enter key to exit.")

    以上代码中 ,"\n\n"在结果输出前会输出两个新的空行。一旦用户按下键时,程序将退出。

    同一行显示多条语句

    Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例: #!/usr/bin/python import sys; x = 'runoob'; sys.stdout.write(x + '\n')

    变量赋值

    Python 中的变量赋值不需要类型声明。

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

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

    等号(=)用来给变量赋值。

    等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:

    #!/usr/bin/python # -*- coding: UTF-8 -*- counter = 100 # 赋值整型变量 miles = 1000.0 # 浮点型 name = "John" # 字符串

    多个变量赋值

    Python允许你同时为多个变量赋值。例如:

    a = b = c = 1

    以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。

    您也可以为多个对象指定多个变量。例如:

    a, b, c = 1, 2, "john"

    以上实例,两个整型对象1和2的分配给变量a和b,字符串对象"john"分配给变量c。

    标准数据类型

    在内存中存储的数据可以有多种类型。

    例如,person.s年龄作为一个数值存储和他或她的地址是字母数字字符存储。

    Python有一些标准类型用于定义操作上,他们和为他们每个人的存储方法可能。

    Python有五个标准的数据类型:

    Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)

    Python数字

    数字数据类型用于存储数值。

    他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。

    当你指定一个值时,Number对象就会被创建:

    var1 = 1 var2 = 10

    您也可以使用del语句删除一些对象的引用。

    del语句的语法是:

    del var1[,var2[,var3[....,varN]]]]

    您可以通过使用del语句删除单个或多个对象的引用。例如:

    del var del var_a, var_b

    Python支持四种不同的数字类型:

    int(有符号整型)long(长整型[也可以代表八进制和十六进制]) float(浮点型) complex(复数)

    Python字符串

    字符串或串(String)是由数字、字母、下划线组成的一串字符。

    一般记为 :

    s="a1a2···an"(n>=0)

    它是编程语言中表示文本的数据类型。

    python的字串列表有2种取值顺序:

    从左到右索引默认0开始的,最大范围是字符串长度少1从右到左索引默认-1开始的,最大范围是字符串开头

    如果你的实要取得一段子串的话,可以用到变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

    比如:

    s = 'ilovepython'

    s[1:5]的结果是love。(左闭右开的区间)

    当使用以冒号分隔的字符串,python返回一个新的对象,结果包含了以这对偏移标识的连续的内容,左边的开始是包含了下边界。

    上面的结果包含了s[1]的值l,而取到的最大范围不包括上边界,就是s[5]的值p。

    加号(+)是字符串连接运算符,星号(*)是重复操作。如下实例:

    实例(Python 2.0+)

    #!/usr/bin/python# -*- coding: UTF-8 -*-str = 'Hello World!'print str# 输出完整字符串printstr[0]# 输出字符串中的第一个字符printstr[2:5]# 输出字符串中第三个至第五个之间的字符串printstr[2:]# 输出从第三个字符开始的字符串printstr * 2# 输出字符串两次printstr + "TEST"# 输出连接的字符串

    Python列表

    List(列表) 是 Python 中使用最频繁的数据类型。

    列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。

    列表用[ ]标识。是python最通用的复合数据类型。看这段代码就明白。

    列表中的值得分割也可以用到变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认0开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。

    加号(+)是列表连接运算符,星号(*)是重复操作。如下实例:

    实例(Python 2.0+)

    #!/usr/bin/python # -*- coding: UTF-8 -*- list = [ ' runoob ' , 786 , 2.23 , ' john ' , 70.2 ] tinylist = [ 123 , ' john ' ] print list # 输出完整列表 print list [ 0 ] # 输出列表的第一个元素 print list [ 1 : 3 ] # 输出第二个至第三个的元素 print list [ 2 : ] # 输出从第三个开始至列表末尾的所有元素 print tinylist * 2 # 输出列表两次 print list + tinylist # 打印组合的列表

    Python元组

    元组是另一个数据类型,类似于List(列表)。

    元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。

    Python元字典

    字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。

    两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    字典用"{ }"标识。字典由索引(key)和它对应的值value组成。

    dict = {}   #声明一下是元字典,类似map dict [ ' one ' ] = " This is one " dict [ 2 ] = " This is two "

    Python数据类型转换

    有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

    以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

    函数描述

    int(x [,base])

    将x转换为一个整数

    long(x [,base] )

    将x转换为一个长整数

    float(x)

    将x转换到一个浮点数

    complex(real [,imag])

    创建一个复数

    str(x)

    将对象 x 转换为字符串

    repr(x)

    将对象 x 转换为表达式字符串

    eval(str)

    用来计算在字符串中的有效Python表达式,并返回一个对象

    tuple(s)

    将序列 s 转换为一个元组

    list(s)

    将序列 s 转换为一个列表

    set(s)

    转换为可变集合

    dict(d)

    创建一个字典。d 必须是一个序列 (key,value)元组。

    frozenset(s)

    转换为不可变集合

    chr(x)

    将一个整数转换为一个字符

    unichr(x)

    将一个整数转换为Unicode字符

    ord(x)

    将一个字符转换为它的整数值

    hex(x)

    将一个整数转换为一个十六进制字符串

    oct(x)

    将一个整数转换为一个八进制字符串

    Python算术运算符

    **幂 - 返回x的y次幂a**b 为10的20次方, 输出结果 100000000000000000000//取整除 - 返回商的整数部分9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

    Python逻辑运算符

    Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

    运算符逻辑表达式描述实例andx and y布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。(a and b) 返回 20。orx or y布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。(a or b) 返回 10。notnot x布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。not(a and b) 返回 False

    Python成员运算符

    除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

    运算符描述实例in如果在指定的序列中找到值返回 True,否则返回 False。x 在 y 序列中 , 如果 x 在 y 序列中返回 True。not in如果在指定的序列中没有找到值返回 True,否则返回 False。x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

    Python身份运算符

    身份运算符用于比较两个对象的存储单元

    运算符描述实例isis是判断两个标识符是不是引用自一个对象x is y, 如果 id(x) 等于 id(y) , is 返回结果 1is notis not是判断两个标识符是不是引用自不同对象x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1

    Python 条件语句

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

    简单的语句组

    你也可以在同一行的位置上使用if条件判断语句,如下实例:

    #!/usr/bin/python # -*- coding: UTF-8 -*- var = 100 if ( var == 100 ) : print "变量 var 的值为100" print "Good bye!"

    Python While循环语句

    Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:

    while 判断条件: 执行语句……

    循环使用 else 语句

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

    简单语句组

    类似if语句的语法,如果你的while循环体中只有一条语句,你可以将该语句与while写在同一行中,如下所示:

    #!/usr/bin/python flag = 1 while (flag): print 'Given flag is really true!' print "Good bye!"

    Python for 循环语句

    Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

    语法:

    for循环的语法格式如下:

    for iterating_var in sequence: statements(s)

    通过序列索引迭代

    另外一种执行循环的遍历方式是通过索引,如下实例:

    #!/usr/bin/python # -*- coding: UTF-8 -*- fruits = ['banana', 'apple', 'mango'] for index in range(len(fruits)): print '当前水果 :', fruits[index] print "Good bye!" 以上实例我们使用了内置函数 len() 和 range(),函数 len() 返回列表的长度,即元素的个数。range返回一个序列的数。

    Python pass 语句

    Python pass是空语句,是为了保持程序结构的完整性。

    pass 不做任何事情,一般用做占位语句。

    Python数学函数

    函数返回值 ( 描述 )abs(x)返回数字的绝对值,如abs(-10) 返回 10ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5cmp(x, y)如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045fabs(x)返回数字的绝对值,如math.fabs(-10) 返回10.0floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0max(x1, x2,...)返回给定参数的最大值,参数可以为序列。min(x1, x2,...)返回给定参数的最小值,参数可以为序列。modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。pow(x, y)x**y 运算后的值。round(x [,n])返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。sqrt(x)返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j

    Python数学常量

    常量描述pi数学常量 pi(圆周率,一般以π来表示)e数学常量 e,e即自然常数(自然常数)

    Python字符串格式化

    Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

    在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

    如下实例:

    #!/usr/bin/python print "My name is %s and weight is %d kg!" % ('Zara', 21) # %号可以格式化字符串

    三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

    一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。

    Python列表截取

    Python的列表截取与字符串操作类型,如下所示:

    L = ['spam', 'Spam', 'SPAM!']

    操作:

    Python 表达式结果 描述L[2]'SPAM!'读取列表中第三个元素L[-2]'Spam'读取列表中倒数第二个元素L[1:]['Spam', 'SPAM!']从第二个元素开始截取列表

    Python列表函数&方法

    Python包含以下函数:

    序号函数1cmp(list1, list2) 比较两个列表的元素2len(list) 列表元素个数3max(list) 返回列表元素最大值4min(list) 返回列表元素最小值5list(seq) 将元组转换为列表

    Python 函数

    # 定义函数 def printme( str ): "打印任何传入的字符串" print str; return; # 调用函数 printme("我要调用用户自定义函数!"); printme("再次调用同一函数");

    缺省参数

    调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:

    #!/usr/bin/python # -*- coding: UTF-8 -*- #可写函数说明 def printinfo( name, age = 35 ): "打印任何传入的字符串" print "Name: ", name; print "Age ", age; return; #调用printinfo函数 printinfo( age=50, name="miki" ); printinfo( name="miki" );

    匿名函数

    python 使用 lambda 来创建匿名函数。

    lambda只是一个表达式,函数体比def简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    语法

    lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression

    如下实例:

    #!/usr/bin/python # -*- coding: UTF-8 -*- # 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2; # 调用sum函数 print "相加后的值为 : ", sum( 10, 20 ) print "相加后的值为 : ", sum( 20, 20 )

    Python 异常处理

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。

    异常处理: 本站Python教程会具体介绍。断言(Assertions):本站Python教程会具体介绍。

    python标准异常

    异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行(通常是输入^C)Exception常规错误的基类StopIteration 迭代器没有更多的值GeneratorExit 生成器(generator)发生异常来通知退出StandardError所有的内建标准异常的基类ArithmeticError 所有数值计算错误的基类FloatingPointError 浮点计算错误OverflowError数值运算超出最大限制ZeroDivisionError除(或取模)零 (所有数据类型)AssertionError断言语句失败AttributeError对象没有这个属性EOFError 没有内建输入,到达EOF 标记EnvironmentError 操作系统错误的基类IOError 输入/输出操作失败OSError 操作系统错误WindowsError系统调用失败ImportError 导入模块/对象失败LookupError 无效数据查询的基类IndexError序列中没有此索引(index)KeyError映射中没有这个键MemoryError内存溢出错误(对于Python 解释器不是致命的)NameError未声明/初始化对象 (没有属性)UnboundLocalError 访问未初始化的本地变量ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象RuntimeError 一般的运行时错误NotImplementedError尚未实现的方法SyntaxErrorPython 语法错误IndentationError缩进错误TabErrorTab 和空格混用SystemError 一般的解释器系统错误TypeError对类型无效的操作ValueError 传入无效的参数UnicodeError Unicode 相关的错误UnicodeDecodeError Unicode 解码时的错误UnicodeEncodeError Unicode 编码时错误UnicodeTranslateErrorUnicode 转换时错误Warning 警告的基类DeprecationWarning关于被弃用的特征的警告FutureWarning 关于构造将来语义会有改变的警告OverflowWarning旧的关于自动提升为长整型(long)的警告PendingDeprecationWarning关于特性将会被废弃的警告RuntimeWarning 可疑的运行时行为(runtime behavior)的警告SyntaxWarning可疑的语法的警告UserWarning用户代码生成的警告

    什么是异常?

    当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

    try: <语句> #运行别的代码 except <名字>: <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,获得附加的数据 else: <语句> #如果没有异常发生

    实例

    下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:

    #!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except IOError: print "Error: 没有找到文件或读取文件失败" else: print "内容写入文件成功" fh.close()

    使用except而带多种异常类型(也可以不带任何异常)

    你也可以使用相同的except语句来处理多个异常信息,如下所示:

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

    try-finally 语句(应该是可以用来关闭连接)

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

    try: <语句> finally: <语句> #退出try时总会执行 raise

    触发异常

    我们可以使用raise语句自己触发异常

    Python 面向对象

    实例

    以下是一个简单的Python类实例:

    #!/usr/bin/python # -*- coding: UTF-8 -*- class Employee: '所有员工的基类' empCount = 0 #相当于java里面的静态变量(类变量) 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 empCount变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用Employee.empCount访问。第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法

    创建实例对象

    要创建一个类的实例,你可以使用类的名称,并通过__init__方法接受参数。

    "创建 Employee 类的第一个对象" emp1 = Employee("Zara", 2000) "创建 Employee 类的第二个对象" emp2 = Employee("Manni", 5000)

    访问属性

    您可以使用点(.)来访问对象的属性。使用如下类的名称访问类变量:

    emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount

    Python内置类属性

    __dict__ : 类的属性(包含一个字典,由类的数据属性组成) __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

    Python内置类属性调用实例如下:

    #!/usr/bin/python # -*- coding: UTF-8 -*- class Employee: '所有员工的基类' 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 print "Employee.__doc__:", Employee.__doc__ print "Employee.__name__:", Employee.__name__ print "Employee.__module__:", Employee.__module__ print "Employee.__bases__:", Employee.__bases__ print "Employee.__dict__:", Employee.__dict__

    类的继承

    面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

    需要注意的地方:继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。

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

    1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

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

    实例:

    #!/usr/bin/python # -*- coding: UTF-8 -*- class Parent: # 定义父类 parentAttr = 100 def __init__(self): print "调用父类构造函数" def parentMethod(self): print '调用父类方法' def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print "父类属性 :", Parent.parentAttr class Child(Parent): # 定义子类 def __init__(self): print "调用子类构造方法" def childMethod(self): print '调用子类方法 child method' c = Child() # 实例化子类 c.childMethod() # 调用子类的方法 c.parentMethod() # 调用父类方法 c.setAttr(200) # 再次调用父类的方法 c.getAttr() # 再次调用父类的方法

    你可以继承多个类

    class A: # 定义类 A ..... class B: # 定义类 B ..... class C(A, B): # 继承类 A 和 B .....

    方法重写

    如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

    实例:

    #!/usr/bin/python # -*- coding: UTF-8 -*- class Parent: # 定义父类 def myMethod(self): print '调用父类方法' class Child(Parent): # 定义子类 def myMethod(self): print '调用子类方法' c = Child() # 子类实例 c.myMethod() # 子类调用重写方法

    基础重载方法

    下表列出了一些通用的功能,你可以在自己的类重写:

    序号方法, 描述 & 简单的调用1__init__ ( self [,args...] ) 构造函数 简单的调用方法: obj = className(args)2__del__( self ) 析构方法, 删除一个对象 简单的调用方法 : dell obj3__repr__( self ) 转化为供解释器读取的形式 简单的调用方法 : repr(obj)4__str__( self ) 用于将值转化为适于人阅读的形式 简单的调用方法 : str(obj)5__cmp__ ( self, x ) 对象比较 简单的调用方法 : cmp(obj, x)

    运算符重载

    Python同样支持运算符重载,实例如下:

    #!/usr/bin/python class Vector: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self,other): return Vector(self.a + other.a, self.b + other.b) v1 = Vector(2,10) v2 = Vector(5,-2) print v1 + v2

    类属性与方法

    类的私有属性

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

    类的方法

    在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

    类的私有方法

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

    实例

    #!/usr/bin/python # -*- coding: UTF-8 -*- class JustCounter: __secretCount = 0 # 私有变量 publicCount = 0 # 公开变量 def count(self): self.__secretCount += 1 self.publicCount += 1 print self.__secretCount counter = JustCounter() counter.count() counter.count() print counter.publicCount print counter.__secretCount # 报错,实例不能访问私有变量

    python操作mysql数据库

    什么是MySQLdb?

    MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。

    实例:

    以下实例链接Mysql的TESTDB数据库:

    #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # 使用execute方法执行SQL语句 cursor.execute("SELECT VERSION()") # 使用 fetchone() 方法获取一条数据库。 data = cursor.fetchone() print "Database version : %s " % data # 关闭数据库连接 db.close()

    数据库插入操作

    以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:

    #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except: # Rollback in case there is any error db.rollback() # 关闭数据库连接 db.close()

    数据库查询操作

    Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

    fetchone(): 该方法获取下一个查询结果集。结果集是一个对象fetchall():接收全部的返回结果行.rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

    实例:

    查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:

    #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 查询语句 sql = "SELECT * FROM EMPLOYEE \ WHERE INCOME > '%d'" % (1000) try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印结果 print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \ (fname, lname, age, sex, income ) except: print "Error: unable to fecth data" # 关闭数据库连接 db.close()
    转载请注明原文地址: https://ju.6miu.com/read-677352.html

    最新回复(0)