Python的With...As 语句:优雅管理资源的技术探索【第116篇—With...As 语句】

Python的With…As 语句:优雅管理资源的技术探索

在Python编程中,with...as语句是一项强大而优雅的功能,用于管理资源,如文件、网络连接、数据库连接等。本文将深入介绍with...as语句的用法、其工作原理,并通过代码示例解析其实际应用。

IMG_20231006_183505

1. 什么是with...as语句?

with...as语句是Python中一种上下文管理器的使用方式,主要用于在进入和退出特定代码块时执行必要的操作。最常见的用法是处理资源的分配和释放,确保在离开代码块时资源被正确关闭或释放。

2. 基本语法

with语句的基本语法如下:

with expression as variable:
    # 代码块
    # 在此处使用 variable 来操作资源
# 在这里,资源已经被自动关闭或清理

这里的 expression 通常是返回上下文管理器对象的表达式,而 variable 是一个用于引用资源的变量。

3. 示例:文件操作

让我们通过一个文件操作的例子来演示with...as语句的实际应用:

# 打开文件,读取内容,确保在离开代码块时文件被关闭
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
# 文件已经在离开代码块时被关闭,不需要显式调用 file.close()

4. 代码解析

在上述示例中,open('example.txt', 'r') 返回一个文件对象,该对象是一个上下文管理器。进入with代码块时,上下文管理器的__enter__方法被调用,它负责分配资源并返回相应的对象。退出代码块时,__exit__方法被调用,负责清理和释放资源。

使用with...as语句的好处是,在离开代码块时,无论是正常执行还是发生异常,都会确保资源得到正确关闭。这比手动调用try...finally块更加简洁和可读。

5. 高级应用:自定义上下文管理器

除了文件操作外,我们还可以自定义上下文管理器,实现更灵活的资源管理。以下是一个简单的数据库连接示例:

class DatabaseConnection:
    def __enter__(self):
        # 分配数据库连接资源
        self.connection = create_database_connection()
        return self.connection
    
    def __exit__(self, exc_type, exc_value, traceback):
        # 释放数据库连接资源
        self.connection.close()

# 使用自定义上下文管理器
with DatabaseConnection() as db:
    # 执行数据库操作
    result = db.query("SELECT * FROM table")
    print(result)
# 数据库连接在离开代码块时已被关闭

通过自定义上下文管理器,我们可以更灵活地管理不同类型的资源,并确保它们在退出代码块时得到适当的清理。

6. 异常处理与__exit__方法

在上述例子中,__exit__方法的参数包括 exc_typeexc_valuetraceback,用于处理可能发生的异常。我们可以通过适当的异常处理逻辑来确保即使在代码块中发生异常时,资源也能得到正确的清理。

class DatabaseConnection:
    def __enter__(self):
        self.connection = create_database_connection()
        return self.connection
    
    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type is not None:
            # 发生异常时的处理逻辑,比如记录日志或回滚事务
            print(f"Exception Type: {exc_type}")
            print(f"Exception Value: {exc_value}")
            # 回滚事务等其他处理
        self.connection.close()

# 使用自定义上下文管理器
with DatabaseConnection() as db:
    result = db.query("SELECT * FROM table")
    # 引发异常,例如数据库查询失败
    if result is None:
        raise ValueError("Database query failed")
# 数据库连接在离开代码块时已被关闭,即使发生异常也能正确处理

7. contextlib模块的使用

在某些情况下,可能需要更简洁的方式来创建上下文管理器。Python提供了contextlib模块,其中的contextmanager装饰器允许我们使用生成器函数定义上下文管理器。

from contextlib import contextmanager

@contextmanager
def database_connection():
    connection = create_database_connection()
    yield connection
    connection.close()

# 使用 contextmanager 创建上下文管理器
with database_connection() as db:
    result = db.query("SELECT * FROM table")
    print(result)
# 数据库连接在离开代码块时已被关闭

这种方式避免了显式编写类和实现__enter____exit__方法,使代码更为简洁。

8. 资源管理的高级应用:多个上下文管理器的嵌套

在实际项目中,我们可能需要同时管理多个资源。with...as语句允许我们嵌套多个上下文管理器,以确保所有资源在离开代码块时都得到适当的处理。

