Python基础小结
最近看了《Python编程:从入门到实践》一书,强烈推荐作为Python的入门书籍,非常清晰易懂。之前已经有了Python开发的经验,所以就把书里关于Python的新发现总结一下。
在列表中添加元素
append()
列表最后追加元素。insert()
在列表的任何位置添加新元素。需要指定新元素的索引和值。1
2motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
在列表中删除元素
del
如果知道要删除元素在列表中的位置,可以使用del语句。1
2motorcycles = ['honda', 'yamaha', 'suzuki']
del motorcycles[0]- pop()
pop()可删除列表末尾的元素,并可以让你使用该元素。pop()还可以删除列表中任何位置的元素,只需在括号中指定要删除元素的索引即可。1
2motorcycles = ['honda', 'yamaha', 'suzuki']
popped_motorcycle = motorcycles.pop()1
2motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.pop(0) - remove()
当你只知道要删除元素的值,不知道要删除元素所处的位置时,可以使用remove()方法。注意:remove()方法只能删除第一个指定的值,如果要删除的值在列表中出现多次,就需要使用循环判断是否删除所有这样的值1
2motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.remove('ducati')
列表排序
sort()
sort()方法会永久性地修改列表元素的排列顺序,默认按照字母顺序进行排序。1
2cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()将列表按照字母顺序相反的顺序排序。
1
2cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)sorted()
要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可以使用sorted()方法。1
2cars = ['bmw', 'audi', 'toyota', 'subaru']
sorted(cars)要按照字母顺序相反顺序显示列表时,可向sorted()函数传递参数reverse=True。
1
2cars = ['bmw', 'audi', 'toyota', 'subaru']
sorted(cars, reverse=True)reverse()
要反转列表元素的排列顺序,可使用方法reverse()。1
2cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()注意:reverse()方法不是按照与字母顺序相反的顺序排列列表元素,只是反转列表元素的排列顺序。
方法reverse()会永久性地改变列表元素的排列顺序,但可以随时恢复原来的排列顺序,只需再调用一次reverse()即可。
列表切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。
例如要输出列表的前三个元素:
1 | players = ['charles', 'martina', 'michael', 'florence', 'eli'] |
如果你没指定第一个索引,Python将自动从列表第一个元素开始。1
2players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])
要让切片终止于列表末尾,也可使用类似语法。1
2players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])
负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任何切片。1
2players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这样可以为列表创建一个副本,即便修改副本也不会改变原列表。
数值列表
range()
range()函数可以生成一系列数字。1
2for value in range(1, 5):
print(value)输出:
1
2
3
41
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
4digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
min(digits)
max(digits)
sum(digits)
元组
Python将不能修改的值称为不可变的,而不可变得列表被称为元组。元组使用圆括号来标识。
用户输入
函数input()可以让程序暂停运行,等待用户输入一些文本,获取用户输入后,Python将其存储在一个变量中,以方便你使用。
1 | message = input("Tell me something, and I will repeat it back to you: ") |
类
__init__(self,[args])方法
当创建类的实例时,Python都会自动运行此方法。self形参必不可少哦,还必须位于其他形参前面。为什么必须包含形参self?
因为python创建实例时,将自动传入形参self,每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。类的继承
这里的示例中,ElectricCar类继承了Car类的方法和属性:1
2
3
4
5
6
7
8class 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
4from module_name import function_name
# 导入多个函数
from module_name import function_0, function_1, function_2因为已经显式地导入了函数,因此调用它时只需指定其名称。
用as给函数指定别名
1
2from module_name import function_name as fn
fn()- 用as给模块指定别名
1
2
3import module_name as mn
mn.fun1()
mn.fun2() - 导入模块中所有函数
使用星号(*)运算符可以让Python导入模块中的所有函数。星号将模块中的每个函数都复制到这个程序文件中,所以可以通过名称调用每个函数。然而,使用并非自己编写的大型模块时,最好不要采用这种导入方法:如果模块中有函数的名称与你项目中使用的名称相同,可能导致意想不到的结果。Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。1
2
3from module_name import *
fun1()
fun2()
文件和异常
读取整个文件内容
pi_digits.txt
使我们要读取的文件,脚本文件read_file.py
内容如下:1
2
3with 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
7with 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()
中创建的对象了。
本篇内容随时更新。。。