学习python笔记:9,with,requests,os,set,list,enumerate,numpy.array

with语句

在Python中,with语句用于确保某段代码执行完毕时,资源(如文件对象、网络连接等)可以被正确地清理。这通常涉及到使用上下文管理协议,该协议要求一个对象实现__enter__()__exit__()两个方法。

with语句的基本语法如下:

with context_expression [as variable]:
with-block
  • context_expression:返回一个上下文管理对象。
  • as variable(可选):将上下文管理对象的返回值(通常是__enter__()方法的返回值)赋值给variable
  • with-block:要执行的代码块。

with语句开始时,__enter__()方法会被调用,并且如果提供了as variable__enter__()的返回值会被赋值给variable。然后执行with-block中的代码。当with-block执行完毕时,__exit__()方法会被调用,无论with-block中的代码是正常执行完毕还是抛出了异常。

一个常见的例子是使用with语句来打开文件:

with open('example.txt', 'r') as file:
data = file.read()
# 在这里可以对数据进行操作
# 文件在这里已经被正确关闭,无需显式调用file.close()

在这个例子中,open('example.txt', 'r')返回一个文件对象,该对象实现了上下文管理协议。with语句开始时,文件被打开;当with语句结束时,文件被自动关闭,即使with-block中的代码抛出了异常也是如此。

通过使用with语句,可以确保资源在使用完毕后得到正确的清理,从而避免资源泄漏和其他潜在问题。

requests库

requests 是一个用于发送 HTTP 请求的 Python 库。它使得发送 HTTP 请求变得简单且人性化。以下是一些基本的 requests 函数及其用途:

  1. requests.get(url, **kwargs)

发送一个 GET 请求到指定的 URL。

import requests
response = requests.get('https://www.example.com')
print(response.text)
  1. requests.post(url, data=None, json=None, **kwargs)

发送一个 POST 请求到指定的 URL。data 参数用于发送表单数据,而 json 参数用于发送 JSON 格式的数据。

import requests
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com/post', data=payload)
print(response.text)
  1. requests.put(url, data=None, **kwargs)

发送一个 PUT 请求到指定的 URL。这通常用于更新资源。
4. requests.delete(url, **kwargs)

发送一个 DELETE 请求到指定的 URL。这通常用于删除资源。
5. requests.head(url, **kwargs)

发送一个 HEAD 请求到指定的 URL。HEAD 请求与 GET 请求类似,但只返回响应的头部信息,不返回实际的内容。
6. requests.patch(url, data=None, **kwargs)

发送一个 PATCH 请求到指定的 URL。PATCH 请求通常用于部分更新资源。
7. requests.session()

创建一个 Session 对象,用于跨多个请求保持某些参数,如 cookies 和 headers。这对于需要登录或维护会话状态的网站非常有用。

import requests
with requests.Session() as s:
s.get('https://www.example.com/login', auth=('user', 'pass'))
r = s.get('https://www.example.com/protected')
print(r.text)

每个 requests 函数都返回一个 Response 对象,该对象包含有关响应的各种信息,如状态码、头部、内容等。你可以通过 Response 对象的各种属性(如 status_codeheaderstextjson() 等)来访问这些信息。

为了使用 requests 库,你需要先安装它。你可以使用 pip(Python 的包管理工具)来安装:

pip install requests

requests 库因其简洁、易用和强大的功能而受到广大 Python 开发者的喜爱,是发送 HTTP 请求的流行选择之一。

os内置模块

在Python中,os 是一个内置的模块,它提供了与操作系统交互的多种功能。这个模块提供了许多函数,用于处理文件和目录路径、执行系统命令、读取环境变量、访问操作系统相关的功能等。

os 模块中的一些常用功能包括:

  • 文件和目录操作:os.path 提供了许多用于文件和目录操作的函数,如 os.path.exists()(检查文件或目录是否存在)、os.path.isfile()(检查是否为文件)、os.path.isdir()(检查是否为目录)、os.path.join()(连接路径)、os.makedirs()(创建目录)等。

  • 进程管理:os 模块提供了 os.system()(执行系统命令并返回退出状态)和 os.exec* 系列函数(替换当前进程为另一个进程)来执行和管理进程。

  • 环境变量:os.environ 是一个映射,表示环境变量。可以使用它来读取和设置环境变量。

  • 文件和目录的访问权限:os 模块提供了 os.chmod()(改变文件权限)和 os.access()(检查文件的访问权限)等函数。

  • 操作系统相关的功能:os 模块还包含了许多与特定操作系统相关的功能,如获取当前工作目录(os.getcwd())、改变当前工作目录(os.chdir())、获取登录用户的名字(os.getlogin())等。

