【argparse】 菜鸟实用教程指南

请添加图片描述

文章目录

  • 0. 引言
  • 1. argparse简介
  • 2. argparse的使用
  • 3. 实例操作
  • 4. 代码运行
    • 4.1 命令行执行
    • 4.1 IDE执行
  • 5. 总结

0. 引言

在深度学习的过程中,我们常常需要操作和调参大量的参数。如果采用硬编码(直接在代码中赋值)的方式来设置这些参数,不仅会让修改参数变得极其繁琐,还容易引入错误。在深度学习的代码实践中,更常见且高效的做法是使用 argparse 这一库来进行参数管理。这种方法不仅整洁,而且便于参数的调整与管理。然而,我个人总感觉对这部分内容的理解尚不够深刻,因此,我决定仔细研究 argparse ,希望我的探索能为大家带来一些帮助。

重点强调下本文参考学习的链接,感兴趣有能力的童鞋可以先阅读下原文

1. argparse简介

argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。

上面这句话是什么意思呢。python的命令行解析标准模块???
·
我对着话解读一下:
·
其实就是在例如mac中的终端和win中的cmd下,这样的一个纯命令行环境下。我们称这样的环境为命令行,但是现阶段大多数用的还是ide这样的可视化环境取运行。假如你在使用命令行界面执行代码的时候实际上都是不考虑代码本身,而是直接开始进行接口接上直接运行的。举个例子你看电视会考虑电视是如何相识图像的吗??不会吧,仅仅使用± 进行调台吧。因此±就是你赋予命令行的参数,你在和程序进行交互。而这就是这个argsparse的能力,命令行就是这个遥控器,你得输入的参数就是指令而python文件就是电视。argsparse这个模块赋予了命令行界面这样的能力,这最大的好处就是代码对程序的执行者而言就是黑盒子,所以只需要考虑代码是如何运行的或者是更好的运行,不用考虑更多,将修改参数的操作和代码隔离开也是更好的保护代码,其修改参数的难度也会降低。
·

虽然大多数初学者很少用终端这样的纯代码架构:许多开发者可能倾向于在集成开发环境(IDE)中使用图形化界面进行编程和调试,这可能会让人感觉命令行和 argparse 的重要性有所下降。然而,argparse
在很多场景下仍然是极其有用和重要的工具。这并不仅限于直接通过命令行执行程序时的参数传递和处理。以下是 argparse
仍然非常关键的几个方面:

  1. 模块与代码封装argparse 可以被看作是一种封装机制,它允许开发者将应用程序的配置抽象出来,从而使程序在不同环境或条件下运行时更加灵活。

  2. 自动化与脚本执行:在自动化脚本和批处理任务中,argparse 提供了一种向脚本传递参数和修改其行为的高效方式。这在自动化测试、数据处理和系统管理中尤其有用。

  3. 复杂项目和多环境部署:对于需要在多种环境(开发、测试、生产等)中运行,或者参数经常变化的复杂项目,通过命令行参数来控制程序行为是一种常见的做法。argparse
    使这个过程更加标准化和简化。

  4. 深度学习和数据科学领域:在这些领域,实验通常需要根据不同的数据集或不同的模型配置多次运行相同的代码。使用 argparse 来管理这些参数可以极大提高实验的效率,并方便结果的复现。

因此,即使在图形化界面的使用日益普及的今天,argparse
仍然是一个强大的工具,尤其是对于那些需要高度灵活性和可配置性的应用程序来说。它提供了一种有效的方式来处理程序外部参数,使得代码更加模块化,易于维护和扩展。

2. argparse的使用

使用 argparse 模块构建命令行界面程序主要包括以下四个简单步骤:

  1. 导入 argparse
    首先,你需要通过 import argparse 语句来导入 argparse 包,这使得你能够访问该模块提供的功能。

  2. 创建命令行解析器对象
    接下来,通过实例化 ArgumentParser 对象来创建一个命令行解析器。你可以在实例化时提供一个描述字符串作为参数,这个描述将在命令行(简单理解就是你在终端运行python文件会看到。)中使用 -h/--help 查看帮助信息时显示。这个解析器对象是你命令行界面的核心,负责处理传入的命令行参数。

  3. 给解析器添加命令行参数
    然后,通过调用创建的解析器对象上的 add_argument() 方法来添加需要的命令行参数。这一步很关键,因为它定义了用户可以向你的程序传递哪些参数,这包括参数的名字、类型、默认值等。通过精心设计这些参数,你可以使你的命令行程序变得既强大又易于使用。其强大的点就是其不再是简单的赋值,会分析用户传入的信息

  4. 解析命令行的参数
    最后,通过调用解析器对象的 parse_args() 方法来分析命令行提供的参数(即用户添加进来的参数,和其他冲突对数值进行选择)。这一步会根据你之前定义的参数规则来解析用户输入的参数,并将分析结果保存在一个命名空间对象中。这也作文最终会使用的参数,这个对象将作为解析结果,提供展示给你的程序使用。