class FileAndDatabase:
    def __enter__(self):
        # 打开文件
        self.file = open('example.txt', 'r')
        
        # 创建数据库连接
        self.db_connection = create_database_connection()
        return self.file, self.db_connection
    
    def __exit__(self, exc_type, exc_value, traceback):
        # 关闭文件
        self.file.close()
        
        # 关闭数据库连接
        self.db_connection.close()

# 使用多个上下文管理器
with FileAndDatabase() as (file, db):
    file_content = file.read()
    db_result = db.query("SELECT * FROM table")
    print(file_content, db_result)
# 文件和数据库连接在离开代码块时已被关闭

在这个例子中,FileAndDatabase类同时管理文件和数据库连接,确保在进入和退出代码块时它们都被正确处理。这样的嵌套结构使得我们能够更灵活地组织和管理不同类型的资源。

9. 使用 contextlib 模块简化嵌套

contextlib 模块提供了 nested 函数,可以更简便地嵌套多个上下文管理器。

from contextlib import nested

# 使用 contextlib 中的 nested 函数
with nested(open('example.txt', 'r'), create_database_connection()) as (file, db):
    file_content = file.read()
    db_result = db.query("SELECT * FROM table")
    print(file_content, db_result)
# 文件和数据库连接在离开代码块时已被关闭

contextlib.nested 允许我们一次性管理多个上下文管理器,使代码更加简洁。

10. with...as语句的其他应用场景

除了资源管理外,with...as语句还适用于其他一些场景,例如性能优化。比如,可以使用 timeit 模块结合 with 语句来测量代码的执行时间:

import timeit

# 使用 with 语句测量代码执行时间
with timeit.Timer('some_function()') as timer:
    some_function()
# 打印代码执行时间
print(f"Execution time: {timer.interval}")

这样的用法不仅简洁,而且更容易阅读和维护。

11. 异步上下文管理器与async with...as

随着异步编程的普及,Python引入了异步上下文管理器,可以使用async with...as语句来管理异步资源。这种形式的上下文管理器允许我们在异步环境中更灵活地管理诸如异步文件操作、异步数据库连接等资源。

import asyncio

class AsyncDatabaseConnection:
    async def __aenter__(self):
        self.connection = await create_async_database_connection()
        return self.connection
    
    async def __aexit__(self, exc_type, exc_value, traceback):
        await self.connection.close()

# 使用异步上下文管理器
async with AsyncDatabaseConnection() as async_db:
    result = await async_db.query("SELECT * FROM table")
    print(result)
# 异步数据库连接在离开代码块时已被关闭

在异步上下文管理器中,__aenter____aexit__方法是异步的,允许在进入和退出代码块时执行异步操作。

12. contextlib.asynccontextmanager 的使用

类似于同步环境中的contextlib模块,Python还提供了contextlib.asynccontextmanager装饰器,用于更方便地创建异步上下文管理器。

from contextlib import asynccontextmanager

@asynccontextmanager
async def async_database_connection():
    connection = await create_async_database_connection()
    yield connection
    await connection.close()

# 使用 asynccontextmanager 创建异步上下文管理器
async with async_database_connection() as async_db:
    result = await async_db.query("SELECT * FROM table")
    print(result)
# 异步数据库连接在离开代码块时已被关闭

这种方式使得在异步环境中创建和使用异步上下文管理器更为简洁。

13. 上下文管理器的生命周期

在了解异步上下文管理器的使用之前,理解上下文管理器的生命周期是很重要的。当进入with代码块时,__enter__方法被调用,而在离开时,__exit__方法被调用。无论是同步还是异步,这一生命周期的基本原理是一致的。

14. 异常处理与异步上下文管理器

在异步上下文管理器中,异常的处理方式与同步环境中类似。__aexit__方法中的exc_typeexc_valuetraceback参数可以被用来处理异常。

class AsyncDatabaseConnection:
    async def __aenter__(self):
        self.connection = await create_async_database_connection()
        return self.connection
    
    async def __aexit__(self, exc_type, exc_value, traceback):
        if exc_type is not None:
            print(f"Async Exception Type: {exc_type}")
            print(f"Async Exception Value: {exc_value}")
        await self.connection.close()

