【Python爬虫与数据分析】进阶语法

目录

一、异常捕获

二、迭代器

三、拆包、聚合、映射

四、filter() 函数

五、匿名函数

六、闭包

七、装饰器


一、异常捕获

异常捕获可增强程序的健壮性,即程序在遇到遇到异常的时候并不会做中断处理,而是会将异常抛出,由程序员来分析异常和做异常处理。

a = 1
b = '2'try:print('运算开始')    # 执行print(a + b)
except Exception as e:print('运行报错')    # 执行print(e)            
else:print('未出现异常')  # 未执行
finally:print('运行完毕')    # 执行

二、迭代器

迭代器通常用于数据结构对象的遍历,可以通过for循环控制或者next()函数控制,next()函数中可以添加防报错提示,防止next()越界访问。

# 1 2 3 4 这四个数字可以组成多少个各个位数不同的数字
count = 0
_list = [1, 2, 3, 4]
for i in _list:for j in _list:for k in _list:for l in _list:# 利用集合的特性if len({i, j, k, l}) == 4:sum = i * 1000 + j * 100 + k * 10 + lprint(sum, end=' ')count += 1
print(f'\ncount = {count}')x = 'python'
y = iter(x)
print(y)    # <str_iterator object at 0x0000016D5FF99A80>
print(next(y, '已经迭代结束了'))   # p, 在next函数中的字符串,便是防报错提示
print(next(y, '已经迭代结束了'))   # y
print(next(y, '已经迭代结束了'))   # t
print(next(y, '已经迭代结束了'))   # h
print(next(y, '已经迭代结束了'))   # o
print(next(y, '已经迭代结束了'))   # n
print(next(y, '已经迭代结束了'))   # 已经迭代结束了
print(next(y, '已经迭代结束了'))   # 已经迭代结束了
print(next(y, '已经迭代结束了'))   # 已经迭代结束了

三、拆包、聚合、映射

# 拆包
i, j, k, l = [1, 2, 3, 4]
print(i, end=" ")
print(j, end=" ")
print(k, end=" ")
print(l)    # 1 2 3 4# 聚合, 短板效应
x = [1, 2]
y = [1, 2, 3]
z = ['hello', 'world', '!']
print(zip(x, y, z))     # <zip object at 0x000001E496F37500>
for e in zip(x, y, z):print(e, end=" ")   # (1, 1, 'hello') (2, 2, 'world') 32 9 100
print()# 映射,短板效应
x = [2, 3, 10, 2]
y = [5, 2, 2]
a = map(pow, x, y)  # pow()幂函数,pow(2, 5), pow(3, 2), pow(10, 2)
print(a)            # <map object at 0x000001B45AC2ADA0>
for e in a:print(e, end=" ")   # 32 9 100

四、filter() 函数

filter() 函数从数据结构对象obj中筛选出符合某个函数func()条件的数据

filter() 函数会根据所提供的func()函数可迭代对象obj的每个元素进行遍历,将遍历时的运算结果为真的元素,以迭代器的形式返回

def Even(n):return n % 2 == 0a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = list(filter(Even, a))
print(b)    # [2, 4, 6, 8, 10]

 

五、匿名函数

在Python语言中除了def语句用来定义函数之外,还可以使用匿名函数 lambda,它是Python一种生成函数对象的表达式形式。

  • 匿名函数通常是创建了可以被调用的函数,它返回了函数,而并没有将这个函数命名。
  • 普通函数需要去依靠函数名去调用,而匿名函数没有,所以需要把这个函数对象复制给某个变量进行调用
  • lambda有时被叫做匿名函数也就是这个原因,需要一个函数,又不想动脑筋去想名字,这就是匿名函数。
  • 匿名函数的 : 冒号前面的变量是形参,冒号后面的变量是返回值,返回值后面可以加条件判断语句对返回值做选择
func = lambda x, y : x + y
print(func(2, 5))   # 7func = lambda x : x if x % 2 == 0 else None
print(func(4))      # 4
print(func(5))      # None

六、闭包

闭包函数的必要条件

  • 闭包函数必须返回一个函数对象
  • 闭包函数返回的那个函数必须引用外部变量(一般不能是全局变量),而返回的那个函数内部不一定要return
def func():name = 'python'def inner():print('hello world')return namereturn innerf = func()
f()     # hello worldprint(f())
# hello world
# python

用闭包实现日志记录程序