3. 实例操作

下面是按上述步骤实践的实例代码:

import argparse # 1 导入 `argparse` 包

parser = argparse.ArgumentParser(description='命令行中传入一个数字') # 创建命令行解析器对象
 # description就是这个用于集成各种参数的实例描述
 # 上述过程已经完成了使用教程中的第1,2步操作了。下面为3,4步的操作流程

实质上3,4操作就是parser对象的两种常用方法
首先来看第3步需要使用的方法parser.add_argument

parser.add_argumentargparse 模块中 ArgumentParser
对象的一个方法,用于向你的程序添加命令行参数规则。这个方法非常灵活,提供了多种选项来定义参数的行为和如何处理传入的数据。下面我将解释
add_argument 方法中一些常用的参数及其用法:

name or flags

  • 这是 add_argument 方法中的第一个位置参数,表示参数的名称或标志。位置参数是没有前缀的(如 integers),而可选参数通常使用前缀---(如 -i
    --integers)。位置参数在命令行中是必须的,而可选参数不是。

type

  • type 参数定义了命令行参数应该被转换成的类型。常用的类型包括 intfloatstr 等。如果不指定,默认为字符串类型。

help

  • help 参数提供了一个描述,说明这个参数做什么用。这个描述会在程序的帮助文本中显示,通常可以通过命令行运行程序时加上 -h--help 参数查看。

default

  • default 参数指定了参数的默认值。如果命令行中没有提供这个参数,则使用该默认值。

required

  • 对于可选参数(即使用 -- 前缀定义的),required=True 指定这个参数虽然是以可选参数的形式定义的,但是在命令行中是必须提供的。此选项只对可选参数有效。

choices

  • choices 参数限制参数值必须从你提供的选项中选择。例如,choices=[1, 2, 3] 表示参数值必须是 1、2 或 3。

action

  • action 参数定义了当参数在命令行中存在时应该进行的动作。一些常用的动作包括:
    • 'store':存储参数的值(这是默认动作)。
    • 'store_true' / 'store_false':这些动作分别用于实现布尔开关,参数存在时将对应的变量设为 TrueFalse
    • 'append':这个动作将参数出现的每个值添加到一个列表中。这允许同一个参数在命令行中出现多次,并收集所有的值。

nargs

  • nargs 参数指定命令行参数应该消耗的数量。它可以是一个具体的数字,或者一些特殊字符,比如 ? 表示参数是可选的,* 表示参数可以出现任意次,+ 表示参数至少要提供一次。

这些是 add_argument 方法中的一些常用参数。根据你的需求合理使用这些参数,可以构建出非常灵活和强大的命令行界面。

可以看到有用的就那么几个,这里着重讲一下这个命名位置该如何设定:

即命名的方式会将参数变成两种类型的参数。
位置参数(Positional Arguments)和可选参数(Optional Arguments)

位置参数和可选参数

argparse 中,位置参数(Positional Arguments)和可选参数(Optional Arguments)的主要差异在于它们是否是命令行调用中必需的。

  • 位置参数:是调用命令行程序时必须提供的参数。这意味着,在命令行中运行程序时,用户必须为每个定义的位置参数提供相应的值,且顺序也需要和定义时保持一致。如果缺少位置参数,程序会报错并显示帮助信息。

  • 可选参数:如其名所示,这些参数在命令行中是可选的。它们通常由一个或两个短划线(---)开头,后面跟参数名称。可选参数可以有默认值,也可以进行设置使其成为“必需的”(required=True),但即便是设置为必需,它们也仍然保持可选参数的形式(即通过 --option 的方式提供)。

和命令行互动进行赋值
所有参数(位置参数和可选参数)都能在命令行输入时激活并赋值。区别在于:

  • 位置参数的值是基于它们在命令行中出现的位置来匹配的。
    举个例子:

  • 可选参数则是根据参数名来识别和赋值的。