# 使用异步上下文管理器处理异常
try:
    async with AsyncDatabaseConnection() as async_db:
        result = await async_db.query("SELECT * FROM table")
        # 触发异常,例如数据库查询失败
        if result is None:
            raise ValueError("Async Database query failed")
except ValueError as e:
    print(f"Caught Exception: {e}")
# 异步数据库连接在离开代码块时已被关闭,即使发生异常也能正确处理

15. contextlib 模块的 ExitStack

在某些情况下,我们可能需要动态地管理多个上下文管理器,这时可以使用contextlib模块中的ExitStack类。ExitStack可以被用于动态创建和管理多个上下文管理器,非常适用于处理数量不确定的资源。

from contextlib import ExitStack

def process_multiple_files(files):
    with ExitStack() as stack:
        file_handles = [stack.enter_context(open(file, 'r')) for file in files]
        # 在这里可以安全地使用 file_handles,它们会在离开 with 代码块时被正确关闭
        for file_handle in file_handles:
            content = file_handle.read()
            print(content)

在这个例子中,ExitStack用于管理多个文件的上下文,无论文件数量如何,都可以安全地确保在离开代码块时关闭所有文件。

16. with...as 语句的上下文表达式

with...as语句中,上下文表达式的返回值会被赋值给变量。这意味着我们可以使用上下文表达式返回的值进行一些额外的操作。

class CustomResource:
    def __enter__(self):
        print("Entering CustomResource")
        return self
    
    def __exit__(self, exc_type, exc_value, traceback):
        print("Exiting CustomResource")

# 使用上下文表达式的返回值进行额外操作
with CustomResource() as resource:
    print("Inside the with block")
    # 在此处可以使用 resource 进行一些额外的操作
print("Outside the with block")

在这个例子中,CustomResource的实例被赋值给了变量resource,可以在with代码块内外使用。

17. 跨足不同领域的 with...as 应用

with...as语句不仅仅局限于资源管理,它还可以应用于其他领域,比如数据库事务、网络连接等。以下是一个简单的数据库事务示例:

class DatabaseTransaction:
    def __enter__(self):
        print("Begin Database Transaction")
        # 开始数据库事务
        self.start_transaction()
        return self
    
    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type is not None:
            print("Rollback Database Transaction")
            # 发生异常时回滚事务
            self.rollback_transaction()
        else:
            print("Commit Database Transaction")
            # 正常退出时提交事务
            self.commit_transaction()

    def start_transaction(self):
        # 实际操作:开始数据库事务
        pass

    def commit_transaction(self):
        # 实际操作:提交数据库事务
        pass

    def rollback_transaction(self):
        # 实际操作:回滚数据库事务
        pass

# 使用跨足不同领域的 with...as 应用
with DatabaseTransaction() as db_transaction:
    # 在此处执行数据库相关操作
    # 如果发生异常,事务会被回滚;否则,事务会被提交

通过这种方式,我们可以在不同领域的应用中利用with...as语句,使代码更加模块化和易于理解。

18. 使用 contextlib 模块的 closing 函数

contextlib 模块还提供了 closing 函数,用于创建一个上下文管理器,确保在离开代码块时调用对象的 close 方法。这在需要处理类似文件、网络连接等需要手动关闭的资源时非常有用。

from contextlib import closing

class CustomResource:
    def close(self):
        print("Closing CustomResource")

# 使用 closing 函数确保 CustomResource 在离开代码块时被关闭
with closing(CustomResource()) as resource:
    print("Inside the with block")
# CustomResource 在离开代码块时已被关闭
print("Outside the with block")

closing 函数创建了一个上下文管理器,确保在 with 代码块结束时调用对象的 close 方法。这样,我们就可以安全地管理需要手动关闭的资源。

19. 资源管理的上下文管理器装饰器

在一些情况下,我们可能需要为现有的类或函数添加上下文管理器的功能。contextlib 模块提供了 contextmanager 装饰器,使得这一过程变得更加简单。

from contextlib import contextmanager

@contextmanager
def resource_manager():
    resource = acquire_resource()
    try:
        yield resource
    finally:
        release_resource(resource)

# 使用 @contextmanager 装饰器创建上下文管理器
with resource_manager() as resource:
    # 在此处使用 resource 进行操作
# 资源在离开代码块时被释放