import logging
def log_header(logger_name):logging.basicConfig(level=logging.DEBUG, format='%(asctime)s [%(name)s] %(levelname)s  %(message)s', datefmt='%Y-%m-%d %H:%M:%S')logger = logging.getLogger(logger_name)def _logging(something, level):if level == 'debug':logger.debug(something)elif level == 'warning':logger.warning(something)elif level == 'error':logger.error(something)else:raise Exception("I dont know what you want to do?" )return _loggingproject_1_logging = log_header('project_1')
project_2_logging = log_header('project_2')def project_1():#do somethingproject_1_logging('this is a debug info', 'debug')#do somethingproject_1_logging('this is a warning info', 'warning')# do somethingproject_1_logging('this is a error info', 'error')def project_2():# do somethingproject_2_logging('this is a debug info', 'debug')# do somethingproject_2_logging('this is a warning info', 'warning')# do somethingproject_2_logging('this is a critical info', 'error')project_1()
project_2()
#输出
2018-05-26 22:56:23 [project_1] DEBUG  this is a debug info
2018-05-26 22:56:23 [project_1] WARNING  this is a warning info
2018-05-26 22:56:23 [project_1] ERROR  this is a error info
2018-05-26 22:56:23 [project_2] DEBUG  this is a debug info
2018-05-26 22:56:23 [project_2] WARNING  this is a warning info
2018-05-26 22:56:23 [project_2] ERROR  this is a critical info

七、装饰器

闭包:本质也是函数,参数和返回值都是函数,对函数进行增强

语法糖:没有增强新功能,对语言没有影响,更方便程序员使用

import timedef CountTimeWrapper(func):# 闭包def ImproveFunc(*args, **kwargs):  # 增强函数应该把接收到的参数传给原函数start_time = time.perf_counter()ret = func(*args, **kwargs)  # 传入参数并记录返回值end_time = time.perf_counter()print(f'函数的执行时间为{end_time - start_time}')return retreturn ImproveFunc@CountTimeWrapper  # @闭包函数名,就是装饰器,自增强一次
def PrintOdds(lim=100):cnt = 0for i in range(lim):if i % 2 == 0:cnt += 1return cntif __name__ == '__main__':# PrintOdds = CountTimeWrapper(PrintOdds)# 装饰器等价于在第一次调用时执行上面语句print(PrintOdds())  # 打印程序运行时间和计算结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka 入门到起飞 - 核心概念(术语解释)

在kafka之旅&#xff0c;我们会大量讨论Kafka中的术语&#xff0c;那么就让我们先来了解一下这些核心概念 消息(Message)&#xff1a; kafka的数据单元称为消息&#xff0c;相当于DB里的一行数据或一条记录 消息由字节数组组成 批次&#xff1a; 生产者组一批数据再向kafka推送…

C++编程(四) —— OOP

文章目录 前言一、this指针二、构造和析构三、深拷贝浅拷贝浅拷贝深拷贝 编程实践 前言 什么是OOP思想&#xff1f; OOP语言的四大特征&#xff1a; 抽象&#xff0c;封装/隐藏&#xff0c;继承&#xff0c;多态 一、this指针 this指针》类》很多对象 一套成员方法是如何处…

网络层数据链路层协议—网络

文章目录 1.网络层协议—IP协议1.1协议字段 2.数据链路层协议2.1以太网2.2以太网帧2.3mtu2.4ARP协议 1.网络层协议—IP协议 1.1协议字段 &#xff08;1&#xff09;16位标识&#xff1a;mtu规定了需要数据报分片的大小&#xff0c;16位标识来标识原始数据 &#xff08;2&…

键盘控制鼠标移动

记录一下&#xff0c; windows用autohotkeys crtl 方向键 / 空格 &#xff1a;移动鼠标 / 鼠标左击 crtl shift 方向键 / 空格&#xff1a; 快速移动鼠标 / 鼠标右击 ^up::MouseMove,0,-75,0,r ^up::MouseMove,0,-15,0,r ^down::MouseMove,0,75,0,r ^down::MouseMove,0,…

深入学习 Redis - 深挖经典数据类型之 string

目录 前言 一、string 类型 1.1、操作命令 set / get &#xff08;设置 / 获取&#xff09; mset / mget&#xff08;批量 > 设置 / 获取&#xff09; setnx / setex / psetex &#xff08;设置时指定不同方式&#xff09; incr / incrby / decr / decrby/ incrbyfloat…

船舶中压配电板应用弧光保护,可解决母排故障短路问题,对于提高船舶电站的安全性、稳定性,降低经济损失具有重要意义。-安科瑞黄安南

摘要&#xff1a;船舶中压配电板弧光故障导致的设备损坏和停电事故&#xff0c;不仅会造成较大的经济损失&#xff0c;而且严重影响船舶电站的安全稳定运行&#xff0c;威胁船舶电站操作人员的安全。弧光保护是基于电力系统开关柜发生弧光故障时而设计的一套母线保护系统&#…

如何让C++代码也弥漫着炎热的感觉

写一段非常炎热的C代码 当然&#xff0c;这里有一个简单的炎热的C代码示例&#xff0c;它演示了一个循环打印输出的程序&#xff1a; #include <iostream> #include <ctime>int main() {std::cout << "炎热的夏日&#xff0c;热力四溢&#xff01;&quo…