使用 os 模块可以简化Python程序与操作系统之间的交互,使程序能够更容易地处理文件和目录、执行系统命令以及访问操作系统的各种功能。需要注意的是,由于 os 模块中的某些函数直接调用操作系统的功能,因此在不同的操作系统上可能会有不同的行为。在编写跨平台的Python代码时,应特别注意这一点。

set无序且不重复的元素集合和set函数

在Python中,set是一个内置的数据类型,用于存储无序且不重复的元素集合。set类型是一个可变的数据结构,因此你可以添加或删除元素。由于集合是无序的,所以你不能通过索引来访问集合中的元素。

以下是一些基本的set操作示例:

创建集合

你可以通过将一个可迭代对象(如列表、元组或字符串)传递给set()函数来创建一个集合:

my_set = set([1, 2, 3, 2, 3, 4])
print(my_set) # 输出: {1, 2, 3, 4}

由于集合中的元素是唯一的,所以重复的元素会被自动去除。

添加元素

使用add()方法可以向集合中添加单个元素:

my_set.add(5)
print(my_set) # 输出: {1, 2, 3, 4, 5}

使用update()方法可以向集合中添加多个元素(从一个可迭代对象中添加):

my_set.update([6, 7, 8])
print(my_set) # 输出: {1, 2, 3, 4, 5, 6, 7, 8}

删除元素

使用remove()方法可以从集合中删除一个指定的元素:

my_set.remove(5)
print(my_set) # 输出: {1, 2, 3, 4, 6, 7, 8}

如果尝试删除一个不存在的元素,remove()方法会抛出KeyError异常。为了避免这种情况,你可以使用discard()方法,它在元素不存在时不会抛出异常:

my_set.discard(9) # 不会抛出异常,因为9不在集合中

另外,你可以使用pop()方法删除并返回集合中的任意一个元素(具体返回哪个元素是不确定的,因为集合是无序的):

removed_element = my_set.pop()
print(removed_element) # 输出集合中的一个元素,例如: 1
print(my_set) # 输出: {2, 3, 4, 6, 7, 8}(假设移除的是1)

检查元素

你可以使用in关键字来检查一个元素是否存在于集合中:

if 3 in my_set:
print("3 is in the set") # 输出: 3 is in the set

集合运算

集合支持多种数学集合运算,如并集、交集、差集和对称差集:

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 并集
union_set = set1 | set2
print(union_set) # 输出: {1, 2, 3, 4, 5, 6}
# 交集
intersection_set = set1 & set2
print(intersection_set) # 输出: {3, 4}
# 差集(set1中有但set2中没有的元素)
difference_set = set1 - set2
print(difference_set) # 输出: {1, 2}
# 对称差集(在set1或set2中,但不同时在两者中的元素)
symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set) # 输出: {1, 2, 5, 6}

这些只是set类型提供的一些基本操作。集合在Python中是非常有用的数据结构,特别是在需要快速检查成员关系、执行集合运算或去除重复元素的场景中。

list有序的元素集合,list函数

在Python中,list是一个内置的数据类型,用于表示一个有序的元素集合。这些元素可以是任何数据类型,并且元素之间通过逗号分隔,整个列表由方括号包围。

list函数本身通常用于将其他可迭代对象(如元组、字符串或集合)转换为一个列表。不过,在大多数情况下,你不需要显式地调用list函数来创建列表,因为你可以直接使用方括号语法。

以下是一些使用list函数的例子:

从其他可迭代对象创建列表

 

python复制代码

# 从元组创建列表
my_tuple = (1, 2, 3)
my_list = list(my_tuple)
print(my_list) # 输出: [1, 2, 3]
# 从字符串创建列表(将字符串拆分为字符列表)
my_string = "hello"
my_list_from_string = list(my_string)
print(my_list_from_string) # 输出: ['h', 'e', 'l', 'l', 'o']
# 从集合创建列表(注意集合是无序的,所以列表中的元素顺序可能与集合中的不同)
my_set = {4, 2, 3}
my_list_from_set = list(my_set)
print(my_list_from_set) # 输出可能是: [4, 2, 3],也可能是其他顺序,因为集合是无序的

使用方括号语法创建列表

通常,你不需要使用list函数来创建列表,而是可以直接使用方括号:

 

python复制代码