@contextmanager 装饰器的函数需要使用 yield 语句来指定 __enter____exit__ 方法的实现。这样,我们就可以将现有的函数或类转换成上下文管理器。

20. contextlib 模块的 redirect_stdoutredirect_stderr 函数

contextlib 模块提供了 redirect_stdoutredirect_stderr 函数,用于临时重定向标准输出和标准错误流。这对于在测试和调试时捕获输出非常有用。

from contextlib import redirect_stdout

with open('output.txt', 'w') as f:
    with redirect_stdout(f):
        print("This will be written to output.txt")

在这个例子中,redirect_stdout 将标准输出流重定向到文件中,使得所有的输出都被写入到指定文件。

with...as 语句是Python中用于资源管理的强大工具,通过上下文管理器的灵活应用,我们能够更好地管理文件、网络连接、数据库连接等各种资源。同时,contextlib 模块提供了一些便捷的工具函数,如 closingcontextmanagerredirect_stdout 等,使得上下文管理器的创建和使用更为简便。希望读者通过本文对 with...as 语句及相关技术的全面介绍,能够更加灵活地运用这一特性,提高代码的可维护性和可读性。

21. 在测试中的应用

with...as 语句在测试中也有着重要的应用。unittest 模块中的 unittest.TestCase 类提供了 setUptearDown 方法,可以用于在测试用例执行前后设置和清理资源。

import unittest

class TestMyApp(unittest.TestCase):
    def setUp(self):
        # 在测试用例执行前的设置
        self.app = MyApp()

    def tearDown(self):
        # 在测试用例执行后的清理
        self.app.cleanup()

    def test_something(self):
        # 在此处执行测试操作
        result = self.app.do_something()
        self.assertTrue(result)

通过 setUp 方法,我们可以在每个测试用例执行前创建必要的资源,而 tearDown 方法则用于在每个测试用例执行后清理资源,确保测试用例的独立性。

22. 日志记录中的应用

with...as 语句在日志记录中也常被使用,例如使用 Python 内置的 logging 模块。

import logging

# 配置日志记录器
logging.basicConfig(filename='example.log', level=logging.INFO)

# 使用 with...as 语句记录日志
with open('input.txt', 'r') as file:
    content = file.read()
    logging.info(f'Read content from file: {content}')

在这个例子中,使用 with...as 语句确保文件在离开代码块时被正确关闭,并通过日志记录器记录文件读取的操作。

23. 数据库连接池的管理

在处理数据库连接时,使用 with...as 语句可以确保在离开代码块时正确释放数据库连接。一些数据库连接池库,如 SQLAlchemy 中的 Session 对象,也支持上下文管理器的用法。

from sqlalchemy import create_engine, Session

# 创建数据库连接引擎
engine = create_engine('sqlite:///:memory:')

# 使用 with...as 语句管理数据库连接
with Session(engine) as session:
    result = session.execute('SELECT * FROM table')
    print(result.fetchall())
# 数据库连接在离开代码块时已被释放

在这个例子中,Session 对象充当了上下文管理器,确保在离开代码块时关闭数据库连接,使得数据库连接池得以正确管理。

with...as 语句是 Python 中一项强大而灵活的特性,适用于多个领域,从资源管理到测试、日志记录和数据库连接池的管理。通过深入理解 with...as 语句的用法和其在不同场景下的应用,我们能够更好地编写可维护和健壮的代码。希望本文提供的继续探索 with...as 语句的示例能够帮助读者更好地应用这一特性,提高编程效率。

24. Web 开发中的应用

在 Web 开发中,with...as 语句同样发挥着重要作用。例如,使用 Flask 框架时,可以利用 with app.app_context(): 来创建应用上下文,确保在离开代码块时正确关闭上下文。

from flask import Flask

app = Flask(__name__)

# 使用 with...as 语句创建应用上下文
with app.app_context():
    # 在此处执行需要应用上下文的操作
    db.create_all()
# 应用上下文在离开代码块时已被正确关闭

在这个例子中,app.app_context() 返回一个应用上下文管理器,通过 with...as 语句确保在执行需要应用上下文的操作后正确关闭应用上下文。

25. 使用 contextvars 模块

