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

发布于:2024-03-19 ⋅ 阅读:(60) ⋅ 点赞:(0)

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则可能更为合适。

本文含有隐藏内容,请 开通VIP 后查看