Python屏蔽输出信息如何屏蔽日志模块的特定级别输出 Python屏蔽输出信息的日志级别管控技巧​

要屏蔽Python输出需分日志与普通输出处理:首先通过设置logging模块的Logger和Handler级别、使用logging.disable()控制日志输出级别;其次对print等普通输出,可重定向sys.stdout和sys.stderr至空流;常见问题如不必要输出多因日志传播至root Logger或第三方库日志未关闭,可通过调整对应Logger级别或设propagate=False解决;高级控制包括使用Filter过滤日志、自定义Handler处理输出及通过dictConfig从配置文件管理日志。

python屏蔽输出信息如何屏蔽日志模块的特定级别输出 python屏蔽输出信息的日志级别管控技巧​

在Python里,要屏蔽输出信息,特别是精细控制日志模块(

logging

)的特定级别输出,核心在于理解并恰当配置

logging

模块的级别设定、处理器(Handler)和过滤器(Filter)。对于非日志模块的普通输出(比如

print()

),则需要通过重定向标准输出流来达到目的。

解决方案

要有效管理Python的输出,我们通常会从两个层面入手:一个是针对

logging

模块,另一个是针对

print()

等直接输出。

1. 精细控制

logging

模块的输出

logging

模块是Python处理日志的标准库,它设计得非常灵活。要屏蔽或控制特定级别的输出,你需要关注以下几个关键点:

立即学习“Python免费学习笔记(深入)”;