Python 3.7 引入了 contextvars 模块,允许在协程和线程中传递上下文信息。通过 contextvars.ContextVar 对象,可以在异步编程中实现上下文传递。

import contextvars

# 创建 ContextVar 对象
user_id_var = contextvars.ContextVar('user_id', default=None)

# 在异步环境中使用 with...as 语句传递上下文信息
async def process_request(user_id):
    with user_id_var.set(user_id):
        # 在此处执行需要 user_id 上下文的操作
        result = await do_something()
        print(f"Processed request for user {user_id}: {result}")

# 在异步环境中调用 process_request 函数
asyncio.run(process_request(123))

contextvars.ContextVar 对象允许我们在异步环境中使用 with...as 语句传递上下文信息,确保在协程执行结束后恢复原有的上下文。

26. GUI 编程中的应用

在图形用户界面(GUI)编程中,with...as 语句也可以用于管理界面元素的上下文。例如,使用 tkinter 模块创建一个简单的窗口。

import tkinter as tk

# 创建窗口
root = tk.Tk()

# 使用 with...as 语句管理窗口上下文
with root:
    # 在此处执行需要窗口上下文的操作
    label = tk.Label(root, text="Hello, GUI!")
    label.pack()

# 窗口在离开代码块时已被关闭

在这个例子中,with root: 创建了一个窗口上下文管理器,确保在离开代码块时关闭窗口。

结论

with...as 语句是 Python 中一项非常灵活和广泛应用的语法特性。通过本文的继续探索,读者能够更全面地了解 with...as 语句在不同领域中的应用,包括测试、日志记录、Web 开发、异步编程、GUI 编程等。希望读者能够在自己的项目中灵活运用 with...as 语句,使得代码更为简洁、可读,提高开发效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光子嫩肤仪面罩控制器PCB电路中升压恒流芯片FP7208的应用

护肤已经成为现代人日常生活中不可或缺的一部分,尤其对于追求美丽肌肤的人来说,寻找一款适合自己的护肤利器至关重要。 光子嫩肤仪作为一种高科技美容仪器,受到越来越多人的追捧。其中,FP7208LED升压驱动IC作为其核心部件之一&am…

TQ15EG开发板教程:创建运行petalinux2019.1

工程网盘链接:https://pan.baidu.com/s/1vFRpzmbifXt7GypU9aKjeg 提取码:0ylh 首先需要使用与petalinux相同版本的vivado创建工程,与之前不同的是在创建硬件设计时需要勾选上添加bit文件,所以要在生成bit文件之后再创建硬件设计…

谷粒商城【成神路】-【8】——商品上架

目录 1.数据模型封装 1.es数据模型 2.将es数据模型封装为JAVA bean 3.根据前端发送请求,编写controller 2.模型实现 2.1服务controller 2.2服务service 2.3服务远程调用接口 2.4检索服务controller 2.5检索服务保存到es 2.6库存查询服务 1.数据模型封装 1.es数据模…

银河麒麟之Workstation安装

一、VMware Workstation简介 VMware Workstation是一款由VMware公司开发的虚拟化软件,它允许用户在一台物理计算机上运行多个操作系统,并在每个操作系统中运行多个虚拟机。VMware Workstation提供了一个可视化的用户界面,使用户可以轻松创建、…

纵行科技荣登“中国物联网企业投资价值50强”、“中国物联网行业创新产品榜”

近日,由深圳市物联传媒有限公司、AIoT星图研究院、IOTE组委会、深圳市物联网产业协会主办的“2023‘物联之星’中国物联网行业年度榜单”评选结果正式公布。厦门纵行信息科技有限公司(以下简称“纵行科技”)最终从500多家参评企业中脱颖而出&…

数据库-ODBC操作

一、ODBC 数据源配置 打开ODBC数据源管理器: 在Windows搜索栏中键入“ODBC数据源”并选择“ODBC数据源(64位)”(如果你的系统是64位的)。如果你的系统是32位的,你可以选择“ODBC数据源(32位)”。或者,你可以在控制面…

使用DockerFile构建Tomcat镜像

1、准备镜像文件tomcat压缩包,jdk的压缩包 tomcat链接:https://pan.baidu.com/s/1Xpecb-BSGR2sdxSL7FDtBw?pwd1234 提取码:1234 jdk链接:https://pan.baidu.com/s/1mQHInn27j1I9uuuicBsyAA?pwd1234 提取码:1234 …

