浑浑噩噩的一天

多线程类的写法

先定义一个类并继承threading.Thread类,将该类定义为一个线程。在该类中,可以使用__init__(self)方法对线程进行初始化,在run(self)方法中写上该线程要执行的程序。我们可以声明多个这样的类来构建多个线程并通过对应线程对象的start()方法启动对应的线程。

举例:

每个线程的作用
线程1专门获取对应网址并处理为真实网址,并将网址写入队列urlqueue中,该队列专门用来存放具体文章的网址
线程2和线程1并行执行,从线程1提供的文章网址中依次爬取对应文章信息并处理,处理后将我们需要的结果写入对应的本地文件中
线程3主要用于判断程序是否完成,因为若没有一个总体控制的线程,即使线程1、2执行完,也不会退出程序。这个线程专门来实现总体控制,每次延时60秒,延时后且存放网址的队列urlqueue中没有了网址数据,说明线程2已经get到全部网址,即此时已经完全爬取完成

round函数

产生四舍五入浮点数 # # python中的round函数大于5才入么.等于5不入,大于5才入
原来int无法转浮点数的字符串类型,需将浮点数字符串先转化为浮点数在转化为int型

字符串的join()函数

join后跟可迭代的数据类型,然后遍历迭代可迭代数据类型,数据类型的元素一定要为字符传

二维数组采用生成器构建

# 确定的二维数组
multilist = [[0 for i in range(3)] for j in range(5)] # 5行3列
for i in range(5):
    for j in range(3):
        multilist[i][j] = i*j # 行列次数弄混,就容易出现index out of range
print(multilist)

在谈sort()与sorted()

.sort是列表固有的属性
sort前面是可迭代对象;.sort()方法返回None,他直接作用在前面的对象上

items = [x for x in input().split(',')]
items.sort() 
sorted括号中是可迭代对象

words = [word for word in s.split(" ")]
print(''.join(sorted(list(set(words)))))
他还可以传入第二个参数,用于比较的元素,可用key = 关键字(也可用函数lambda x :x[1]),reverse=false是默认的,升序

L = [('a',1),('b',2),('d',4),('c',3)]
b = sorted(L,key=lambda x:x[1]) # x代表的是L中的元素,1是x中元素的索引
print(b)

对于sorted和sort的第二个参数定义的函数,并按照函数进行排序,目前只能会使用匿名函数,
lambda x:x[1];分号前的为函数的输入,分号后的为函数函数的输出。sorted需要的就是输出,也就是x[1]

对于字典的排序

c = {1:'2',2:'3',3:'1'}
# .sort是列表固有的属性,是的,并且它返回直接作用在可迭代对象上,返回None
# print(c.sort()) # 'dict' object has no attribute 'sort'
# 对于字典排序只能将其转化位列表么
d = sorted(c.items(),key = lambda x:x[0],reverse=True) # 默认排序字典的第一个元素
print(d)
posted @ 2021-11-04 19:32  索匣  阅读(42)  评论(0编辑  收藏  举报