Python进阶(更新中)

typing

Python的typing模块是Python 3.5版本引入的一个标准库,它提供了一种在Python代码中显式声明类型的方式,可以帮助开发人员更好地理解和使用Python的类型系统。
使用typing模块,您可以在函数、类、变量等地方添加类型注解,以声明您期望的类型。类型注解不仅可以提高代码的可读性和可维护性,还可以帮助开发人员使用类型检查工具发现潜在的错误和代码的不一致性。
下面是一些使用typing模块的示例:

from typing import List, Dict, Tupledef greet(name: str) -> str:return 'Hello ' + nameclass Person:def __init__(self, name: str, age: int) -> None:self.name = nameself.age = agedef say_hello(self, other_person: 'Person') -> None:print(f'Hello {other_person.name}! My name is {self.name} and I am {self.age} years old.')people: Dict[str, Person] = {'Alice': Person('Alice', 25), 'Bob': Person('Bob', 30)}
names: List[str] = ['Alice', 'Bob']
tuples: Tuple[str, int] = ('Alice', 25)

在上面的示例中,我们使用了typing模块中的List、Dict、Tuple等类型注解来声明变量类型。同时,我们还使用了str和int等内置类型注解来声明函数和类中的参数类型。通过这种方式,我们可以在类型检查工具中更好地了解代码的类型情况,并帮助发现潜在的错误。
需要注意的是,虽然Python的类型注解可以提高代码的可读性和可维护性,但它们并不会强制执行类型检查。因此,如果您在Python中使用了类型注解,最好使用类型检查工具来确保它们的正确性。

isinstance

isinstance是Python中的一个内建函数,用于检查一个对象是否是一个已知的类型,或者是这个类型的子类。这个函数返回一个布尔值,如果对象是指定类型或其子类的实例,那么结果为True,否则结果为False。
函数的基本格式是:

isinstance(object, type)

这里,object是你要检查的对象,而type可以是类型或类型元组。
下面是一些具体的例子:

print(isinstance('hello', str))  # 输出:True
print(isinstance(123, int))  # 输出:True
print(isinstance([1, 2, 3], list))  # 输出:True
print(isinstance((1, 2, 3), tuple))  # 输出:True
print(isinstance(123, float))  # 输出:False

如果你检查的object是None,那么isinstance函数会返回True,只要type不是type(None)。例如:

print(isinstance(None, int))  # 输出:False
print(isinstance(None, type(None)))  # 输出:True

此外,如果你传递一个类型元组给isinstance,它将检查object是否属于这个类型集合。例如:

print(isinstance((1, 2, 'hello'), (int, str)))  # 输出:True

这里,元组(1, 2, ‘hello’)是int和str的实例,所以对isinstance的返回是True。
总的来说,isinstance函数是一个非常有用的工具,可以帮助你编写更灵活的代码,特别是当你需要处理多种类型的数据时。

迭代器和生成器

迭代器和生成器是Python中非常重要的概念,是Python对迭代和生成序列的强大支持。

迭代器(Iterator)

迭代器是一种可以记住遍历的位置的对象。Python的很多内置类型,如列表、元组、字典等都支持迭代。我们也可以通过定义类来实现一个自定义的迭代器。
定义一个迭代器需要实现两个方法,iter() 和 next()。
iter() 方法返回迭代器对象本身。如果类中定义了这个方法,那么它就可以用在for…in…循环中。
next() 方法返回容器的下一个元素。在没有后续元素时,应该抛出 StopIteration 异常。
下面是一个简单的迭代器实现示例:

class MyIterator:def __init__(self, start, end):self.current = startself.end = enddef __iter__(self):return selfdef __next__(self):if self.current > self.end:raise StopIterationelse:self.current += 1return self.current - 1
my_iter = MyIterator(0, 5)
for i in my_iter:print(i)

生成器(Generator)

生成器是创建迭代器的简单而强大的工具。它们使用一个函数来定义一个迭代器,这个函数使用yield语句返回每个值,而不是使用return语句。每次从生成器中请求一个值时,函数会从之前停止的地方开始执行,直到遇到一个新的yield语句,然后返回该语句后面的值。如果函数执行完毕,生成器就结束了。
下面是一个简单的生成器实现示例:

def my_generator():for i in range(1, 6):yield i * 2
for num in my_generator():print(num)

在这个例子中,每次调用my_generator()函数时,它都会从开始处执行,直到遇到yield语句,然后返回该语句的值。在下一次调用时,它将从上一次yield语句后的下一个语句开始执行,直到再次遇到yield语句。它将一直这样做,直到函数结束并抛出StopIteration异常。

map

Python的map()函数是一个内置的高级别函数,它用于将一个函数应用于一个输入列表(或任何可迭代的输入)的所有元素。map()函数返回一个迭代器,包含所有函数调用的结果。
map()函数的基本语法如下:

map(function, iterable, ...)

这里的参数解释如下:
function:这是你希望应用于可迭代对象的每个元素的函数。这可以是一个内置的Python函数,例如str.upper,也可以是你自己定义的函数。
iterable:这是一个或多个你希望应用函数的可迭代对象。例如,列表、元组、字典等。
…(省略号):这是可选的,表示你可以传入更多的可迭代对象。
下面是一些使用map()函数的例子:
例1:将列表中的每个元素都转化为大写字母

list1 = ['a', 'b', 'c', 'd']
result = map(str.upper, list1)
print(list(result))  # 输出:['A', 'B', 'C', 'D']

例2:将两个列表的元素配对并相加

def add(a,b):return a+b
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = map(add, list1, list2)
print(list(result))  # 输出:[5, 7, 9]

这里,add是内置的加法函数。
例3:将字典中的所有值转化为字符串

dict1 = {'a': 1, 'b': 2, 'c': 3}
result = map(str, dict1.values())
print(list(result))  # 输出:['1', '2', '3']

例4: lambda表达式

# lambda表达式
square = lambda x: x ** 2
numbers = [1, 2, 3, 4, 5]
# map函数计算每个元素的平方
squares = map(square, numbers)
print(list(squares)) # [1, 4, 9, 16, 25]

需要注意的是,map()函数并不直接修改输入的数据。如果你希望修改输入的数据,你需要使用其他的函数或方法。另外,虽然map()函数在大多数情况下都可以正常工作,但是如果函数或可迭代对象的__iter__()方法没有正确实现,或者在处理大数据集时内存限制,可能会出现一些问题。

lambda

Lambda表达式是Python语言中一个非常强大的特性,它允许你以一种简洁、快速的方式来定义匿名函数。Lambda表达式的语法非常简单,它由关键字lambda和一对括号组成,中间可以包含一个或多个参数,后面跟随一个冒号和一个表达式。
下面是一个简单的lambda表达式示例:

add = lambda x, y: x + y

上面的lambda表达式接受两个参数x和y,并返回它们的和。这个lambda表达式可以用来代替一个普通的函数定义。
Lambda表达式通常用于一些简单的、临时需要的函数,它们可以大大简化代码并提高代码可读性。
下面是一些使用lambda表达式的示例:

# 计算两个数的和
add = lambda x, y: x + y
result = add(3, 5)
print(result)  # 输出 8
# 将列表中的每个元素乘以2
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)  # 输出 [2, 4, 6, 8, 10]
# 对一个列表进行排序
sorted_numbers = sorted(numbers, key=lambda x: x % 2)
print(sorted_numbers)  # 输出 [1, 3, 5]

Lambda表达式在Python中非常有用,它们可以简化代码并提高代码的可读性。你可以使用lambda表达式来定义简单的函数,特别是在需要一个临时函数的地方,而不需要去定义一个完整的函数。

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

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

相关文章

VR智能家居虚拟连接仿真培训系统重塑传统家居行业

家居行业基于对场景的打造及设计,拥有广阔前景,是众多行业里面成为最有可能进行元宇宙落地的应用场景之一。 家居行业十分注重场景的打造及设计,而元宇宙恰恰能通过将人工智能、虚拟现实、大数据、物联网等技术融合提升,带来身临其…

vue使用腾讯地图,实现点标记,搜索

效果图&#xff1a; 1、public文件夹下index.html添加 // public/index.html <script src"https://map.qq.com/api/js?v2.exp&key你的ksy"></script> <script src"https://map.qq.com/api/gljs?v1.exp&librariesservice&key你…

【LeetCode】26. 删除有序数组中的重复项

1 问题 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &…

spring Boot使用Mybatis实践

Mybatis作为一款优秀的持久层框架&#xff0c;具有简化SQL编写、灵活性、易于集成、等特点深受开发人员青睐&#xff0c;下文将为大家讲到在Spring Boot中如何使用Mybatis 1、依赖引入 数据库驱动 <dependency><groupId>mysql</groupId><artifactId>…

django系列之事务操作

Django 默认的事务行为是自动提交&#xff0c;除非事务正在执行&#xff0c;否则每个查询将会马上自动提交到数据库。 1. 全局开启事务 在 Web 里&#xff0c;处理事务比较常用的方式是将每个请求封装在一个事务中。 在你想启用该行为的数据库中&#xff0c;把 settings 配置…

YOLOv5-训练自己的VOC格式数据集(VOC、自建数据集)

YOLOv5&#xff1a;训练自己的 VOC 格式数据集 1. 自定义数据集 1.1 环境安装 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple注意&#xff1a; 安装 lxmlPillow 版本要低于 10.0.0&#xff0c;解释链接: module ‘PIL.Image’ has no attri…

Hadoop3教程(十六):MapReduce中的OutputFormat