# 使用方括号直接创建列表
my_list = [1, 2, 3, 4, 5]
print(my_list) # 输出: [1, 2, 3, 4, 5]
# 创建一个包含不同数据类型的列表
mixed_list = [1, "two", 3.0, True, [4, 5]]
print(mixed_list) # 输出: [1, 'two', 3.0, True, [4, 5]]

列表操作

列表支持许多操作,包括添加、删除、修改元素,以及使用切片来获取子列表等。

 

python复制代码

# 添加元素到列表末尾
my_list.append(6)
print(my_list) # 输出: [1, 2, 3, 4, 5, 6]
# 在列表指定位置插入元素
my_list.insert(2, "inserted")
print(my_list) # 输出: [1, 2, 'inserted', 3, 4, 5, 6]
# 删除列表中的元素
my_list.remove("inserted")
print(my_list) # 输出: [1, 2, 3, 4, 5, 6]
# 使用切片获取子列表
sublist = my_list[1:4] # 获取索引1到3(不包括4)的元素
print(sublist) # 输出: [2, 3, 4]

了解并掌握列表的基本操作对于在Python中进行编程是非常重要的,因为列表是Python中非常常用的一种数据结构。

enumerate()函数

在Python中,enumerate()是一个内置函数,用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。这样,你不仅可以获取到元素的值,还可以获取到元素的索引(或位置)。

enumerate()函数的基本语法如下:

enumerate(iterable, start=0)
  • iterable:一个可遍历的对象。
  • start(可选):计数的起始值,默认为0。

enumerate()返回一个枚举对象,这个对象是一个迭代器,可以生成由元素索引和元素值组成的元组。

下面是一个使用enumerate()函数的例子:

# 创建一个列表
my_list = ['apple', 'banana', 'cherry']
# 使用enumerate遍历列表
for index, value in enumerate(my_list):
print(f"Index: {index}, Value: {value}")

输出将会是:

Index: 0, Value: apple
Index: 1, Value: banana
Index: 2, Value: cherry

在这个例子中,enumerate(my_list)生成了一个迭代器,每次迭代都返回一个元组,其中第一个元素是元素的索引(从0开始),第二个元素是元素的值。然后,我们通过解包这个元组到indexvalue变量中,从而能够在循环体内部同时访问到索引和值。

你也可以通过传递start参数给enumerate()函数来指定起始索引:

my_list = ['apple', 'banana', 'cherry']
# 从索引1开始枚举
for index, value in enumerate(my_list, start=1):
print(f"Index: {index}, Value: {value}")

输出将会是:

Index: 1, Value: apple
Index: 2, Value: banana
Index: 3, Value: cherry

在这个例子中,我们设置start=1,所以枚举从1开始而不是默认的0。

numpy.array 

numpy.array 是 NumPy(Numerical Python 的简称)库中的一个核心函数,用于创建一个多维数组对象。NumPy 是 Python 中用于数值计算的一个扩展库,它提供了大量的数学函数来对数组和矩阵进行运算。

使用 numpy.array,你可以将 Python 中的列表、元组或其他序列类型的数据转换为 NumPy 数组,从而可以利用 NumPy 提供的各种高效和方便的数值计算功能。

下面是 numpy.array 的一些基本用法:

导入 NumPy 库

首先,你需要导入 NumPy 库:

import numpy as np

创建一维数组

# 从 Python 列表创建一维数组
list_data = [1, 2, 3, 4, 5]
array_1d = np.array(list_data)
print(array_1d)

输出:

[1 2 3 4 5]

创建二维数组(矩阵)

# 从 Python 列表的列表创建二维数组(矩阵)
list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
array_2d = np.array(list_of_lists)
print(array_2d)

输出:

[[1 2 3]
[4 5 6]
[7 8 9]]

指定数组的数据类型

你可以在创建数组时指定数据类型:

# 创建一个浮点型的数组
float_array = np.array([1, 2, 3], dtype=float)
print(float_array)
print(float_array.dtype) # 输出数组的数据类型

输出:

[1. 2. 3.]
float64

数组的形状和维度

你可以使用 shape 属性查看数组的形状,使用 ndim 属性查看数组的维度数:

print(array_2d.shape) # 输出:(3, 3)
print(array_2d.ndim) # 输出:2,表示这是一个二维数组

NumPy 数组提供了很多高级的功能,比如切片、索引、广播、数学运算等,使得数值计算变得更加简单和高效。在数据分析和科学计算中,NumPy 数组是极其重要的数据结构。

NumPy库中的array和Python的内置列表(list)

