Python学习笔记之模块

news2024/10/7 20:33:17

可迭代对象

概念:更新换代,每次更新都是根据上一次的结果作为基础。

有哪些:字符串,列表,字典,元组,集合,文件对象,特殊函数(生成器)

迭代器对象

特点:

可调用__iter__和__next__内置方法

如何将可迭代对象变成迭代器对象:

可迭代对象调用__iter__方法就会变成迭代器对象
迭代器对象如果再次调用__iter__方法还是迭代器对象本身

作用:节省存储空间,类似range

迭代器取值特征:从左往右,取一个少一个

迭代器主要应用:无序容器的数据类型

异常处理

概念:代码运行中出现异常,报错,并停止代码的运行。

异常信息的组成部分:异常的定位,异常的类型,异常的提示。

常见异常的分类:

1.NameError		名字错误(变量名未定义)
2.IndexError     索引错误(超出索引值)
3.KeyError		 键错误
4.ValueError	 值错误
5.TypeError		 类型错误(不满足某些特定类型的要求)

异常处理语法结构:

	try:
    	可能会出错的代码
  except 出错的类型1 as e:
    	针对出错类型的解决措施
  except 出错的类型2 as e:
    	针对出错类型的解决措施 
  except 出错的类型3 as e:
    	针对出错类型的解决措施
  except 万能异常(Exception) as e:
    	统一出错的解决措施
  else:
    	可能会出错的代码没有出错 执行完毕后就会走else
  finally:
    	无论上面怎么走 最后都要走finally

使用准则:被检测的代码越少越好,使用该功能越少越好

for循环本质

res = 可迭代对象.__iter__()
while True:
  try:
  	print(res.__next__)
  except StopIteration as e:
    break
"""万能异常可以捕获常见的异常类型 但是并不是所有"""

今日学习内容

生成器对象(自定义迭代器)

生成后还是一个迭代器,可以调用

__iter__和__next__方法

def 生成器名():
  被迭代的代码
  yield 返回值  # 类似return,但是是作为生成器的关键词
  被迭代的代码
  
  作用:节省资源空间
  转换生成器方式:调用一次,没调用前只是一个普通函数
  取值:通过__next__,取一个少一个
  报错:内部没有值,还重复取值操作就会报错
  yield关键字特征:内部如果有多个yield关键字,执行一次__next__将会返回yield后面的值,然后将代码暂停在yield关键词处。再次执行yield时,将会基于上次位置,迭代取值出下一个元素。

自定义range方式

range就是一个数据集,所以自然也是一个可迭代对象
for i in range(100) 从0到99的数据集,顾头不顾尾

现在需要用生成器模拟range方法,需要满足range三个参数的功能

def my_range(start, end=None, step=1):
    if not end:  # 如果没有给end传值
        end = start  # end将会使用第一个位置参数
        start = 0  # 将第一个参数为0
    while start < end:  # 如果起始数小于最大值,证明用户传了两个值
        yield start  # 返回起始值
        start += step  # 起始值每次增加间隔值

yield关键字作用

除了:

  1. 在函数体代码中出现 可以将函数变成生成器
  2. 在执行过程中 可以将后面的值返回出去 类似于return
  3. 还可以暂停住代码的运行
  4. 还可以接收外界的传值
def eat(name):
    print(f'{name}在学习')
    while True:
        food = yield
        print(f'{name}在学习{food}')
res = eat('eason')
res.send('python')  # 可以给yield传值 并且自动调用一次__next__方法

生成表达式

作用:节省空间(前期代码量不大时,用处不大,适用于后期优化)

res = (i for i in 'eason') 循环将字符串转换成一种迭代器,
然后使用__next__迭代取。

面试小难题,周末花时间研究一下
# 普通的求和函数
def add(n, i):
    return n + i
# 生成器对象 返回 0 1 2 3
def test():
    for i in range(4):
        yield i