网工学习 DHCP配置-接口模式

网工学习 DHCP配置-接口模式 学习DHCP总是看到,接口模式、全局模式、中继模式。理解起来也不困难,但是自己动手操作起来全是问号。跟着老师视频配置啥问题没有,自己组建网络环境配置就是不通,悲催。今天总结一下我学习接口模式的…

信息系统安全与对抗-作业2

目录 1、使用自己姓名拼音创建一个账户, 并使用命令和图形化查看 2、使用自己拼音打头字母创建一个隐藏账户 ,并使用命令和图形化查看 3、使用命令启动 telnet 服务 4、使用命令打开防火墙 23 端口 5、熟悉LINUX系统,使用命令行创建用户…

docker基线安全修复和容器逃逸修复

一、docker安全基线存在的问题和修复建议 1、将容器的根文件系统挂载为只读 修复建议: 添加“ --read-only”标志,以允许将容器的根文件系统挂载为只读。 可以将其与卷结合使用,以强制容器的过程仅写入要保留的位置。 可以使用命令&#x…

不同控制方式下的无人机二维码识别降落对比

无人机技术的快速发展正在推动众多行业的革新,从农业监测、灾害响应到城市规划和物流配送,无人机的应用前景无限广阔。随着应用场景的多样化,无人机精准降落成为一大挑战。基于PX4飞控固件和ROS系统的开源自主无人机平台Prometheus应运而生。…

【Linux】进程间通信之共享内存

文章目录 引入共享内存的原理共享内存的相关接口shmget()shmat()shmdt()shmctl() 共享内存的简单使用共享内存的特点 引入 进程间通信,顾名思义就是一个进程和另一个进程之间进行对话,以此完成数据传输、资源共享、通知事件或进程控制等。 众所周知&am…

Vscode安装,ssh插件与配置

原因 发现很多新人在练习linux,可是只有windows机的时候,一般都是下载虚拟机,然后在虚拟机上安装ubuntu等linux平台。每次需要在linux中写代码,就打开ubuntu,然后在终端上用vim写代码,或者先编辑代码文本&…

hook函数——useReducer

目录 1.useReducer定义2.useReducer用法3.useState和useReducer区别 1.useReducer定义 const [state, dispatch] useReducer(reducer, initialArg, init?) reducer:用于更新 state 的纯函数。参数为 state 和 action,返回值是更新后的 state。state …

JVM相关问题

JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的?二、JVM类加载的双亲委派模型?三、JDK为什么要设计双亲委派模型,有什么好处?四、可以打破JVM双亲委派模型吗?如何打破JVM双亲委派模型?五、什么是内…

Matlab|基于Logistic函数负荷需求响应

目录 1 基于Logistic函数的负荷转移率模型 2 程序示例 3 效果图 4 下载链接 负荷需求响应模型种类较多,有电价型和激励型等类型,本次和大家分享一个基于Logistic函数的负荷转移率模型,该模型属于电价型,由于该方法使用的较少&a…

C++ //练习 10.24 给定一个string,使用bind和check_size在一个int的vector中查找第一个大于string长度的值。

C Primer(第5版) 练习 10.24 练习 10.24 给定一个string,使用bind和check_size在一个int的vector中查找第一个大于string长度的值。。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*****…

云母带(耐火云母带)市场空间不断扩展 电力系统领域为其最大需求端

云母带(耐火云母带)市场空间不断扩展 电力系统领域为其最大需求端 云母带又称耐火云母带,指以云母片为原材料,经过一系列加工工艺制成的带状材料。云母带具有耐燃烧、耐高温、绝缘性好、耐酸碱等特性,在航空航天、石油…

复现nerfstudio并训练自己制作的数据集

网站:安装 - nerfstudio GitHub - nerfstudio-project/nerfstudio:NeRF 的协作友好工作室 安装之前要确保电脑上已经有CUDA11.8或以上版本(更高版本的可以安装11.8的toolkit) 创建环境 conda create --name nerfstudio -y pyt…

Pandas基础介绍

文章目录 Pandas简介什么是Pandas?Pandas数据结构Pandas 应用 Pandas简介 什么是Pandas? Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处…