美文网首页我爱编程
Python学习总结

Python学习总结

作者: 不是好程序 | 来源:发表于2017-08-02 14:54 被阅读78次

    Python 简介

    Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
    Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
    Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
    Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
    Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。

    Python 特点

    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
    2.易于阅读:Python代码定义的更清晰。
    3.易于维护:Python的成功在于它的源代码是相当容易维护的。
    4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
    5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
    6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
    7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
    8.数据库:Python提供所有主要的商业数据库的接口。
    9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
    10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

    Python基础语法

    编码

    默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:

    # -*- coding: cp-1252 -*-
    

    标识符

    • 第一个字符必须是字母表中字母或下划线'_'。
    • 标识符的其他的部分有字母、数字和下划线组成。
    • 标识符对大小写敏感。
      在Python 3中,非-ASCII 标识符也是允许的了。

    python保留字

    保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
    ['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中单行注释以 # 开头,实例如下:

    
    # 第一个注释
    print ("Hello, Python!") # 第二个注释
    执行以上代码,输出结果为:
    Hello, Python!
    多行注释可以用多个 # 号:
    #!/usr/bin/python3
    
    # 第一个注释
    # 第二个注释
    
    print ("Hello, Python!") 
    #执行以上代码,输出结果为:
    #Hello, Python!
    

    行与缩进

    python最具特色的就是使用缩进来表示代码块,不需要使用大括号({})。
    缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:

    if True:
        print ("True")
    else:
        print ("False")
    

    以下代码最后一行语句缩进数的空格数不一致,会导致运行错误:

    if True:
        print ("Answer")
        print ("True")
    else:
        print ("Answer")
      print ("False")    # 缩进不一致,会导致运行错误
    

    以上程序由于缩进不一致,执行后会出现类似以下错误:

     File "test.py", line 6
        print ("False")    # 缩进不一致,会导致运行错误
                                          ^
    IndentationError: unindent does not match any outer indentation level
    

    多行语句

    Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:

    total = item_one + \
           item_two + \
           item_three
    

    在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:

    total = ['item_one', 'item_two', 'item_three',
            'item_four', 'item_five']
    

    基本数据类型

    Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
    在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
    等号(=)用来给变量赋值。
    等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:

    #!/usr/bin/python3
     
    counter = 100          # 整型变量
    miles   = 1000.0       # 浮点型变量
    name    = "runoob"     # 字符串
     
    print (counter)
    print (miles)
    print (name)
    
    多个变量赋值

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

    a = b = c = 1
    

    以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
    您也可以为多个对象指定多个变量。例如:

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

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

    Python3 中有六个标准的数据类型:

    • Number(数字)
    • String(字符串)
    • List(列表)
    list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
    
    • Tuple(元组)
      元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。
    tinytuple = (123, 'runoob')
    
    • Sets(集合)
      集合(set)是一个无序不重复元素的序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
    student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
    
    • Dictionary(字典)
      列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
    tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
    

    字符串

    • python中单引号和双引号使用完全相同。
    • 使用三引号('''或""")可以指定一个多行字符串。
    • 转义符 ''
    • 自然字符串, 通过在字符串前加r或R。 如 r"this is a line with \n" 则\n会显示,并不是换行。
    • python允许处理unicode字符串,加前缀u或U, 如 u"this is an unicode string"。
      字符串是不可变的。
    • 按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
    word = '字符串'
    sentence = "这是一个句子。"
    paragraph = """这是一个段落,
    可以由多行组成"""
    

    空行

    函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
    空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
    记住:空行也是程序代码的一部分。

    等待用户输入

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

    #!/usr/bin/python3
    
    input("\n\n按下 enter 键后退出。")
    

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

    同一行显示多条语句

    Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:

    #!/usr/bin/python3
    
    import sys; x = 'runoob'; sys.stdout.write(x + '\n')
    

    执行以上代码,输入结果为:

    $ python3 test.py
    runoob
    

    多个语句构成代码组

    缩进相同的一组语句构成一个代码块,我们称之代码组。
    像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
    我们将首行及后面的代码组称为一个子句(clause)。
    如下实例:

    if expression : 
       suite
    elif expression : 
       suite 
    else : 
       suite
    

    Print 输出

    print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":

    #!/usr/bin/python3
    
    x="a"
    y="b"
    # 换行输出
    print( x )
    print( y )
    
    print('---------')
    # 不换行输出
    print( x, end=" " )
    print( y, end=" " )
    print()
    

    以上实例执行结果为:

    a
    b
    ---------
    a b
    

    import 与 from...import

    在 python 用 import 或者 from...import 来导入相应的模块。
    将整个模块(somemodule)导入,格式为: import somemodule
    从某个模块中导入某个函数,格式为: from somemodule import somefunction
    从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
    将某个模块中的全部函数导入,格式为: from somemodule import *
    导入 sys 模块

    import sys
    print('================Python import mode==========================');
    print ('命令行参数为:')
    for i in sys.argv:
        print (i)
    print ('\n python 路径为',sys.path)
    

    导入 sys 模块的 argv,path 成员

    from sys import argv,path  #  导入特定的成员
     
    print('================python from import===================================')
    print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path
    

    条件控制

    • if 语句
      Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。

    注意:
    1、每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块。
    2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
    3、在Python中没有switch – case语句。

    if age < 0:
        print("你是在逗我吧!")
    elif age == 1:
        print("相当于 14 岁的人。")
    elif age == 2:
        print("相当于 22 岁的人。")
    elif age > 2:
        human = 22 + (age -2)*5
        print("对应人类年龄: ", human)
    

    循环语句

    Python中的循环语句有 for 和 while。
    在Python中没有do..while循环。

    • while 循环
    count = 0
    while count < 5:
       print (count, " 小于 5")
       count = count + 1
    else:
       print (count, " 大于或等于 5")
    
    • for 语句
    sites = ["Baidu", "Google","Runoob","Taobao"]
    for site in sites:
       if site == "Runoob":
           print("菜鸟教程!")
           break
       print("循环数据 " + site)
    else:
       print("没有循环数据!")
    print("完成循环!")
    

    循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被break终止时不执行。

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

    函数

    你可以定义一个由自己想要功能的函数,以下是简单的规则:

    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
    • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进。
    • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    Python 定义函数使用 def 关键字,一般格式如下:

    def 函数名(参数列表):
        函数体
    
    # 可写函数说明
    def changeme( mylist ):
       "修改传入的列表"
       mylist.append([1,2,3,4]);
       print ("函数内取值: ", mylist)
       return
     
    # 调用changeme函数
    mylist = [10,20,30];
    changeme( mylist );
    print ("函数外取值: ", mylist)
    
    参数

    以下是调用函数时可使用的正式参数类型:

    • 必需参数
      必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
    • 关键字参数
      关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
      使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
    • 默认参数
      调用函数时,如果没有传递参数,则会使用默认参数
    • 不定长参数
      你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数

    变量作用域

    Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
    变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4中,分别是:

    • L (Local) 局部作用域
    • E (Enclosing) 闭包函数外的函数中
    • G (Global) 全局作用域
    • B (Built-in) 内建作用域

    以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

    total = 0; # 这是一个全局变量
    # 可写函数说明
    def sum( arg1, arg2 ):
        #返回2个参数的和."
        total = arg1 + arg2; # total在这里是局部变量.
        print ("函数内是局部变量 : ", total)
        return total;
    
    #调用sum函数
    sum( 10, 20 );
    print ("函数外是全局变量 : ", total)
    

    以上实例输出结果:

    函数内是局部变量 :  30
    函数外是全局变量 :  0
    

    面向对象

    • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
    • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
    • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
    • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
    • 实例变量:定义在方法中的变量,只作用于当前实例的类。
    • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
    • 实例化:创建一个类的实例,类的具体对象。
    • 方法:类中定义的函数。
    • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

    Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。
    对象可以包含任意数量和类型的数据。

    class MyClass:
        """一个简单的类实例"""
        i = 12345
        def f(self):
            return 'hello world'
     
    # 实例化类
    x = MyClass()
     
    # 访问类的属性和方法
    print("MyClass 类的属性 i 为:", x.i)
    print("MyClass 类的方法 f 输出为:", x.f())
    

    self代表类的实例,而非类
    类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

    class Test:
        def prt(self):
            print(self)
            print(self.__class__)
     
    t = Test()
    t.prt()
    

    以上实例执行结果为:

    <__main__.Test instance at 0x100771878>
    __main__.Test
    

    从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。
    self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:

    class Test:
        def prt(runoob):
            print(runoob)
            print(runoob.__class__)
     
    t = Test()
    t.prt()
    
    • 类的方法
      在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
    #类定义
    class people:
        #定义基本属性
        name = ''
        age = 0
        #定义私有属性,私有属性在类外部无法直接进行访问
        __weight = 0
        #定义构造方法
        def __init__(self,n,a,w):
            self.name = n
            self.age = a
            self.__weight = w
        def speak(self):
            print("%s 说: 我 %d 岁。" %(self.name,self.age))
     
    # 实例化类
    p = people('runoob',10,30)
    p.speak()
    

    参考菜鸟教程 http://www.runoob.com/python3/python3-tutorial.html

    相关文章

      网友评论

        本文标题:Python学习总结

        本文链接:https://www.haomeiwen.com/subject/sygelxtx.html