个人随手自学笔记--python3入门及基础知识点(5)—— 枚举、闭包、表达式、函数、装饰器、小爬虫

枚举

用法:

1. 定义枚举要导入enum模块

2.枚举定义用class关键字,继承Enum类

3.定义枚举时,成员名称不允许重复

4.如果枚举中存在相同值得成员是,在通过值获取枚举成员时,只能获取到第一个成员

5.取值用value,取名用name

from enum import Enum

class VIP(Enum):
	one = 1
	two = 2
	three = 3
	four = 4

print(VIP.one.value) #输出1
print(VIP.one.name)  #输出one

闭包

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。

def f1():
	a = 10
	def f2(x):
		return a*x
	return f2



f = f1()
print(f(2))# 20

def f1(c):
	def f2(x):
		nonlocal c
		c = c + x
		return c
	return f2

f = f1(0)
print(f(3))   //输出3
print(f(5))   //输出8
print(f(8))	  //输出16

匿名函数 lambda

f = lambda x,y : x+y
print(f(1, 2))

三元表达式

条件为真时返回的结果  if   条件判断   else   条件为假时的返回结果

x = 2
y = 3
r = x if x > y else y
print(r) 

map


list_x = [1,2,3,4,5,6,7,8]

list_y = [1,2,3,4,5,6,7,8]

r = map(lambda x,y:x*x+x,list_x,list_y)//循环执行square方法对list_x列表

print(list(r))#[2,6,12,20,30,42,56,72]

reduce

连续计算

from functools import reduce

#连续计算,连续调用lambda
list_x = ['1','2','3','4','5']
r = reduce(lambda x,y:x+y, list_x, 'aa')
print(r)   #输出aa12345

filter(过滤)

list_x = [1,0,1,0,0,1]
res = filter(lambda x: True if x==1 else False, list_x)
print(list(res))

装饰器

import time
def decorator(func):
	def wrapper(*args,**kw):
		print(time.time())
		func(*args,**kw)
	return wrapper

@decorator
def f1(func_name1,func_name2):
	print('this is a function'+ func_name1 + 'sss' + func_name2)
f1('aaa','bbb')
#输出1533288851.9578314   this is a functionaaasssbbb

小爬虫

明确目标

找到数据对应的网页

分析网页的结构找打数据所在的标签位置

模拟HTTP请求,想服务器发送这个请求,获取到服务器返回给我们的HTML

用正则表达式提取我们要的数据

import re
from urllib import request


class Spider():
	url = 'https://www.panda.tv/cate/kingglory?pdt=1.24.s1.55.40pcvf1piqr'
	root_pattern = r'<div class="video-info">([\s\S]*?)</div>'
	num_pattern = r'<span class="video-number">([\s\S]*?)</span>'
	name_pattern = r'</i>([\s\S]*?)</span>'

	'''
	利用模块爬取指定url的内容
	'''                                                                         
	def __fetch_content(self):
		r = request.urlopen(Spider.url)
		htmls = r.read()
		return htmls

	'''
	利用正则提取内容
	'''
	def __analysis(self,htmls):
		new_htmls = re.findall(Spider.root_pattern, htmls)
		authors = []
		for x in new_htmls:
			name = re.findall(Spider.name_pattern,x)
			num = re.findall(Spider.num_pattern,x)
			author = {'name':name,'num':num}
			authors.append(author)
		return authors


	'''
	精简内容
	'''
	def	__refine(self,authors):
		l = lambda author:{
			'name':author['name'][0].strip(),
			'num':author['num'][0]
		}

		return list(map(l,authors))

	'''
	排序
	'''
	def __sort(self,authors):
		authors = sorted(authors,key=self.__sort_number,reverse=True)
		return authors

	def __sort_number(self,authors):
		r = re.findall('\d*',authors['num'])
		num = float(r[0])
		if "万" in authors['num']:
			num *= 10000
		return num


	'''
	展示
	'''
	def __show(self,info):
		for x in range(0,len(info)):
			print('NO.'+ str(x) + info[x]['name'] + '-----------' + info[x]['num'])

	'''
	入口
	'''
	def go(self):
		htmls = self.__fetch_content() 
		htmls = str(htmls,encoding='utf-8')
		authors = self.__analysis(htmls)
		authors = self.__refine(authors)
		ret = self.__sort(authors)
		self.__show(ret)


Spider = Spider()
Spider.go()

Beautiful Soup   Scrapy   爬虫框架

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一捧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值