分布式存储系统(Ceph)基础

存储基础 存储设备 DAS&#xff1a;IDE、SATA、SCSI、SAS、USBNAS&#xff1a;NFS、CIFSSAN&#xff1a;SCSI、FC SAN、iSCSI 存储内容包括元数据和数据&#xff0c;名称节点&#xff08;NameNode&#xff09;存放元数据&#xff0c;数据节点&#xff08;DataNode&#xff09…

【布局优化】基于遗传算法的车间布局优化 车间设施布局优化【Matlab代码#50】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 车间布局优化2. 基于GA的布局优化模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 车间布局优化 车间设施布置的规划一直是工业工程领域不断研究和探索的内容&am…

JavaWeb(5)——HTML、CSS、JS 快速入门

一、JavaScript 对象 二、JavaScript BOM对象 和 DOM对象 关于BOM主要对 Window 和 location 进行说明&#xff1a; 三、JavaScript 事件监听 事件绑定 常见事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

libcurl库使用实例

libcurl libcurl是一个功能强大的跨平台网络传输库&#xff0c;支持多种协议&#xff0c;包括HTTP、FTP、SMTP等&#xff0c;同时提供了易于使用的API。 安装 ubuntu18.04平台安装 sudo apt-get install libcurl4-openssl-dev实例 这个示例使用libcurl库发送一个简单的HTTP …

数据结构——树

数据结构——树 树&#xff08;Tree&#xff09;是一种常见的数据结构&#xff0c;用于存储具有层级关系的数据。树由一组称为节点&#xff08;Node&#xff09;的元素组成&#xff0c;节点之间通过边连接。其中一个节点被称为根节点&#xff08;Root&#xff09;&#xff0c;根…

数据库的基本查询(二)

目录 一、简单查询二、高级查询2.1 分页2.3 结果集排序2.4 去重 三、条件查询3.1 算术运算符3.2 比较运算符3.3 逻辑运算符3.4 按位运算符3.5 WHERE子句的注意事项 一、简单查询 # 查询t_emp表的所有字段 SELECT * FROM t_emp;# 查询t_emp表的指定字段 SELECT ename, empno FR…

谷歌Bard:ChatGPT之外的第三选择

2023年年初&#xff0c;为了对应ChatGPT方面的压力&#xff0c;谷歌Bard仓促上线&#xff0c;此后便进入了低调前行。目前为止已经迭代了9个版本&#xff0c;也就是在近期的版本更新中支持了中文&#xff08;简体/繁体&#xff09;语言&#xff0c;对国内用户可以说又友好了一步…

RabbitMQ log 文件过大 解决方案

log文件地址 C:\Users\Administrator\AppData\Roaming\RabbitMQ\log\rabbitlocalhost.log log文件作用 rabbitlocalhost.log MQ启动、连接日志 rabbitlocalhost-sasl.log saal用来记录Erlang相关的信息&#xff0c;例如查看Erlang崩溃的报告 RabbitMQ官网Log相关介绍 Log…

物理层——数据通信基础知识

1.典型的数据通信模型 2.数据通信的相关术语 2.1 三种通讯方式 2.2 数据传输方式 2.3 常用编码方式&#xff08;数字信号&#xff09; 曼彻斯特编码 将一个码元分成两个相等的间隔&#xff1b; 前一个间隔为 低电平 &#xff0c;后一个间隔为 高电平 表示码元1&#xff1b; 码…

el-dialog 添加loading;avue-form 表单插槽

效果: 第一步&#xff1a;custom-class"publishDialog" 新起一个类名 <el-dialog title"发布配置" custom-class"publishDialog" :visible.sync"publishDialogVisible" width"800px" :append-to-body"true":b…

实现高效数据处理的利器:Java Stream API 的妙用与性能优化

Java作为一门强大的编程语言&#xff0c;提供了丰富的工具和库来处理数据。其中&#xff0c;Java Stream API&#xff08;流式API&#xff09;是一项强大而灵活的特性&#xff0c;它能够简化数据处理过程&#xff0c;并提供高效的性能。本文将深入探索Java Stream API的使用方法…

babel兼容低版本游览器

文章目录 1. webpack项目的搭建2. babel 命令行使用3. babel的预设与编译器流程4. babel项目中配置4.1 babel-loader与插件的使用4.2 babel-preset使用 5. 游览器兼容性使用5.1 browserslist工具与编写规则5.2 browserslist配置5.3 优化babel的配置文件 6. polyfill6.1 useBuil…

Flutter——最详细(NavigationRail)使用教程

NavigationRail 简介 一个 Material Design 小部件&#xff0c;旨在显示在应用程序的左侧或右侧&#xff0c;以便在少量视图&#xff08;通常在三到五个视图之间&#xff09;之间导航。 使用场景&#xff1a; 通过Row属性&#xff0c;左侧或右侧菜单栏按钮 属性作用onDestinati…