NumPy库中的array和Python的内置列表(list)之间存在多个关键的区别。这些区别主要体现在数据类型、内存使用、运算能力以及用途等方面。

  1. 数据类型
    • list中的数据类型可以不同,即列表中的元素可以是任何Python对象,包括整数、浮点数、字符串、其他列表等。
    • array则要求所有元素的数据类型必须相同。这确保了数据的一致性和更高的运算效率。
  2. 内存使用
    • list在内存中存储的是数据的引用(指针),而不是数据本身。这意味着,如果你有一个包含大量对象的列表,每个对象都会单独占用内存空间,而列表本身则只是存储了指向这些对象的指针。
    • array在内存中存储的是实际的数据值,它通常使用连续的内存块来存储数据,这有助于减少内存碎片并提高数据访问速度。
  3. 运算能力
    • list不支持数学四则运算或其他复杂的数学运算。虽然可以通过循环和条件语句对列表中的元素进行运算,但这种方式通常较为低效。
    • array支持大量的数学运算,包括元素级的运算(如加法、乘法等)、矩阵运算(如点积、转置等)以及更复杂的线性代数运算。这使得array成为进行科学计算、数据分析以及机器学习等任务时的理想选择。
  4. 功能与用途
    • list是Python中的一种通用数据结构,用于存储和处理一组有序的项目。它可以轻松地添加、删除和修改元素,并且支持各种列表操作(如排序、切片等)。
    • array则主要用于存储和处理数值数据,尤其是那些需要进行数学运算或科学计算的数据。由于其高效的内存使用和强大的运算能力,array在处理大量数据时通常比list更为高效。

总结来说,listarray各有其优势和应用场景。在选择使用哪种数据结构时,应根据具体的需求和任务来决定。如果需要处理的是一组有序的项目,并且需要进行频繁的修改和操作,那么list可能是一个更好的选择。而如果需要处理的是大量的数值数据,并且需要进行复杂的数学运算或科学计算,那么array则可能更为合适。

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

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

相关文章

常见视频名词及视频格式

常见视频名词 时长:视频时间单位,基本单位:秒,常见格式:00:00:00:00(时:分:秒:帧) 帧:视频的基础单位 视频也是一帧一帧组成的,他是…

Java安全基础 关键概念过关

Java安全基础 关键概念汇总 文章目录 Java安全基础 关键概念汇总前置知识1.构造器this以及包的使用2.继承3.重写/ 重载 / super4.多态5.区分和equals方法6.toString的使用7.Object的概念8.static,final,代码块static代码块final 9.动态代理10.类的动态加载1)类加载器含义&#…

卷积篇 | YOLOv8改进之C2f模块融合SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。本…

常用的vim和linux命令

常用的vim命令和linux命令 vim编辑器有三种模式 命令模式、编辑模式、末行模式 模式间切换方法: 1.命令模式下,输入:后,进入末行模式 2.末行模式下,按esc慢退、按两次esc快退、或者删除所有命令,可以回…

如何正确从github上下载数据集等内容

文章目录 一、现象:二、解决方案 一、现象: 数据集点击下载没有反应,那需要怎么下载数据集呢? 二、解决方案 输入以下命名行,亲测有效 git clone https://github.com/mymusise/ChatGLM-Tuning.git

LeetCode每日一题[C++]-1793.好子数组的最大分数

题目描述 给你一个整数数组 nums &#xff08;下标从 0 开始&#xff09;和一个整数 k 。 一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i1], ..., nums[j]) * (j - i 1) 。一个 好 子数组的两个端点下标需要满足 i < k < j 。 请你返回 好 子数组的最大可能…

【ADF4351】使用FPGA进行SPI寄存器配置、使用FPGA计算各个频率的频点,ADF4351配置程序

简介 特性 输出频率范围&#xff1a;35 MHz至4,400 MHz 小数N分频频率合成器和整数N分频频率合成器 具有低相位噪声的VCO 可编程的1/2/4/8/16/32/64分频输出 典型抖动&#xff1a;0.3 ps rms EVM(典型值&#xff0c;2.1 GHz)&#xff1a; 0.4% 电源&#xff1a;3.0 V至3.6 V …

Selenium 自动化 —— 使用WebDriverManager自动下载驱动

上一篇文章 入门和 Hello World 实例 中&#xff0c;我们提供了一个最简单的 Selenium 上手的例子。 但是某一天&#xff0c;突然发现相同的代码居然运行报错了。这是怎么回事呢&#xff1f; 日志排查 日志中其实提示的很明显了&#xff1a;Chrome浏览器和Chrome WebDriver的…