举个例子:
假设一个程序定义了一个位置参数 filename 和一个可选参数 --verbose

  • 在命令行中调用这个程序时,必须提供 filename 参数的值;否则程序会报错并提示需要这个参数。
    对于位置参数,其值的匹配确实是基于它们在命令行中出现的位置。这意味着,命令行中参数的顺序非常重要,因为它决定了哪个参数值会被解析并赋予到程序定义的哪个位置参数上。

让我们通过一个简单的示例来说明这一点:
示例脚本 example.py:

import argparse

# 创建解析器 
parser = argparse.ArgumentParser(description="示例:位置参数的使用。")

# 定义两个位置参数
 parser.add_argument('first', type=int, help="第一个整数") 
 parser.add_argument('second', type=str, help="第二个字符串")

# 解析命令行参数 
args = parser.parse_args()

# 输出参数值 
print(f"第一个参数(整数): {args.first}")
print(f"第二个参数(字符串): {args.second}") ```

在这个示例中,我们定义了两个位置参数:`first` 和 `second`,分别期待一个整数和一个字符串。

### 运行脚本:

如果我们在命令行中运行这个脚本并按照顺序提供两个参数,比如:

```python example.py 123 hello ```

那么,解析器会将 `123` 赋值给 `first` 参数,将 `"hello"` 赋值给 `second`
参数,因为这是它们在命令行中出现的顺序。因此,脚本的输出将是:

```第一个参数(整数): 123 第二个参数(字符串): hello ```

这个简单的例子展示了位置参数如何基于命令行中的位置来进行匹配和赋值。因此,当使用位置参数时,提供给命令行程序的参数顺序至关重要,因为它直接决定了参数值如何被解析和使用。
  • --verbose 参数则可以根据需要提供或省略,如果省略,程序可以使用定义的默认行为。

在使用 argparse 模块时,通常是将默认值(default 参数)与可选参数结合使用。这是因为,对于位置参数,当用户不提供值时,程序会因为缺少必要的参数而报错,而不是使用默认值。因此,位置参数的主要用途是用于那些程序运行时必须由用户提供的值。

要为一个可选参数设置默认值,可以使用 default 关键字参数:

parser.add_argument('--myoption', default=10,help='一个可选参数,带有默认值') 

在这个例子中,如果用户没有在命令行中指定 --myoption,那么 args.myoption 的值将会是
10。这个做法对于那些不是必须由用户指定,但程序又需要一个预设值来正常运行的参数特别有用。

总的来说,虽然可以对任何类型的参数设置默认值,但在实际应用中,为可选参数设置默认值是更常见且推荐的做法。

因此,赋予位置参数数值是根据位置来识别,而可选参数则是通过参数名来识别。希望这个解释能够帮助您更准确地理解和表述位置参数和可选参数的区别及其在命令行中的应用方式。
比较像类中赋值的* 后面的要指定方式的赋值。看不懂这句话的小伙伴可以跳过不影响阅读。


# 在命令行界面便于看到的使用者知道如何传入参数,以及这类参数来一个统一的描述,
#type是要传入的参数的数据类型  help中指导这个参数是咋个意思
parser.add_argument('integers', type=str, help='传入的数字')

第四步开始:
parser.parse_args()argparse 模块中 ArgumentParser 对象的一个方法,它负责解析命令行输入的参数。这个方法读取 sys.argv(命令行输入的字符串列表,包括脚本的名称和后续传递给脚本的参数),然后根据之前通过 add_argument() 方法定义的规则来解析这些参数。最终,parse_args() 返回一个包含所有命令行参数(已转换为适当类型)的 Namespace 对象。如果用户输入的参数不符合规则,argparse 会自动生成错误信息并停止脚本执行。

用更简单直白的话来说,parser.parse_args()
方法的作用就是:它会读取并分析命令行中提供的参数,根据之前设定的规则(即我们通过 add_argument()
方法设定的规则)来判断哪些参数是有效的,哪些参数的格式正确,并将这些参数及其值以一种容易使用的方式存储起来(通常是一个名为 args的对象)。
这也是为啥被官方文件称为解析的原因。
换句话说,parse_args()
让我们能够在命令行中输入各种参数,并且程序会根据我们之前定义好的规则来“理解”这些参数。一旦参数被“理解”和确认无误,它们就会被存储在一个特定的对象中,我们可以在程序的其他部分直接访问这些参数值,而不用担心参数解析的细节问题。这让命令行程序的开发变得既简单又直观。

args = parser.parse_args()

#获得传入的参数
print(args) # 输出解析出的参数,告诉使用者最终的参数选择情况,让这一行为可视化

4. 代码运行

本节特别强调 argparse 的使用和运行,主要是因为在命令行界面(CLI)与集成开发环境(IDE)如 PyCharm 和 VSCode 中,argparse 的使用方式存在明显差异,这种差异可能会导致一些意料之外的问题。虽然大多数深度学习代码因其操作的便捷性而倾向于在命令行中执行,但许多初学者更习惯于使用 IDE 进行代码开发和调试。因此,为了帮助大家理解这些可能遇到的问题并有效地使用 argparse,本节将通过两种方法详细解释这些复杂的行为。

4.1 命令行执行

首先明确接下来操作的步骤和所使用的代码示例:

import argparse

# 创建命令行参数解析器,并添加描述
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
# 添加一个位置参数 'integers',指定其数据类型和帮助信息
parser.add_argument('integers', type=str, help='传入的数字')

# 解析命令行参数
args = parser.parse_args()

# 打印解析得到的参数对象
print(args)

要尝试运行这段代码,你可以按照以下步骤操作:

  1. 创建一个新的文件夹:在你的桌面或者任意你喜欢的位置创建一个新的文件夹命名为test_argparse,作为你实验的工作空间。

  2. 新建一个 Python 脚本文件:在你刚刚创建的文件夹中,新建一个 .py 文件,例如命名为 testargparse.py

  3. 复制代码到文件中:将上述示例代码复制到你刚新建的 Python 脚本文件中。
    继续之前的步骤,完成代码的运行,可以按照如下指导进行:

  4. 打开命令行界面:在 macOS 中打开“终端”应用,Windows 用户则可以打开“命令提示符”或“PowerShell”。

  5. 切换到工作目录:使用 cd 命令将命令行界面的当前工作目录切换到包含你的 .py 文件的文件夹中。如果你的文件夹位于桌面,并且名为 test_argparse,可以使用如下命令:

    • 在 macOS 或 Linux 上:

    ~/Desktop/test_argparse 这样的命令时,~ 不是省略的意思,而是一个实际可以使用的符号,它会被自动扩展为当前用户的主目录的完整路径。

    cd ~/Desktop/test_argparse
    
    • 在 Windows 上:
      cd %USERPROFILE%\Desktop\test_argparse
      
  6. 运行脚本:最后,针对你的脚本,使用 Python 命令加上脚本名称来运行它。如果你想查看 argparse 自动生成的帮助信息,可以加上 -h--help 参数,这将展示你定义的命令行参数的帮助信息,而不实际运行脚本的其他部分。先执行 -h的目的就是让用户知道帮助信息,这样用户才能知道到底需要补充或者是赋予哪些参数基于代码进行执行

    python testargparse.py -h
    

    运行结果如下(当然这是我的运行环境和你们的可能有些差异):
    请添加图片描述
    注意注意这里是重点
    可以返回的信息是这样的:

usage: testargparse.py [-h] integers  

命令行中传入一个数字 # 这是之前设定的描述内容

positional arguments: # 位置参数 名字是 integers 咱们之前设定的提示信息传入的数字
  integers    传入的数字

optional arguments: # 可选参数  -h, --help 由于没有设定所以只有两个基础的
  -h, --help  show this help message and exit

因此,基于之前的讲解需要在命令行界面赋予integers参数一个数值,只需要按位置赋值就可以了,只有一个。所以需要在命令行中这样执行

python testargparse.py 参数值(自己设定我这里用123举例子)
(base) wangyang@wangyangdeMBP argparse % python testargparse.py 123
Namespace(integers='123')

提示代码运行时采用的integers=‘123’

  1. 操作args字典
    在使用 argparse 模块解析命令行参数后,得到的确实是一个 Namespace 对象。这个对象在外观和用法上类似于 Python 字典,但其实是一个简单的对象实例,允许通过属性访问的方式来获取参数值,而不是字典那样通过键(key)来访问值。
    Namespace 对象

Namespace 对象是 argparse 用来存储解析出来的命令行参数值的容器。每个通过 add_argument 方法定义的命令行参数都会成为 Namespace 对象的一个属性。所以,在您的例子中,integers 参数被解析后存储在 args 对象中,可以通过 args.integers 来访问。

使用案例

根据您的描述,下面的代码展示了如何使用 argparse 来定义、解析命令行参数,并通过属性访问方式读取参数值:

import argparse

# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
# 定义一个位置参数 'integers'
parser.add_argument('integers', type=str, help='传入的数字')

# 解析命令行参数
args = parser.parse_args()

# 获得并打印 'integers' 参数
print(args.integers)

命令行运行指令

当在命令行中运行 python demo.py 123 时,您正确地指出,输出结果将是:

123

这个结果验证了 integers 参数被成功解析并通过 args.integers 访问的过程。

深度学习中调用参数这是通过这样方式实现使用的

8.传入多个参数
当需要通过命令行向 Python 脚本传递多个参数时,可以使用 argparse 模块的 nargs 参数来实现。nargs 参数允许您指定一个命令行参数应该接收多少个值。这对于接受可变数量的参数特别有用。

以下是一些使用 nargs 的不同方式,以及它们的含义:

  • nargs='+':参数至少需要一个值,没有提供值会报错。
  • nargs='*':参数可以有任意个值,包括零个。
  • nargs='?':参数要么没有值(这时使用默认值,如果有的话),要么有一个值。
  • nargs=N(其中 N 是一个整数):参数正好需要 N 个值。

假设您有一个脚本 demo.py,您希望它接受一个名为 integers 的参数,该参数可以传入一个或多个整数值。您可以这样定义 argparse 解析器:

import argparse

parser = argparse.ArgumentParser(description="从命令行接收多个数字。")
parser.add_argument('integers', nargs='+', type=int, help="一个或多个整数")

args = parser.parse_args()

print(args.integers)

在这个例子中,由于设置了 nargs='+',所以 integers 参数可以接收一个或多个整数。如果你运行这个脚本并传入多个整数,比如 python demo.py 1 2 3 4,输出将是:

[1, 2, 3, 4]

这表明 integers 参数成功接收了多个命令行参数,并且它们被存储在一个列表中,通过 args.integers 访问。这种方式使得处理和操作命令行输入的可变数量数据变得方便而直接。

4.1 IDE执行

上文中主要解释了在交互式界面下如何使用。接下来对IDE环境下讲解,如何和传统的.py文件一样进行运行,则代码会报错,我们看一下报错结果:
请添加图片描述
那么是否这样就只能在命令行界面执行代码呢。以下是几种解决方式:

  1. 直接这样运行很傻瓜 ,直接在vscode中的终端在输入命令行指令。图裤子放屁的解决方式
    请添加图片描述
  2. pycharm
    打开你的 Python 脚本。在菜单栏上,点击 Run -> Edit Configurations…。在打开的 Run/Debug Configurations 对话框中,找到 Script parameters 或 Parameters 文本框。在 Script parameters 文本框中输入你的命令行参数,参数之间用空格分隔,如 42。点击 OK 来保存配置,然后运行你的脚本。
  3. vscode
    在 VS Code 中打开你的 Python 脚本。
    在左侧活动栏中,点击 Run and Debug(播放按钮图标),或者从 View 菜单选择 Run。就是左侧的三角形▶️
    请添加图片描述
    点击页面顶部的 Create a launch.json file,选择 Python 环境。
    在这里插入图片描述接着点底下这个带有参数的pyhon文件

在这里插入图片描述

在生成的 launch.json 文件中,找到 “args”: [] 部分,将你的命令行参数作为字符串元素添加到数组中,如:
在这里插入图片描述
请添加图片描述
保存 launch.json 文件并关闭。
注意这个仅限于调试文件,所以运行要使用

可以通过Run and Debug 侧栏或者 F5 键来运行你的脚本
确保将上述示例中的 42 替换为你的实际参数。

通过在 IDE 的运行 / 调试配置中设置命令行参数,你就可以在 IDE 内部运行需要这些参数的脚本了。IDE 会在启动脚本时自动将这些参数传递给它,就像在命令行中运行脚本时手动输入参数一样。

  1. 将代码参数改成可选在IDE下运行

其实只需要将位置参数,改为可选参数就行。根据上文中的给出的代码示例,integers 参数是作为一个位置参数定义的,它在命令行执行时是必需的。若要改为可选参数,做一些调整。

为了让 integers 参数变为可选的,并且能够在 IDE 中运行而不报错(即使没有指定参数),

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
# 修改参数定义为可选的,通过 '--integers' 来指定
parser.add_argument('--integers', type=str, required=False, default="默认值", help='传入的数字')

args = parser.parse_args()

# 获得传入的参数
print(args.integers)

在这个修改之后的版本中,使用 --integers 来指定参数,可以使它变为可选的。这里还添加了参数 ,以及 default="默认值",用于指定当该参数没有被明确提供时的默认值。这样做的话,无论是否在命令行中提供了 --integers 参数,您的脚本都能正常运行。仅需要对默认值进行修改就可以直接使用了。需要修改参数的时候对可选参数的默认值进行修改。直接调用使用。

5. 总结

许多深度学习项目提供的代码示例往往是基于命令行交互式界面设计的。在尝试运行这些代码时,我也遇到了不少难题,经历了一系列的尝试和调整。通过这个过程,我学习到了各种操作和技巧来修改代码,使其能够正常执行。我在这里留下了一些技巧和知识,希望对你遇到的问题提供帮助。坚持下去,加油!
如果你在学习或运行代码过程中有任何疑问或困难,欢迎随时向我提问,我会尽快更新内容来解答你的疑惑。一起努力,探索深度学习的奥秘!

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

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

相关文章

java项目之科研工作量管理系统的设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的科研工作量管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 科研工作…

【C语言】算术运算、关系运算、逻辑运算

算术运算&#xff1a;常见的数字运算&#xff0c;加减乘除等 关系运算&#xff1a;数值之间大小多少的关系 逻辑运算&#xff1a;逻辑与、或、非 #include <stdio.h> /* 功能&#xff1a;算术运算、关系运算、逻辑运算 时间&#xff1a;2024年10月 地点&#xff1a;贤者…

斯坦福 CS229 I 机器学习 I 构建大型语言模型 (LLMs)

1. Pretraining -> GPT3 1.1. Task & loss 1.1.1. 训练 LLMs 时的关键点 对于 LLMs 的训练来说&#xff0c;Architecture&#xff08;架构&#xff09;、Training algorithm/loss&#xff08;训练算法/损失函数&#xff09;、Data&#xff08;数据&#xff09;、Evalu…

Linux INPUT 子系统实验

按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备&#xff0c;只是在此基础上套上了 input 框架&#xff0c;用户只需要负责上报输入事件&#xff0c;比如按键值、坐…

Qt-系统文件相关介绍使用(61)

目录 描述 输⼊输出设备类 打开/读/写/关闭 使用 先初始化&#xff0c;创建出大致的样貌 输入框设置 绑定槽函数 保存文件 打开文件 提取文件属性 描述 在C/C Linux 中我们都接触过关于文件的操作&#xff0c;当然 Qt 也会有对应的文件操作的 ⽂件操作是应⽤程序必不…

八、Linux之实用指令

1、指定运行级别 1.1 基本介绍 运行级别说明 0 &#xff1a;关机 1 &#xff1a;单用户【找回丢失密码】 2&#xff1a;多用户状态没有网络服务&#xff08;用的非常少&#xff09; 3&#xff1a;多用户状态有网络服务&#xff08;用的最多&#xff09; 4&#xff1a;系统未使…

《Effective C++》 笔记

让自己习惯C&#xff0c;Accustoming Yourself to C 1. 视C为一个语言联邦&#xff0c;View Cas a federation of languages. 将 C视为一个由相关语言组成的联邦而非单一语言。在其某个次语言&#xff08;sublanguage&#xff09;中&#xff0c;各种守则与通例都倾向简单、直观…

机器学习笔记-2

文章目录 一、Linear model二、How to represent this function三、Function with unknown parameter四、ReLU总结、A fancy name 一、Linear model 线性模型过于简单&#xff0c;有很大限制&#xff0c;我们需要更多复杂模式 蓝色是线性模型&#xff0c;线性模型无法去表示…

【.net core使用minio大文件分片上传】.net core使用minio大文件分片上传以及断点续传、秒传思路

版本&#xff1a;.net core 7 需求&#xff1a;net限制了上传的大小&#xff0c;只能上传25M上下的文件&#xff0c;如果上传一个八十多兆的文件&#xff0c;swagger接口报错&#xff0c;如果前端调用上传接口&#xff0c;会报CORS跨域错误&#xff0c;这篇文章介绍怎么使用分片…

【X线源】关于滨松MCS2软件的说明

【X线源】关于滨松MCS2软件的说明 1.软件背景2.MCS2界面3.MCS2操作4.常见问题 1.软件背景 滨松为了方便客户将滨松MFX集成进自己的系统&#xff0c;滨松提供了MFX二次开发相关的信息和Demo代码。参考博客说明&#xff1a; 【X线源】关于滨松MFX二次开发demo示例简介 https://…

一个Idea:爆改 T480

爆改 T480 准备大改 T480&#xff0c;家里有一台闲置很久的 T480&#xff0c;不舍得扔&#xff0c;打算升级一下。看了几位up主的视频后&#xff0c;决定动手改造。 计划如下 网卡&#xff1a;加装4G网卡硬盘&#xff1a;更换为 1T 的 NVMe 2280 固态硬盘内存&#xff1a;升…

Unity实战案例全解析 类宝可梦回合制的初级案例 源码分析(加了注释和流程图)

这是一个老教程了&#xff0c;但是对于没有写过回合制的初级程序同学来讲是比较适合的&#xff0c;也可以直接看源码&#xff0c;半小时内可以解决战斗 当然&#xff0c;我也没写过回合制系统所以就到处找&#xff0c;思路明白了就能自己修改了 视频教程 - 油管链接 Turn-Bas…

计算机组成原理(笔记7高速缓冲存储器Cache,计算机组成原理的重难点全、直接、组相连)

为什么要设立高速缓冲存储器 &#xff08;Cache&#xff09;&#xff1f; Cache是介于CPU和主存之间的小容量存储器&#xff0c;存取速度比主存快。它能高速地向CPU提供指令和数据&#xff0c;加快程序的执行速度。它是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。…

代理商培训新策略:利用内部知识库提升培训效果

在当今竞争激烈的市场环境中&#xff0c;代理商作为企业与终端消费者之间的桥梁&#xff0c;其专业能力和服务质量直接影响着企业的市场表现和品牌形象。因此&#xff0c;对代理商进行系统而高效的培训&#xff0c;提升其业务技能和服务水平&#xff0c;成为企业不可忽视的重要…

靶场专用免杀工具

工具 SimpleShellcodeInjector 代码 #include <stdio.h> #include <Windows.h> int main(int argc, char* argv[]) {// HWND hWnd GetConsoleWindow();// ShowWindow( hWnd, SW_HIDE );unsigned int char_in_hex;char* shellcode argv[1];unsigned int iteratio…

SpringCloud集成nacos注册中心

SpringCloud集成nacos注册中心 1、Nacos服务端搭建 下载地址:https://github.com/alibaba/Nacos/releases 1)linux环境启停: ①:把我们的Nacos包解压 tar -zxvf nacos-server-1.1.4.tar.gz ②&#xff1a;cd 到我们的解压目录nacos cd nacos ③&#xff1a;进入到bin目录下…

mysql用户管理(user表列信息介绍,本质,管理操作),数据库的权限管理(权限列表,权限操作)

目录 用户管理 介绍 user表 介绍 列信息 Host User *_priv authentication_string 用户管理的本质 操作 创建用户 删除用户 修改用户信息 修改密码 自己修改 root用户修改指定用户的密码 数据库的权限 权限列表 给用户授权 查看权限 回收权限 刷新权限 …

1、HTML笔记

文章目录 计算机基础知识一、HTML基础Web标准(面试重点&#xff09;为什么需要Web标准Web标准的构成 HTML标签DOCTYPE和 lang 以及charset字符集的使用标题标签段落标签和换行标签文本格式化标签div和span标签图像标签和路径超链接标签注释标签特殊字符表格标签列表标签表单标签…

飞牛NAS未识别到网卡

最新都说国产免费的飞牛NAS非常好用&#xff0c;再也不用搞黑群辉了。 以前也没有搞过NAS&#xff0c;刚好借着这个机会学习一下NAS产品。 在虚拟机上安装&#xff0c;安装还挺顺利&#xff0c;就打算在买来的 也试试&#xff0c;结果系统都安装成功了&#xff0c;但是提示“…

离散数学-逻辑与证明基础1.4(谓词和量词)

谓词 1.4.2 谓词 涉及变量的语句&#xff0c;例如&#xff1a; “ x > 3 x > 3 x>3”&#xff0c;“ x y 3 x y 3 xy3”&#xff0c;“ x y z x y z xyz” 以及 \quad “Computer x x x is under attack by an intruder” \quad “Computer x x x is f…