# 将test函数变成生成器对象
g = test()
# 简单的for循环
for n in [1, 10]:
    g = (add(n, i) for i in g)
    """
    第一次for循环
        g = (add(n, i) for i in g)
    第二次for循环
        g = (add(10, i) for i in (add(10, i) for i in g))
    """
res = list(g)  # list底层就是for循环 相当于对g做了迭代取值操作
print(res)

#A. res=[10,11,12,13]
#B. res=[11,12,13,14]
#C. res=[20,21,22,23]
#D. res=[21,22,23,24]
"""正确答案是C  诀窍就是抓n是多少即可"""

模块

python拥有大量非常好使用的模块,非常适合Python工程师使用

类似之前使用过的一个时间模块
import time 导入时间模块,time.time 调用模块

鸡哥:作为一名python工程师CV大法都要比其他工程师练得更加炉火纯青!!!

概念:模块就好比如一个已经完善并蕴含丰富功能的函数的整合,这就是模块。

功能:数不胜数,集齐丰富,节省精力

来源:

  1. 内置模块,解释器自带
  2. 自定义模块,类似函数,自己写代码,封装成模块
  3. 第三方模块,网上前辈发布,下载后使用

表现形式

  1. 使用python代码编写的py文件
  2. 多个py文件组成的文件夹(包)
  3. 已被编译为共享库或DLL的c或C++扩展
  4. 使用C编写并链接到python解释器的内置模块

模块的两种导入方式

要想使用模块,必须先进行导入

第一种:import 模块名称    
列入:
import 文件
print(文件.变量名)
文件.函数名()

这里面,调用变量名或者函数名前,只要加上了被调用过的模块的模块名,便是在调用模块内部的变量或者函数名。

1.执行当前模块时,会产生一个当前模块的名称空间
2.执行import句式时,会将模块内的代码导入这个模块的名称空间中
3.在当前模块的名称空间中,产生模块功能的名字,指向模块的名称空间
4.通过功能名字去调用模块名称空间中的代码。

如果不使用import,python是无法辨别你所调用的到底是什么,如果有相同的函数名,那么python会调用全局名称空间中的代码,使用模块中的功能,前缀一定要加上该模块的名称。

相同的模块只需要被导出一次,全局都可以使用。



第二种:from···import···句式
from 模块名 import 模块内的功能或函数名,变量名

与第一种不相同的地方在于,只有被import后面点出名字的功能或函数名,变量名,才可以被使用。

1.执行当前模块时,会产生一个当前模块的名称空间
2.执行import后点出的名字,将其加载到当前模块的名称空间中
3.通过调用import中存在的名字,使用其功能或代码

使用该模块调用方法,调用模块内名字时,不需要加模块前缀名,直接使用就可以。
所以就会导致名字冲突,调用该方法一定要注意名称冲突问题。

调用模块功能的补充

可以给模块功能赋予新的变量名,非常实用

import 模块名 as 变量名
之后就可以直接使用变量名去调用这个模块。

from 模块名 import 模块内名字 as 变量名
之后同样可以使用变量名去调用这个模块内的名字。

连续调用多个模块或模块内部名字

import 模块1,模块2,模块3
连续导入多个模块,模块之间建议要有较相似的功能部分,否则建议分开,代码一定要做到尽量简洁明了。

from 模块 import 模块内名字1,模块内名字2,模块内名字3
单个模块下,可自由调用内部名字

通用导入

from 模块名 impore *
*号可以将from方法中的所有函数名调出
from 模块名 import
这种也可以讲模块中的所有名字调出

 

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

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

相关文章

软件测试/测试开发 | AppCrawler 自动遍历测试工具实践(一)

本文为霍格沃兹测试学院学院学员课程学习笔记。 公众号搜索&#xff1a;TestingStudio 霍格沃兹的干货都很硬核 AppCrawler 是由霍格沃兹测试学院校长思寒开源的一个项目&#xff0c;通过名字我们大概也能猜出个方向&#xff0c;Crawler 是爬虫的意思&#xff0c;App 的爬虫&am…