adobe animate 时间轴找不到编辑多个帧按钮

如题&#xff0c;找了半天&#xff0c;在时间轴上找不到编辑多个帧按钮,导致无法批量处理帧 然后搜索发现原来是有些版本被隐藏了&#xff0c;需要再设置一下 勾选上就好了

day0 3r文档docker部署

3R编码 | 3R教室 - 最好的数字游民学习与交流俱乐部! (3rcd.com) window安装wsl下载不下来&#xff0c;正好有个服务器&#xff0c;就用linux吧密钥长度不匹配&#xff0c;设置一下长度即可 文档启动不成功&#xff0c;单独下载了下nginx&#xff0c;docker pull nginx:latest …

笔记本固态硬盘损坏数据恢复两种方法 笔记本固态硬盘损坏如何恢复

大家好&#xff01;今天要跟大家分享的是笔记本固态硬盘损坏数据恢复的两种方法。相信很多小伙伴都遇到过这种情况&#xff0c;电脑突然蓝屏或者死机&#xff0c;再开机后发现自己的数据不见了&#xff0c;这时候该怎么办呢&#xff1f;这可真是让人头疼。毕竟&#xff0c;我们…

LeetCode-回文数

LeetCode-回文数 解体思路&#xff1a; ①第一种&#xff1a;转换成字符串&#xff0c;使用字符串的现有api方法进行反转 ②第二种&#xff1a;直接使用循环除余乘10方法&#xff0c;进行反转 涉及知识点&#xff1a; 循环判断&#xff0c;StringBuffer&#xff0c;int类型…

Unity中实现游戏对象逐渐放大的脚本教程

这个脚本是用于Unity游戏开发的&#xff0c;其主要功能是使一个游戏对象&#xff08;在这个例子中是一个球体&#xff09;在一段时间内逐渐放大到一个目标大小。脚本使用了Unity的协程&#xff08;Coroutine&#xff09;来实现这一过程&#xff0c;下面是脚本的详细介绍&#x…

C语言实现三叉树

#include <stdio.h> #include <stdlib.h> // 定义三叉树节点结构体 typedef struct TripletNode { int data; struct TripletNode *left; struct TripletNode *middle; struct TripletNode *right; } TripletNode; // 创建新的三叉树节点 Trip…

PSCA复位控制集成之复位信号

组件可能支持两种基本的复位类型。 • 冷复位&#xff1a;重置组件中的所有逻辑。用作上电复位。 • 热复位&#xff1a;重置组件中的大部分逻辑。通常&#xff0c;复位的范围是所有功能逻辑。不包括在热复位中的逻辑会随组件类型而变化&#xff0c;但通常会排除诸如调试和 R…

富格林:正确辨析虚假黑幕平台

富格林悉知&#xff0c;现货黄金自面世以来一直都是投资者关注的焦点。黄金市场的波动性较大&#xff0c;因此在进行交易前&#xff0c;选择一款正规的平台是保障交易的关键。事实上&#xff0c;目前市面上混杂着不少虚假黑幕平台&#xff0c;对于新手投资者来说如何正确辨析虚…

SAP前台处理:物料主数据创建<MM01>之基础视图

一、背景&#xff1a; 终于来到了物料主数据&#xff0c;我觉得物料账是SAP最重要的一项发明&#xff0c;也一直是SAP的一项重要优势&#xff0c;物料账记录了一个个物料的生生不息&#xff1b; 本章主要讲解物料主数据和财务相关的主要内容&#xff1a;这里特别提示由于作者…

MySql安装与卸载—我耀学IT

1.MySql安装 打开下载的mysql安装文件mysql-5.5.27-win32.zip&#xff0c;双击解压缩&#xff0c;运行“setup.exe”。 选择安装类型&#xff0c;有“Typical&#xff08;默认&#xff09;”、“Complete&#xff08;完全&#xff09;”、“Custom&#xff08;用户自定义&…

日志 | 日志级别 | c/c++ | 终端显示不同的颜色

日志想必都知道 优先级从高到低依次为&#xff1a;OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL日志参考1 #define RED "\x1B[31m" #define GRN "\x1B[32m" #define YEL "\x1B[33m" #define BLU "\x1B[34m" #define MAG "…

鸿蒙4.0ArkUI快速入门(一)应用模型

ArkUI篇 应用模型Stage模型FA模型模型对比 应用模型 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼&#xff0c;它提供了应用程序必备的组件和运行机制。 HarmonyOS先后提供了两种应用模型&#xff1a; FA&#xff08;Feature Ability&#xff09;模型&…