python自学之《21天学通Python》(7)

news2024/11/16 8:32:18

第10章 Python进阶话题

在这里插入图片描述
10.1 函数与命名空间

Python中可以通过模块来管理复杂的程序,而将不同功能的函数分布在不同的模块中,那么函数及其全局命名空间决定了函数中引用全局变量的值。函数的全局命名空间始终是定义该函数的模块,而不是调用该函数的命名空间。因此,在函数中引用的全局变量始终是定义该函数模块中的全局变量。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意要分清函数全局命名空间(定义的模块)与引用的模块之间的关系。

10.2 闭包及其应用
闭包是Python语言中一种特殊的语法现象,使用闭包可以灵活地实现用其他语法不太容易实现的一些功能,比如实现延迟求值和定义泛型函数功能的实现。

10.2.1 闭包概述

闭包是指Python语言中将组成函数的语句和这些语句的执行环境打包到一起所得到的对象。当使用嵌套函数(函数中定义函数)时,闭包将捕获内部函数执行所需的整个环境。此外,嵌套的函数可以使用被嵌套函数中的任何变量,就像普通函数可以引用全局变量一样,而不需要通过参数引入。

>>> x=14    #全局变量x
>>> def foo():    #定义函数(嵌套的外层函数)
...     x = 3
...     def bar():    #定义函数(嵌套的内层函数)
...         print('x is %d' % x)    #引用变量x (实际引用的是嵌套的外层函数中的
...     bar()    #调用嵌套的内层函数
... 
>>> if __name__ == '__main__':
...     foo()
... 
x is 3
>>> 

在这里插入图片描述
10.2.2 闭包与延迟求值
闭包可以实现先将参数传递给一个函数,而并不立即运行,以达到延迟求值的目的。

>>> def delay_fun(x,y):
...     def caculator():
...         return x+y
...     return caculator
... 
>>> if __name__ == '__main__':
...     print('返回一个求和函数, 并不求和。')
...     msum = delay_fun(3,4)
...     print()
...     print('调用并求和: ')
...     print(msum())
... 
返回一个求和函数, 并不求和。

调用并求和: 
7
>>> 

在这里插入图片描述
注意 所谓延迟求值,就是函数返回的是一个函数,而真正需要运行函数中的代码时,其本质还是函数调用。

10.2.3 闭包与泛型函数
闭包的应用除了在装饰器和延迟求值外,还可以利用其特性来定义不同的泛型函数。

>>> def line(a,b):
...     def aline(x):
...         return a*x + b
...     return aline
... 
>>> if __name__ == '__main__':
...     line23 = lline(2,3)
...     line50 = line(5,0)
KeyboardInterrupt
>>> if __name__ == '__main__':
...     line23 = line(2,3)
...     line50 = line(5,0)
...     print(line23(4))
...     print(line50(2))
... 
11
10
>>> 

10.3 上下文管理器

上下文管理器是指实现上下文管理协议方法的对象,它主要用于安全地释放资源(如打开的文件、数据库连接或网络连接、对对象的锁定等);对于上下文管理器对象可以使用with语句来使用它,在with语句中可以使用上下文管理器管理或提供资源,当退出with语句时,由上下文管理器来负责安全地释放资源。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意 上下文管理器的作用是方便资源管理的一种语法形式。
10.4 用字符串操作对象属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意设置类属性时就使用类名进行设置。
在这里插入图片描述
注意用字符串操作对象属性,一般在框架的编程中应用比较广泛。一般的编程中,应尽量通过调用类的方法来操纵类的数据。

10.5 用字典构造分支程序

一般来说,分支程序一般要用if语句来写,在Python语言中,函数也是对象,而且是顶层对象,可以作为参数传入并调用的。因此,你可以把它作为数据项放入字典中,并以键值来作为调用(分支)的标志。
在这里插入图片描述
在这里插入图片描述
注意 用字典构造分支程序虽然可行,但给阅读和理解程序带来麻烦,请慎用。

10.6 重载类的特殊方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
10.7 鸭子类型(duck typing)与 多态
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
注意鸭子类型虽然方便了使用,但在编程时应给出明确的说明,防止调用错误。
10.8 小结
在这里插入图片描述
10.9 本章习题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

java面试之Spring篇

一、Spring概述 1. Spring由哪些模块组成 spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。spring beans…

windows无线连接Linux服务器,实现终端操作与文件传输

0、建议安装完Ubuntu后按照百问网的设置安装必要的linux软件 执行: git clone https://e.coding.net/weidongshan/DevelopmentEnvConf.git cd DevelopmentEnvConf sudo ./Configuring_ubuntu.sh 等待安装完成,大约半个小时事件。 我搭建的环境 家…

git的使用

一、创建仓库 gitee官网创建好用户之后,我们点创建仓库。 选择好语言,开源许可证随便选一个即可,模板我们最好设置一个Readme文件,方便后面写明仓库的介绍。 分支模型我们新手选一个单分支模型就可以了。 因为仓库创建的时候只能…

Windows下Canal.admin-1.1.6安装部署

一、下载解压 1 下载 进入页面:Release v1.1.6 alibaba/canal GitHub 下载 canal.admin-1.1.6.tar.gz 2 解压 解压至目录:D:\Tools\canal.admin-1.1.6 二、创建数据库 canal_manager 1 创建时间数据库:canal_manager 2 初始化元数据…