Logger的级别设置(

setLevel

:每个Logger都有一个级别。只有当日志记录的级别高于或等于Logger设定的级别时,这条记录才会被Logger处理。

import logging# 获取一个Logger实例logger = logging.getLogger('my_app')logger.setLevel(logging.INFO) # 设置Logger的最低处理级别为INFO# 创建一个控制台处理器ch = logging.StreamHandler()ch.setLevel(logging.DEBUG) # 设置处理器的最低处理级别为DEBUG# 定义日志格式formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')ch.setFormatter(formatter)# 将处理器添加到Loggerlogger.addHandler(ch)logger.debug("这是一条调试信息,通常不会显示,因为Logger级别是INFO。")logger.info("这是一条普通信息,会显示。")logger.warning("这是一条警告信息,会显示。")

在这个例子里,

logger.setLevel(logging.INFO)

意味着任何低于INFO级别的消息(如DEBUG)都会被这个

logger

本身忽略,即使处理器(

ch

)的级别设得再低也没用。

Handler的级别设置(

setLevel

:除了Logger,每个Handler也有自己的级别。一条日志记录只有同时满足Logger和Handler的级别要求,才会被Handler实际输出。这给我们提供了更多灵活性,比如你可以让所有DEBUG级别的日志都写入文件,但只有INFO及以上级别的日志才显示在控制台。

import logginglogger = logging.getLogger('my_app_advanced')logger.setLevel(logging.DEBUG) # Logger本身处理所有级别# 控制台处理器:只显示INFO及以上console_handler = logging.StreamHandler()console_handler.setLevel(logging.INFO)console_handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))logger.addHandler(console_handler)# 文件处理器:记录所有DEBUG及以上file_handler = logging.FileHandler('app.log')file_handler.setLevel(logging.DEBUG)file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))logger.addHandler(file_handler)logger.debug("这条调试信息不会在控制台显示,但会写入文件。")logger.info("这条信息会在控制台显示,也会写入文件。")

使用

logging.disable()

:如果你想在某个特定时期(比如测试或部署时)完全关闭所有或某个级别以下的日志输出,

logging.disable()

是一个非常直接的全局控制方法。

import logginglogging.basicConfig(level=logging.INFO) # 基础配置,默认输出INFO及以上logger = logging.getLogger(__name__)logger.info("这条信息会显示。")# 禁用所有低于WARNING的日志(即只显示WARNING、ERROR、CRITICAL)logging.disable(logging.WARNING)logger.info("这条信息现在不会显示了。")logger.warning("这条警告信息仍然会显示。")# 恢复日志输出(设置为NOTSET会恢复到默认行为,即由Logger和Handler的级别决定)logging.disable(logging.NOTSET)logger.info("日志功能已恢复,这条信息又会显示了。")

这招在某些场景下特别好用,比如你想暂时压制第三方库那些你根本不关心的DEBUG信息。

2. 屏蔽

print()

等普通输出

对于不是通过

logging

模块输出的内容,比如直接使用

print()

函数,或者某些库内部直接打印到标准输出(

sys.stdout

)或标准错误(

sys.stderr

)的信息,我们需要通过重定向这些流来屏蔽。

import sysimport osfrom io import StringIO# 保存原始的stdout和stderroriginal_stdout = sys.stdoutoriginal_stderr = sys.stderr# 创建一个假的输出流,所有写入都会被丢弃# 或者可以重定向到os.devnull,但StringIO在内存中更灵活devnull = StringIO() # 或者 open(os.devnull, 'w')try:    sys.stdout = devnull    sys.stderr = devnull    print("这条信息不会显示在控制台。")    # 假设某个库内部有直接的print语句    # library_function_that_prints()except Exception as e:    # 错误处理,确保最终恢复stdout/stderr    print(f"发生错误: {e}", file=original_stderr)finally:    # 恢复原始的stdout和stderr,非常重要!    sys.stdout = original_stdout    sys.stderr = original_stderrprint("这条信息会正常显示在控制台。")

这种方法比较暴力,它会屏蔽所有通过

print

或直接写入

sys.stdout

/

sys.stderr

的内容。通常只在特定、需要完全静默的场景下使用,比如运行一些有副作用的第三方脚本时。

为什么我设置了日志级别,但还是看到了不想要的输出?

这绝对是初学者,甚至是一些有经验的开发者都会遇到的困惑。我个人就遇到过好几次,明明我把自己的Logger级别设得很高了,怎么还能看到一堆DEBUG信息蹦出来?这背后其实有几个核心原因,理解它们能帮你彻底搞定日志的“噪音”。

日志器的层级与传播(Propagation)机制:Python的

logging

模块有一个很重要的概念叫做“日志器层级”。当你创建一个

logging.getLogger('my_module.sub_module')

时,它其实是继承自它的父级日志器

my_module

,而

my_module

又继承自

root

日志器。默认情况下,日志记录会从子日志器向上传播到父日志器,直到根日志器(

root

logger)。如果你的子日志器级别设置得很高(比如

WARNING

),但它的父日志器(或者

root

logger)级别设置得很低(比如

DEBUG

),并且父日志器有处理器,那么即使子日志器不处理这条

DEBUG

消息,它也可能把这条消息传递给父日志器,然后父日志器再把它输出出来。要阻止这种传播,你可以设置

logger.propagate = False

import logging# 默认root logger是WARNING级别,但很多框架会把它设为INFO或DEBUG# logging.basicConfig(level=logging.DEBUG) # 假设root logger是DEBUGapp_logger = logging.getLogger('my_app')app_logger.setLevel(logging.INFO) # 我只想看INFO及以上# app_logger.propagate = False # 尝试禁用传播# 给root logger添加一个handler,如果root logger有handler且级别较低,就可能输出# 如果没有这一行,且没有basicConfig,root logger默认是WARNING,可能不会输出DEBUGif not logging.root.handlers: # 避免重复添加    logging.basicConfig(level=logging.DEBUG) # 确保root logger有handler且级别较低app_logger.debug("这条调试信息理论上不该出现,但如果root logger处理,它就会出现!")

很多时候,你看到的不想要的输出,其实是

root

日志器在“捣乱”,因为很多库或者默认配置都会把日志流最终导向

root

日志器。

处理器(Handler)的级别比日志器(Logger)的级别更低:我们前面提到过,一个日志事件要被输出,必须同时满足Logger和其附加的Handler的级别要求。但反过来想,如果Logger的级别是

INFO

,而它附加的Handler的级别是

DEBUG

,那么只有

INFO

及以上的消息才能通过Logger这一关,

DEBUG

消息在Logger那里就被过滤掉了,根本到不了Handler。但如果Logger的级别是

DEBUG

,而Handler的级别是

INFO

,那么

DEBUG

消息会通过Logger,但在Handler那里被过滤掉,

INFO

及以上的消息才能被Handler输出。所以,确保你的Logger和Handler的级别设置是协同工作的。

第三方库的日志器:这是一个非常常见的问题。你可能配置好了自己应用的日志,但当你引入像

requests

urllib3

SQLAlchemy

等第三方库时,它们内部也可能使用

logging

模块,并且有自己的日志器实例(例如

logging.getLogger('requests.packages.urllib3')

)。这些库的日志器默认级别可能很低(比如

DEBUG

),而且它们通常会将日志传播到

root

日志器。要解决这个问题,你需要显式地去调整这些特定第三方库的日志器级别:

import loggingimport requests# 禁用requests库的DEBUG日志logging.getLogger('requests').setLevel(logging.WARNING)logging.getLogger('urllib3').setLevel(logging.WARNING) # requests依赖urllib3# 确保自己的应用日志正常app_logger = logging.getLogger('my_app')app_logger.setLevel(logging.INFO)if not app_logger.handlers: # 避免重复添加    app_logger.addHandler(logging.StreamHandler())app_logger.info("我的应用信息。")requests.get('https://www.example.com') # 这次应该不会看到requests的DEBUG信息了

这需要你对你使用的库有所了解,或者在运行程序时留意那些不属于你代码的日志来源,然后针对性地去调整它们的日志器。

除了调整级别,还有哪些更高级的日志输出控制技巧?

仅仅调整级别有时候还不够,特别是在需要更细粒度控制,或者日志量非常大的时候。Python的

logging

模块提供了非常强大的机制,可以让你玩出更多花样。

日志过滤器(Filters):这是我觉得

logging

模块里最被低估但又异常强大的功能。过滤器允许你在日志记录被处理之前,根据任何自定义逻辑来决定是否通过。你可以附加过滤器到Logger或Handler上。一个常见的应用场景是,你只想记录来自特定模块的日志,或者排除包含某些敏感信息的日志。

import loggingclass SpecificModuleFilter(logging.Filter):    def __init__(self, name=''):        super().__init__(name)        self.module_name = name    def filter(self, record):        # 只允许来自特定模块的日志通过        # record.name 是Logger的名字,record.module 是产生日志的模块名        # 这里我们根据Logger的名字来过滤        return record.name.startswith(self.module_name)logger = logging.getLogger('my_app.sub_module')logger.setLevel(logging.DEBUG)ch = logging.StreamHandler()ch.setLevel(logging.DEBUG)ch.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'))# 添加过滤器到Handlerch.addFilter(SpecificModuleFilter('my_app')) # 只允许'my_app'及其子Logger的日志通过logger.addHandler(ch)# 另一个Loggerother_logger = logging.getLogger('another_module')other_logger.setLevel(logging.DEBUG)other_logger.addHandler(ch) # 共享同一个handlerlogger.debug("这是my_app.sub_module的调试信息,会被过滤通过。")other_logger.debug("这是another_module的调试信息,会被过滤器阻止。")

通过自定义

filter

方法,你可以实现任何复杂的过滤逻辑,比如根据日志消息内容、日志记录的额外属性(

extra

参数)、甚至当前用户身份来决定是否记录。

自定义处理器(Custom Handlers):如果内置的

StreamHandler

FileHandler

RotatingFileHandler

等无法满足你的需求,你可以继承

logging.Handler

类来创建自己的处理器。这在需要将日志发送到非标准目的地时非常有用,比如:

发送到消息队列(Kafka, RabbitMQ)。发送到数据库。发送到远程API服务。在特定条件下执行回调函数。甚至可以创建一个

NullHandler

,它什么都不做,但可以用来防止“No handlers could be found for logger”的警告。

import logging

class CustomDiscardHandler(logging.Handler):def emit(self, record):

这个处理器什么都不做,只是丢弃日志记录

    # 你可以在这里加入复杂逻辑,比如只记录特定类型的错误    pass

logger = logging.getLogger(‘discard_logger’)logger.setLevel(logging.INFO)

添加自定义的丢弃处理器

discard_handler = CustomDiscardHandler()logger.addHandler(discard_handler)

默认的控制台处理器,用于对比

console_handler = logging.StreamHandler()console_handler.setLevel(logging.INFO)logger.addHandler(console_handler)

logger.info(“这条信息会显示在控制台,但也会被CustomDiscardHandler接收但丢弃。”)

自定义处理器提供了极大的灵活性,让你可以完全控制日志记录的最终去向和处理方式。

通过配置文件进行日志管理(

dictConfig

/

fileConfig

:当你的日志配置变得复杂时,比如有多个Logger、多个Handler、不同的Formatter和Filter时,用代码一行一行地配置会变得非常冗长且难以维护。Python的

logging.config

模块提供了从字典(

dictConfig

)或文件(

fileConfig

,支持INI格式)加载配置的功能。这使得日志配置可以与代码分离,方便修改和部署,也更清晰。

# logging_config.yaml (示例YAML配置,需要安装PyYAML)# version: 1# disable_existing_loggers: False## formatters:#   simpleFormatter:#     format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'## handlers:#   console:#     class: logging.StreamHandler#     level: INFO#     formatter: simpleFormatter#     stream: ext://sys.stdout#   file_handler:#     class: logging.handlers.RotatingFileHandler#     level: DEBUG#     formatter: simpleFormatter#     filename: app.log#     maxBytes: 10485760 # 10MB#     backupCount: 5## loggers:#   my_app:#     level: DEBUG#     handlers: [console, file_handler]#     propagate: False # 不向上级传播#   another_module:#     level: WARNING#     handlers: [console]## root:#   level: INFO#   handlers: [console]

然后,在你的Python代码中:

import logging.configimport yaml # pip install pyyaml# 假设logging_config.yaml在同一目录下with open('logging_config.yaml', 'r') as f:    config = yaml.safe_load(f.read())    logging.config.dictConfig(config)logger = logging.getLogger('my_app')other_logger = logging.getLogger('another_module')logger.debug("这是my_app的调试信息,会写入文件,但不会在控制台显示(因为console handler是INFO)。")logger.info("这是my_app的普通信息,会写入文件,也会在控制台显示。")other_logger.info("这是another_module的普通信息,不会显示(因为another_module是WARNING)。")other_logger.warning("这是another_module的警告信息,会在控制台显示。")

使用配置文件是管理复杂日志策略的黄金标准,它让日志配置变得声明式,清晰易读,也方便团队协作。

如何临时或全局性地关闭Python的日志输出?

有时候,我们可能需要更粗暴、更直接的方式来关闭日志,无论是为了性能测试、调试特定问题,还是在部署环境中临时屏蔽所有非关键日志。这里有几种方法,各有侧重。

使用

logging.disable(level)

进行全局控制:这是

logging

模块提供的一个非常方便的全局开关。当你调用

logging.disable(level)

时,它会告诉

logging

模块:所有级别低于

level

的日志记录都将被忽略,无论它们的Logger或Handler设置了什么级别。如果你想完全关闭所有日志,可以传入

logging.CRITICAL + 1

,或者一个足够高的值。

import logging# 假设我们已经有了一些日志配置logging.basicConfig(level=logging.DEBUG, format='%(levelname)s: %(message)s')logger = logging.getLogger('my_app')logger.debug("这条调试信息会显示。")logger.info("这条普通信息会显示。")print("n--- 临时禁用所有INFO及以下的日志 ---")# 禁用所有低于WARNING的日志logging.disable(logging.WARNING)logger.debug("这条调试信息现在不会显示了。")logger.info("这条普通信息现在也不会显示了。")logger.warning("这条警告信息仍然会显示。")print("n--- 临时禁用所有日志 ---")# 禁用所有日志(通过设置一个比CRITICAL更高的级别)logging.disable(logging.CRITICAL + 1)logger.error("这条错误信息现在也不会显示了。")print("n--- 恢复日志功能 ---")# 恢复日志功能(设置为NOTSET会取消禁用)logging.disable(logging.NOTSET)logger.info("日志功能已恢复,这条信息又会显示了。")

以上就是Python屏蔽输出信息如何屏蔽日志模块的特定级别输出 Python屏蔽输出信息的日志级别管控技巧​的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1368037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python命令怎样激活已创建的虚拟环境 Python命令激活环境的操作技巧
上一篇 2025年12月14日 08:26:27
Python怎样操作YAML配置文件?PyYAML使用指南
下一篇 2025年12月14日 08:26:51

相关推荐

  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    300
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    100
  • 获取日期中的周数:CodeIgniter 教程

    本教程旨在帮助开发者在 CodeIgniter 框架中,从日期字符串中准确提取周数。我们将使用 PHP 内置的 DateTime 类,并提供详细的代码示例和注意事项,确保您能够轻松地在项目中实现此功能。 使用 DateTime 类获取周数 PHP 的 DateTime 类提供了一种便捷的方式来处理日…

    2026年5月10日
    100
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • 如何让动态追加元素的类事件生效?

    如何在追加元素后使其绑定类事件生效 在页面中引入三方 JavaScript 类并通过添加相应 class 来调用事件方法是一种常见的做法。然而,如果通过 JavaScript 追加标签元素,即使添加了对应的 class,事件也可能无法生效。 为了解决这个问题,可以尝试以下步骤: 检查追加的标签是否为…

    2026年5月10日
    000
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • 理解编程指令:当结果正确,但实现方式不符要求时

    本文探讨了在编程实践中,即使程序输出了正确的结果,但若其实现方式未能严格遵循既定指令,仍可能被视为“不正确”的问题。我们将通过具体示例,对比直接求和与累加求和两种实现策略,强调理解和遵守编程规范的重要性,以确保代码的健壮性、可维护性及符合项目要求。 在软件开发过程中,我们经常会遇到这样的情况:编写的…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • Discord.py 交互按钮超时与持久化解决方案

    本教程旨在解决Discord.py中交互按钮在一段时间后出现“This Interaction Failed”错误的问题。我们将深入探讨视图(View)的超时机制,并提供通过正确设置timeout参数以及利用bot.add_view()方法实现按钮持久化的具体方案,确保您的机器人交互功能稳定可靠,即…

    2026年5月10日
    000
  • Python递归函数追踪与性能考量:以序列打印为例

    本文深入探讨了Python中一种递归打印序列元素的方法,并着重演示了如何通过引入缩进参数来有效追踪递归函数的执行流程和参数变化。通过实际代码示例,文章揭示了递归调用可能带来的潜在性能开销,特别是对调用栈空间的需求,以及Python默认递归深度限制可能导致的错误,为读者提供了理解和优化递归算法的实用见…

    2026年5月10日
    000
  • python中zip函数详解 python多序列压缩zip函数应用场景

    zip函数的应用场景包括:1) 同时遍历多个序列,2) 合并多个列表的数据,3) 数据分析和科学计算中的元素运算,4) 处理csv文件,5) 性能优化。zip函数是一个强大的工具,能够简化代码并提高处理多个序列时的效率。 在Python中,zip函数是一个非常有用的工具,它能够将多个可迭代对象打包成…

    2026年5月10日
    000
  • Python中怎样使用pymongo?

    在python中使用pymongo可以轻松地与mongodb数据库进行交互。1)安装pymongo:pip install pymongo。2)连接到mongodb:from pymongo import mongoclient; client = mongoclient(‘mongod…

    2026年5月10日
    000
  • JS如何实现迭代器?迭代器协议

    JavaScript中实现迭代器需遵循可迭代协议和迭代器协议,通过定义[Symbol.iterator]方法返回具备next()方法的迭代器对象,从而支持for…of和展开运算符;该机制统一了数据结构的遍历接口,实现惰性求值,适用于自定义对象、树、图及无限序列等复杂场景,提升代码通用性与…

    2026年5月10日
    100
  • 三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布

    三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布三星不再独享,消息称搭载骁龙 8 Gen 3 领先版处理器新机即将发布

    6 月 15 日消息,据博主@肥威 今日爆料,搭载骁龙 8 Gen 3 领先版%ign%ignore_a_1%re_a_1%的新机即将发布,把之前的 for Galaxy 改成“for Everybody”。 Pic Copilot AI时代的顶级电商设计师,轻松打造爆款产品图片 158 查看详情 …

    2026年5月10日 用户投稿
    100
  • Go语言网络编程入门:构建TCP客户端/服务器

    本文旨在为Go语言初学者提供一份简洁明了的网络编程入门指南,重点介绍如何使用TCP套接字构建简单的客户端/服务器应用。通过示例代码和注意事项,帮助读者快速上手Go语言的网络编程,并了解一些最佳实践。 Go语言对网络编程提供了强大的支持,通过标准库net包,可以轻松实现各种网络应用。本文将重点介绍如何…

    2026年5月10日
    000
  • Golang使用Protobuf定义接口与消息格式

    Protobuf通过字段编号实现兼容性,新增字段可忽略、删除字段可保留编号,确保新旧版本互操作,支持服务独立演进。 在Golang项目中,利用Protobuf定义接口和消息格式,本质上是为服务间通信构建了一套高效、类型安全且跨语言的契约。它让数据结构清晰可见,RPC调用标准化,极大地简化了分布式系统…

    2026年5月10日
    000
  • 高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行

    高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行

    【环球网科技综合报道】10月17日消息,高通今日对 2023 骁龙峰会进行了预热,本次大会将以 %ign%ignore_a_1%re_a_1% 为主题,届时骁龙 8 gen 3 处理器也很大可能在本届峰会亮相。 在临近活动召开之日,相关业内人士也透露了高通骁龙8Gen3跑分及规格。据悉,高通骁龙8 …

    2026年5月10日 用户投稿
    000
  • Python 函数参数类型:如何使用可变参数和动态参数?

    python 中的参数类型:关键词参数、可变参数和动态参数 在 python 中,函数的参数可以分为以下几种类型: 关键词参数(kw)**:这些参数具有名称,并且在调用函数时明确指定。可变参数(*args):这些参数没有名称,允许函数接受任意数量的位置参数。它们将被收集到一个元组中。动态参数(kwa…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信