文章目录 &#xff08;105&#xff09;OutputFormat概述&#xff08;106&#xff09;自定义OutputFormat案例需求分析&#xff08;107/108&#xff09;自定义OutputFormat案例实现自定义Mapper自定义Reducer自定义OutputFormatDriver 参考文献 &#xff08;105&#xff09;Outp…

Jetpack:012-Jetpack中的弹出菜单

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.2 DropdownMenuItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中标题栏相关的内容&#xff0c;本章回中主要 弹出菜单。闲话休提&#xff0c;让我们一起Talk Android …

AI系统ChatGPT源码+详细搭建部署教程+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅱ—— 创建和添加证书模板

目录 博文摘要3. 使用 Microsoft 证书颁发机构创建 Machine SSL 和 Solution User 证书模板3.1 打开 Certificate Template Console3.2 复制模板3.3 修改 Compatibility 选项卡3.4 修改 General 选项卡3.5 修改 Extensions 选项卡3.6 修改 Subject Name 选项卡3.7 确认新模板 4…

软件工程与计算总结(十六)详细设计的设计模式

一.设计模式基础 某种意义上来说&#xff0c;设计模式就是设计经验的总结~ 设计模式不是简单的经验总结&#xff0c;更不是无中生有&#xff0c;它是经过实践反复检验、能解决关键技术难题、有广泛应用前景和能够显著提高软件质量的有效的经验总结。 每个模式都不是独立的&a…

Docker安装GitLab及使用图文教程

作者&#xff1a; 宋发元 GitLab安装及使用教程 官方教程 https://docs.gitlab.com/ee/install/docker.html Docker安装GitLab 宿主机创建容器持久化目录卷 mkdir -p /docker/gitlab/{config,data,logs}拉取GitLab镜像 docker pull gitlab/gitlab-ce:15.3.1-ce.0运行GitLa…

Linux性能优化--性能追踪:受CPU限制的应用程序(GIMP)

10.0 概述 本章包含了一个例子&#xff1a;如何用Linux性能工具在受CPU限制的应用程序中寻找并修复性能问题。 阅读本章后&#xff0c;你将能够&#xff1a; 在受CPU限制的应用程序中明确所有的CPU被哪些源代码行使用。用1trace和oprofile弄清楚应用程序调用各种内部与外部函…

Jmeter接口测试 —— jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证码…

在启智平台上安装anconda

安装Anaconda3-5.0.1-Linux-x86_64.sh python版本是3.6 在下面的网站上找到要下载的anaconda版本&#xff0c;把对应的.sh文件下载下来 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 把sh文件压缩成.zip文件&#xff0c;拖到启智平台的调试页面 上传到平台上 un…

ndk 编译报错 find_library called with incorrect number of arguments

ndk 编译报错 C build system [configure] failed while executing: echo off "C:\Users\Administrator\AppData\Local\Android\Sdk\cmake\3.22.1\bin\cmake.exe" ^ "-HF:\jupter\jupiter_offline_cv2\libts" ^ "-DCMAKE_SYSTEM_NAMEAndroid" ^…

什么是内存泄漏?JavaScript 垃圾回收机制原理及方式有哪些?哪些操作会造成内存泄漏?

1、什么是内存泄漏&#xff1f; 内存泄漏是前端开发中的一个常见问题&#xff0c;可能导致项目变得缓慢、不稳定甚至崩溃。内存泄漏是指不再用到的内存没有及时被释放&#xff0c;从而造成内存上的浪费。 2、 JavaScript 垃圾回收机制 1&#xff09; 原理&#xff1a; JavaS…

《从菜鸟到大师之路 正则表达式 篇》

《从菜鸟到大师之路 正则表达式 篇》 正则表达式是一个强大的文本匹配工具。但是&#xff0c;对于前端初学者来说&#xff0c;众多的符号和规则可能让人难以理解。其实&#xff0c;你不需要记住所有的正则表达式语法&#xff01;本文将分享一些简单而实用的技巧&#xff0c;帮…

【C++ 学习 ㉘】- 详解 C++11 的列表初始化

目录 一、C11 简介 二、列表初始化 2.1 - 统一初始化 2.2 - 列表初始化的使用细节 2.2.1 - 聚合类型的定义 2.2.2 - 注意事项 2.3 - initializer_list 2.3.1 - 基本使用 2.3.2 - 源码剖析 一、C11 简介 1998 年&#xff0c;C 标准委员会发布了第一版 C 标准&#xff0…

vm虚拟机克隆ubuntu

1. 使用vm虚拟机自带的克隆功能 2. 选择完整克隆&#xff0c;然后选择您克隆到哪里的目录 3. 点击编辑你克隆后的虚拟机&#xff0c;点网络适配器&#xff0c;然后点高级&#xff0c;点击生成mac地址&#xff08;由于唯一&#xff0c;所以需要重新生成&#xff09; 4. 开启虚拟…