并发编程学习案例-模拟抢红包

一、前言 再来系统动手学习一下Java并发编程。 知识点:CountDownLatch 的发令枪使用模式;红包均分,最后一个分不完的解决方法 抢红包的需求,每个红包均分,最后一个除外 1. 设置红包总额 2. 设置红包的个数 3. 模拟抢红包的人数 &a…

图文结合带你搞懂MySQL日志之relay log(中继日志)

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者: KAiTO文章来源:GreatSQL社区原创 什么是中继日志(relay log) 中继日志&a…

线程,协程,异步编程模型

线程,协程,异步编程模型 1.线程编程模型 我们知道线程是 cpu 调度的基本单位。 如果是一个单核的cpu, 而且现在有3个线程需要执行。那么可能是 线程 1, 2, 3 通过 cpu分片, 轮流执行。 那么 如果不将 cpu 进行分片, 而是 线程 1,2,3 轮流执行&#x…

Springboot中如何优雅的写好controller层代码

前言优雅?看到这个词,我第一反应是什么是优雅?怎么写才算优雅?一千个读者有一千个哈姆雷特,每个人的经验、阅历不同,也许理解就不同。我对优雅的理解很简单,就是简洁有效、容易理解,…

递归、迭代、单向快排的实现和两种优化方法

目录 快速排序 实现代码​​​​​​​ 时间复杂度 快排的优化 随机选择策略 三位取中法 非递归的快排 单向快排 快速排序 快速排序算法是基于分治策略的一个排序算法,其基本思想是对于输入的子数组进行分解、递归求解,最后合并。 分解&#xff…

Fiddler - 夜神模拟器证书安装App抓包

Fiddler- 夜神模拟器证书安装App抓包 文章目录Fiddler- 夜神模拟器证书安装App抓包前言一、软件安装1.Openssl安装1.1下载安装1.2配置环境变量1.3查看openssl版本,输入命令:openssl version2.夜神模拟器安装1.1 下载安装1.2工具准备,MT管理器…

React相关扩展一(setState、lazyLoad、Hooks相关)(九)

系列文章目录 第一章:React基础知识(React基本使用、JSX语法、React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state、props、refs)(二&#xff0…

基于轻量级CNN的WHDLD多标签遥感分类识别系统

WHDLD数据成像波段包括R、G、B波段,数据覆盖包括6类地貌:裸地、建筑物、人行道、道路、植被、水域。数据集中包含4940张遥感影像及对应地物分类标记样本,影像大小为256x256像素,影像以jpg格式存储,标签数据格式为单通道…

高级前端常考手写面试题合集

解析 URL Params 为对象 let url http://www.domain.com/?useranonymous&id123&id456&city%E5%8C%97%E4%BA%AC&enabled; parseParam(url) /* 结果 { user: anonymous,id: [ 123, 456 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字…

React(coderwhy)- 09(项目实战 - 1)

创建React项目 ◼ 创建项目的方式:create-react-app ◼ 项目配置:  配置项目的icon  配置项目的标题  配置jsconfig.json 新建jsconfig.json文件,在文件中粘贴以下内容{"compilerOptions": {"target": "es5","…

【数据结构趣味多】循环队列

目录 函数介绍及模拟实现 Front()函数 Rear()函数 enQueue()函数 deQueue()函数 isEmpty()函数 isFull()函数 循环队列模拟题 定义:把队列的头尾相连接的的顺序存储结构称为循环队列;循环队列的是由顺序表实现的。 为什么要使用循环队列&#…

Android MVVM之SavedStateHandle数据保存之详解与使用。

一、介绍 SavedStateHandle从名字可以看出,是保存状态的。这个类常和MVVM中的ViewModel搭配使用,对页面生命周期的数据状态的缓存与恢复做一个容器。这个容易相对onSaveInstanceState(Bundle)要更强一点,保存的数据类型也比较丰富&#xff0c…

算法刷题打卡第60天:回文链表

回文链表 难度:简单 给定一个链表的 头节点 head ,请判断其是否为回文链表。 如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。 示例 1: 输入: head [1,2,3,3,2,1] 输出: true示例 2: 输入:…

文本摘要,基于Pytorch和Hugging Face Transformers构建示例,有源码

​ 文本摘要的常见问题和解决方法概述,以及使用Hugging Face Transformers库构建基于新浪微博数据集的文本摘要示例。 作 者丨程旭源 学习笔记 1 前言简介 文本摘要旨在将文本或文本集合转换为包含关键信息的简短文本。主流方法有两种类型,抽取式和生…

Nodejs模块的封装(数据库Mysql)

文章目录项目结构本次演示需要使用的第三方包为1.app.js相关配置2.router下的user.js相关配置3.db/index.js文件相关操作4.router_handler下的user.js相关操作项目结构 后面的项目相关文件的创建步骤按照我写的博客从上往下一步一步来 本次演示需要使用的第三方包为 "cor…

【操作系统实验/Golang】实验4:虚拟内存页面置换算法

目录 1 实验问题描述 2 测试数据 3 流程图 4 实验结果 4 实验代码 1 实验问题描述 设计程序模拟先进先出FIFO,最佳置换OPT和最近最久未使用LRU页面置换算法的工作过程。 假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个…