GitHub上标星79K的LeetCode算法小抄开放下载了

在大厂面试中我们不可避免的会考到算法&#xff0c;为什么大厂一定要考察算法呢&#xff1f;因为它包含了太多的逻辑思维&#xff0c;可以考察你思考问题的逻辑和解决问题的能力&#xff1b;这一点也是面试官比较看重的&#xff0c;因为它可以反映出你的潜力&#xff0c;我曾经…

Qt布局管理器(QHBoxLayout,QVBoxLayout)

文章目录布局管理器是什么使用代码添加布局管理器QVBoxLayoutQHBoxLayout使用ui文件添加布局管理器布局管理器的嵌套提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 布局管理器是什么 可以把一些组件按一定的次序排列&#xff0c;这就是布局管理器。 他…

反欺诈指南|网购平台如何保障公平交易

网购平台是社会零售重要的组成部分。国家统计数据显示&#xff0c;2021年&#xff0c;全国实物商品网上零售额达10.8万亿元&#xff0c;占社会消费品零售总额的比重为24.5%&#xff0c;对社会消费品零售总额增长的贡献率为23.6%。 网购平台促成买卖双方交易而建立的平台&#…

OpenBMI运动想象--认知科学实践设计

目录 一、简要介绍 &#xff08;一&#xff09;材料与准备工具 数据集下载 工具箱下载 参考 &#xff08;二&#xff09;OpenBMI工具箱介绍 &#xff08;三&#xff09;数据集详细介绍 数据拆分 数据解读 二、预处理 &#xff08;一&#xff09;目标 &#xff08;二&#xff09…

Linux安装和入门

文章目录1、课程介绍2、为什么需要Linux3、Linux简介3.1、什么事Linux3.2、Linux优点3.3、常见的Linux系统3.4、小结4、虚拟机安装4.1、引入4.2、常见的虚拟机软件4.3、安装vmware4.4、vmware常用操作4.4.1、全局配置虚拟机(Linux系统)存储位置4.4.2、虚拟机操作5、CentOS安装5…

Python中的消息框对话框tkinter.messagebox

介绍&#xff1a;使用&#xff1a;选择消息框的模式:提示消息框:【返回”ok”】消息警告框【返回”ok”】&#xff1a;错误消息框【返回”ok”】&#xff1a;对话框&#xff1a;询问确认对话框【返回值&#xff1a;yes/no】确认/取消对话框【返回值&#xff1a;True/False】是/…

【Java集合】Set接口及系列子类HashSet等

文章目录Set接口> Set 接口和常用方法> Set接口实现类 - HashSetHashSet 底层机制&#xff08;HashMap&#xff09;> Set接口实现类 - LinkedHashSetSet接口 Set 接口介绍&#xff1a; 无序&#xff08;添加和取出的顺序不一致&#xff09;&#xff0c;没有索引&…

交叉开发环境搭建

ubuntu网络环境搭建 配置网络环境有很多种方法&#xff0c;可以用命令行也可以用图形化界面。ip可以是静态的也可以是动态的。当然要是用SSH访问的话要配置成静态的&#xff0c;但是用校园网的话&#xff0c;又要是动态的&#xff0c;这里就不详细说了。 我们配置ubuntu是为了能…

Java学习路线图(2023版,视频已更新)

PS&#xff1a;注意收藏&#xff0c;此套路线图会不定期更新!点这里跳转&#xff1a;2023年Java程序员学习路线图入门&#xff1a; Java SE基础 → Java Web(含数据库H5jsvue)中级&#xff1a; Maven → Git → SSM框架 → MybatisPlus → Spring Boot→ 《传智健康》项目实战 …

北大硕士LeetCode算法专题课-基础算法查找

算法专题系列&#xff1a; 北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客 北大硕士LeetCode算法专题课-基础算法之排序_骨灰级收藏家的博客-CSDN博客 查找算法 查找算法也可以叫搜索算法。 查找算法就是从一个有序数列中找出一个特定的数&am…

