视觉艺术

使用Python的scrapy框架进行爬虫(1)

2020-03-27  本文已影响0人  __method__

Python中的列表

列表和C语言中的数组很像,但列表的功能更强大,可以存储不同类型的数据
列表是Python中内置有序可变序列,列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开;
一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、字典以及其他自定义类型的对象。

weapon_list = ['98k', 'M4A1', 'SCAR', 'AWM']
print(weapon_list)
# 访问其中的元素,使用索引的形式,索引是从零开始
print(weapon_list[3])

列表元素的增加append()
向列表尾部追加一个元素,不改变其内存首地址,属于原地操作。
例如:

weapon_list = ['98k', 'M4A1', 'SCAR', 'AWM']
print('列表添加前', weapon_list)
weapon_list.append('MP5')
print('列表添加后', weapon_list)

列表添加后 ['98k', 'M4A1', 'SCAR', 'AWM', 'MP5']

删除列表中的指定位置上的元素, 可以使用del关键字

del weapon_list[0]
print('列表删除后', weapon_list)

测试列表中是否存在某元素 in

print('AWM' in weapon_list)
# True

len()

返回列表中的元素个数,同样适用于元组、字典、集合、字符串等

print(len(weapon_list))

遍历列表的三种方式

a = ['a','b','c','d','e','f']
for i in a:
    print(i)

for i in range(len(a)):
    print(i,a[i])
for i,ele in enumerate(a):
    print(i,ele)

列表推导式

列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。

语法形式:[表达式 for 变量 in 序列或迭代对象]

列表推导式在逻辑上相当于一个循环,只是形式更加简洁。

lis = [i for i in range(100)]
print(lis)

使用列表推导式实现嵌套列表的平铺

>>> vec = [[1,2,3], [4,5,6], [7,8,9]]

>>> [num for elem in vec for num in elem]

[1, 2, 3, 4, 5, 6, 7, 8, 9]

列表切片

切片操作不是列表特有的,python中的有序序列都支持切片,如字符串,元组。

切片的返回结果类型和切片对象类型一致,返回的是切片对象的子序列,如:对一个列表切片返回一个列表,字符串切片返回字符串。

  li=["A","B","C","D"]

格式: li[start : end : step]

start是切片起点索引,end是切片终点索引,但切片结果不包括终点索引的值。step是步长默认是1。

t=li[0:3]        ["A","B","C"]        #起点的0索引可以省略,t=li[:3]

       t=li[2: ]        ["C","D"]           #省略end,则切到末尾

      t=li[1:3]        ["B","C"]

      t=li[0:4:2]       ["A","C"]       #从li[0]到li[3],设定步长为2。

元组

元组属于不可变序列(元素集合),一旦创建,用任何方法都不可以修改其元素。从形式上,元组的所有元素放在一对圆括号中,元素之间用逗号分隔。

>>>x = (1,2,3)                               #直接把元组赋值给一个变量

>>>x

(1,2,3)

元组与列表的区别

元组的优点

字典

字典定义

字典(dictionary)是包含若干“键:值”元素的无序可变序列,字典中的每个元素包含“键”和“值”两部分,定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号“{}”中。字典中的键可以为任意不可变数据,比如整数、实数、字符串、元组等等。
字典的创建

>>> a_dict = {'server': 'db.neuedu.com', 'database': 'mysql'}

>>> a_dict

{'database': 'mysql', 'server': 'db.neuedu.com'}

>>> x = {}                     #空字典

>>> x

{}

字典元素的读取

以键作为下标可以读取字典元素,若键不存在则抛出异常

aDict = {'name':'赵四', 'sex':'male', 'age':37}
print(aDict['name'])

字典元素的添加和修改

当以指定键为下标为字典赋值时,若键存在,则可以修改该键的值;若不存在,则表示添加一个键、值对。

aDict['addr'] = '象牙山'
print(aDict)
aDict['name'] = '谢广坤'
print(aDict) # {'name': '谢广坤', 'sex': 'male', 'age': 37}

字典删除

del aDict['age']
print(aDict)

集合

集合是无序可变序列,使用一对大括号界定,元素不可重复,同一个集合中每个元素都是唯一的。集合中只能包含数字、字符串、元组等不可变类型的数据,而不能包含列表、字典、集合等可变类型的数据。
创建一个集合

a = {3, 5}
type(a)

Python中的函数

函数一词起源于数学,但是在编程中的函数和数学中的有很大不同。编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块。


我们在学习过程中已经使用过一些python内建的函数,如print()。但我们也可以自己创建函数,这被叫做用户自定义函数。

使用函数的好处

函数的定义格式

image.png

函数名的命名规则:

函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号; 函数名是区分大小写的。 函数名不能是保留字




递归函数

斐波那契数列:

使用递归实现斐波那契数列:

使用循环实现斐波那契数列:

Python中的类

面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,比如学生这个抽象的事物,可以用一个Student类来表示。而实例是根据类创建出来的一个个具体的“对象”,每一个对象都从类中继承有相同的方法,但各自的数据可能不同

以Student类为例,在Python中,定义类如下

class Student(object):
    pass
#(Object)表示该类从哪个类继承下来的,Object类是所有类都会继承类。

实例:定义好了类,就可以通过Student类创建出Student的实例,创建实例是通过类名+()实现:

student = Student()

由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法init方法,例如在Student类时,把name、score等属性绑上去:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

这里注意:(1)、init方法的第一参数永远是self,表示创建的类实例本身,因此,在init方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)、有了init方法,在创建实例的时候,就不能传入空的参数了,必须传入与init方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去

lass Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def print_score(self):
        print("学生名字是{}, 分数是{}".format(self.name, self.score))


stu = Student('赵四', 88)
stu.print_score()
上一篇下一篇

猜你喜欢

热点阅读