最近看了《Python编程:从入门到实践》一书,强烈推荐作为Python的入门书籍,非常清晰易懂。之前已经有了Python开发的经验,所以就把书里关于Python的新发现总结一下。

在列表中添加元素

  • append()
    列表最后追加元素。

  • insert()
    在列表的任何位置添加新元素。需要指定新元素的索引和值。

    1
    2
    motorcycles = ['honda', 'yamaha', 'suzuki']
    motorcycles.insert(0, 'ducati')

在列表中删除元素

  • del
    如果知道要删除元素在列表中的位置,可以使用del语句。

    1
    2
    motorcycles = ['honda', 'yamaha', 'suzuki']
    del motorcycles[0]
  • pop()
    pop()可删除列表末尾的元素,并可以让你使用该元素
    1
    2
    motorcycles = ['honda', 'yamaha', 'suzuki']
    popped_motorcycle = motorcycles.pop()
    pop()还可以删除列表中任何位置的元素,只需在括号中指定要删除元素的索引即可。
    1
    2
    motorcycles = ['honda', 'yamaha', 'suzuki']
    motorcycles.pop(0)
  • remove()
    当你只知道要删除元素的值,不知道要删除元素所处的位置时,可以使用remove()方法。
    1
    2
    motorcycles = ['honda', 'yamaha', 'suzuki']
    motorcycles.remove('ducati')
    注意:remove()方法只能删除第一个指定的值,如果要删除的值在列表中出现多次,就需要使用循环判断是否删除所有这样的值

列表排序

  • sort()
    sort()方法会永久性地修改列表元素的排列顺序,默认按照字母顺序进行排序。

    1
    2
    cars = ['bmw', 'audi', 'toyota', 'subaru']
    cars.sort()

    将列表按照字母顺序相反的顺序排序。

    1
    2
    cars = ['bmw', 'audi', 'toyota', 'subaru']
    cars.sort(reverse=True)
  • sorted()
    要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可以使用sorted()方法。

    1
    2
    cars = ['bmw', 'audi', 'toyota', 'subaru']
    sorted(cars)

    要按照字母顺序相反顺序显示列表时,可向sorted()函数传递参数reverse=True。

    1
    2
    cars = ['bmw', 'audi', 'toyota', 'subaru']
    sorted(cars, reverse=True)
  • reverse()
    要反转列表元素的排列顺序,可使用方法reverse()。

    1
    2
    cars = ['bmw', 'audi', 'toyota', 'subaru']
    cars.reverse()

    注意:reverse()方法不是按照与字母顺序相反的顺序排列列表元素,只是反转列表元素的排列顺序。
    方法reverse()会永久性地改变列表元素的排列顺序,但可以随时恢复原来的排列顺序,只需再调用一次reverse()即可。

列表切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。
例如要输出列表的前三个元素:

1
2
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])

如果你没指定第一个索引,Python将自动从列表第一个元素开始。

1
2
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])

要让切片终止于列表末尾,也可使用类似语法。
1
2
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])

负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任何切片。
1
2
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])

要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这样可以为列表创建一个副本,即便修改副本也不会改变原列表。

数值列表

  • range()
    range()函数可以生成一系列数字。

    1
    2
    for value in range(1, 5):
    print(value)

    输出:

    1
    2
    3
    4
    1
    2
    3
    4

    函数range()从你指定的第一个值开始数,在到达你指定的第二个值后停止,所以输出不包含第二个值。
    使用range()函数可以指定步长,例如打印1~10内的含的偶数

    1
    even_numbers = list(range(2, 11, 2))

    用range()创建数字列表

    1
    numbers = list(range(1, 6))
  • 对数字列表执行简单统计计算
    1
    2
    3
    4
    digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    min(digits)
    max(digits)
    sum(digits)

元组

Python将不能修改的值称为不可变的,而不可变得列表被称为元组。元组使用圆括号来标识。

用户输入

函数input()可以让程序暂停运行,等待用户输入一些文本,获取用户输入后,Python将其存储在一个变量中,以方便你使用。

1
2
message = input("Tell me something, and I will repeat it back to you: ")
print(message)

  • __init__(self,[args])方法
    当创建类的实例时,Python都会自动运行此方法。self形参必不可少哦,还必须位于其他形参前面。

    为什么必须包含形参self?
    因为python创建实例时,将自动传入形参self,每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

  • 类的继承
    这里的示例中,ElectricCar类继承了Car类的方法和属性:

    1
    2
    3
    4
    5
    6
    7
    8
    class Car():
    def __init__(self, model, year):
    self.model = model
    self.year = year

    class ElectricCar(Car):
    def __init__(self, model, year):
    super().__init__(model, year)

    创建子类时,父类必须包含在当前文件中,且位于子类前面。
    super()是一个特殊函数,让子类和父类联系起来,这行代码会执行父类的__init__()方法,让子类包含父类的所有属性,父类也称超类,super由此而来。

  • 重写父类方法
    对于父类的方法,只要它不符合子类的需要,都可以进行重写。可以在子类中定义一个这样的方法,让它与要重写的父类方法同名即可,Python将不关注父类中的方法,只关注子类中重写的方法。