66.物体检测算法:区域卷积神经网络(R-CNN)系列

1. R-CNN ps&#xff1a;在计算机视觉中&#xff0c;深度学习之前&#xff0c;分类器用的是SVM 2. 兴趣区域&#xff08;RoI&#xff09;池化层 目的是为了让每个锚框都可以变成一个自己想要的形状。 3. Fast RCNN 具体步骤如下&#xff1a; 对整张图片用CNN抽特征&#xff…

IT服务管理(ITSM)是什么?ITSM工具哪个好用

什么是IT服务管理&#xff08;ITSM&#xff09; IT 服务管理 (ITSM) 包含一组策略和实践&#xff0c;这些策略和实践可用于为最终用户实施、交付和管理 IT 服务&#xff0c;以满足最终用户的既定需求和企业的既定目标。 在此定义中&#xff0c;最终用户可以包含员工、客户或业…

一网打尽链表的经典OJ题!链表必考笔试题第一弹

目录 0.前言 1. 移除链表元素 2. 反转链表 2.1 方法一(遍历反转链接关系) 2.2 方法二(节点头插构造新链表) 3.链表的中间节点 4. 链表中倒数第k个节点 5. 总结 0.前言 本文所有代码都已传入gitee&#xff0c;可自取 3链表OJ题p1 onlookerzy123456qwq/data_structu…

使用Electron创建桌面程序,从创建到打包

在桌面程序中&#xff0c;使用C#语言可以创建winform和WPF程序&#xff0c;他们2个在Windows中都非常的优秀&#xff0c;还有就是使用QT开发桌面&#xff0c;可以跨平台开发&#xff0c;这三种都是比较“正规”的&#xff0c;而Electron是使用框架开发桌面程序的&#xff0c;还…

JDBC核心技术_第9章:Apache-DBUtils实现CRUD操作

目录9.1 Apache-DBUtils简介9.2 主要API的使用9.2.1 DbUtils9.2.2 QueryRunner类9.2.3 ResultSetHandler接口及实现类9.1 Apache-DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库&#xff0c;它是对JDBC的简单封装&#xff0c;学习成本极低&#xff0…

硬件设备上也能安全运行小程序

当前&#xff0c;在百度、支付宝、今日头条等各大巨头都把持小程序技术尚未开放的情况下&#xff0c;市面上可商用的小程序技术选择面非常狭窄。与此同时&#xff0c;企业仍希望实现 “一次开发&#xff0c;多端运行”&#xff0c;从而真正达到降本增效。今天为大家分享一下&am…

【c++复习梳理】--基础入门语法

目录 1.函数重载 1.1 函数重载概念 1.2C支持函数重载的原理--名字修饰(name Mangling) 2.引用 2.1 引用概念 2.2 引用特性 2.3 常引用 2.4 使用场景 2.4.1 做参数 2.4.2 做返回值 2.5 传值、传引用效率比较 2.5.1 传值、传引用效率比较--做参数返回 2.5.2 值和引用…

Linux--进程地址空间在线程方面的补充--页表的操作模式 0109

上一篇有关地址空间的博客 (入门自用)--Linux--程序地址空间--程序的创建--0907-0913_Gosolo&#xff01;的博客-CSDN博客 很久之前写的&#xff0c;最近会完善。 1. 进程地址空间在线程方面的补充 线程由于资源都是从主进程直接拿来的&#xff0c;所以他们的pcb结构体中的地址…

如何让 Shell 提示符更酷炫

使用远程终端时&#xff0c;默认的命令行提示符格式已经能满足大部分用户需求了&#xff0c;但有时我们希望提示符看起来更直观、优雅、酷炫、美观&#xff0c;可以从中直接得到我们想要的信息&#xff0c;而且清晰分明。本文就详细讲解一下如何让 Shell 提示符更酷炫&#xff…