模块导入

  • 导入整个模块
    只需编写一条import语句并在其中指定模块名,就可以在程序中使用该模块的所有函数,可以使用下面的语法来使用其中的任何一个函数。

    1
    module_name.function_name()
  • 导入特定的函数
    导入方法如下:

    1
    2
    3
    4
    from module_name import function_name

    # 导入多个函数
    from module_name import function_0, function_1, function_2

    因为已经显式地导入了函数,因此调用它时只需指定其名称。

  • 用as给函数指定别名

    1
    2
    from module_name import function_name as fn   
    fn()
  • 用as给模块指定别名
    1
    2
    3
    import module_name as mn
    mn.fun1()
    mn.fun2()
  • 导入模块中所有函数
    使用星号(*)运算符可以让Python导入模块中的所有函数。
    1
    2
    3
    from module_name import *
    fun1()
    fun2()
    星号将模块中的每个函数都复制到这个程序文件中,所以可以通过名称调用每个函数。然而,使用并非自己编写的大型模块时,最好不要采用这种导入方法:如果模块中有函数的名称与你项目中使用的名称相同,可能导致意想不到的结果。Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。

文件和异常

  • 读取整个文件内容
    pi_digits.txt使我们要读取的文件,脚本文件read_file.py内容如下:

    1
    2
    3
    with open('pi_digits.txt') as file_object:
    content = file_object.read()
    print(content)

    open()函数参数为要打开文件的文件名,返回一个文件对象,并存储在一个变量file_object中。

    关键字with在不再需要访问文件后将其关闭。你只需要打开文件,在需要时使用文件,Python会在适合的时候自动关闭它。当然,你也可以使用close()关闭来关闭文件,但是一旦程序出现bug,导致close()未执行,文件将不会执行,有可能导致文件数据丢失或受损。如果过早调用close(),你会发现需要使用文件时,文件已关闭,便会导致错误发生。

    对文件对象调用read()方法,便可以读取文件内容。
    打印出的结果会多出一个空行,这是为什么呢?read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来就是一个空行,所以要删除多出来的空行,可以如下解决:

    1
    print(content.rstrip())
  • 读取文件各行内容

    1
    2
    3
    4
    5
    6
    7
        with open(filename) as file_object:
    lines = file_object.readlines()

    for line in lines:
    print(line.rstrip())
    ```
    * 写入文件

    filename = ‘programming.txt’
    with open(filename, ‘w’) as file_object:

    file_object.write("I love programming.\n")
    
    1
    2
    3
    4
    5
        第二个实参‘w’告诉Python,我们要以写入模式打开这个文件。打开文件时,可指定读取模式('r'),写入模式('w'),附件模式('a'),或者能够读取和写入文件的模式('r+')。如果省略了模式实参,Python将以默认的只读模式打开文件。如果你要写入的文件不存在,函数open()将自动创建它。然后以写入模式打开文件时要小心,因为如果指定文件已存在,Python将在返回文件对象前清空该文件。

    * 存储数据
    有时关闭程序,也需要将数据进行存储。一种简单的方式是使用json来存储数据,模块json可以将Python数据结构转存到文件中,并在程序运行时加载文件中的数据。
    `json.dump()`、`json.load()`用于进行json的数据存储和读取。

    import json

    numbers = [1, 2, 3, 4]
    filename = ‘numbers.json’
    with open(filename, ‘w’) as f_obj:

    json.dump(numbers, f_obj)
    
    1
    函数`dump()`接受两个参数,要存储的数据以及用于存储数据的文件对象。

    import json

    filename = numbers.json
    with open(filename) as f_obj:

    numbers = json.load(f_obj)
    

    print(numbers)
    `

测试函数

  • setup()函数
    在对一个类编写测试用例时,为了只创建一次实例,并在每个测试方法中使用实例,我们可以使用setup()函数创建实例。在TestCase类中包含setup()方法,Python将先运行它,在运行各个以test_打头的函数,这样在你编写的每一个测试方法中都可以使用在方法setup()中创建的对象了。

本篇内容随时更新。。。