Python模块百科_命令行参数解析argparse

Python模块百科_命令行参数解析模块argparse

  • 一、简介(argparse)
  • 二、命令行参数解析器类(ArgumentParser)
  • 三、添加命令行参数解析规则(add_argument)
    • 3.1 关键字name or flags
    • 3.2 关键字action
      • 3.2.1 store
      • 3.2.2 store_const
      • 3.2.3 store_true 和 store_false
      • 3.2.4 append
      • 3.2.5 append_const
      • 3.2.6 count
      • 3.2.7 help
      • 3.2.8 version
    • 3.3 关键字nargs
      • 3.3.1 N (an integer)
      • 3.3.2 '?'
      • 3.3.3 '*'
      • 3.3.4 '+'
      • 3.3.5 argparse.REMAINDER
    • 3.4 关键字const
    • 3.5 关键字default
    • 3.6 关键字type
    • 3.7 关键字choices
    • 3.8 关键字required
    • 3.9 关键字help
    • 3.10 关键字dest
    • 3.11 关键字metavar
  • 四、命令行参数解析结果

一、简介(argparse)

  argparse 是 Python 的标准库之一,用于编写用户友好的命令行接口。它提供了一种方式来解析命令行参数和选项,并将它们转换为 Python 对象。

  argparse模块的基本使用包含5步:

  1. import argparse模块
  2. 创建命令行参数解析器对象
  3. 添加命令行参数解析规则
  4. 解析命令行参数
  5. 读取解析结果对象

  以下是简单示例

# 1 import argparse模块
import argparse# 2 创建命令行参数解析器对象
parser = argparse.ArgumentParser(description='Process some integers.')# 3 添加命令行参数解析规则
parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')# 4 解析命令行参数
args = parser.parse_args()# 5 读取解析结果对象
print(args.integers)

二、命令行参数解析器类(ArgumentParser)

  通过ArgumentParser()函数的调用可获取解析器对象ArgumentParser,下面为简单示例

# usage 字段
usage: 程序名 [-h|--help] .....# Description 字段
程序功能描述# 位置参数说明(必选)
positional arguments:...# 可选参数说明
optional arguments:
...# 补充说明字段
...
usage: PROG [-h] [--foo [FOO]] bar [bar ...]bar helppositional arguments:bar          bar helpoptional arguments:-h, --help   show this help message and exit--foo [FOO]  foo helpAnd that's how you'd foo a bar

解析器对象的成员及其功能

名字默认值功能
progsys.argv[0]-h时显示的程序名
usage-usage字段描述
descriptionNonedescription字段描述
epilogNone补充字段描述
parentsNone从父(公共)解析器中继承所有的参数选项
formatter_classNone定制说明文本的显示风格
prefix_class-定制前缀字符,例如前缀**“-b"改为“+b”**
add_helpTrue是否使能显示参数 -h --help
allow_abbrevTrue是否支持长参数
fromfile_prefix_charsNone
argument_defaultNone
conflict_handlerNone

比较常用的是description

parser = argparse.ArgumentParser(description='Process some integers.')

或者

parser = argparse.ArgumentParser()
parser.descritpioin="Process some integers."

三、添加命令行参数解析规则(add_argument)

  add_argument是解析器类ArgumentParsert的核心方法,用于向解析器添加参数解析规则,以下是主要语法

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

  内建方法支持以下的关键字,如下表

关键字简介
name or flags参数名或者"-/–"开头的选项,例如foo或者-f, --foo
action匹配到选项后的行为
nargs选项跟随的参数个数
const在某些actionnargs下,使用的固定值
default默认值
type参数类型
choices可选的参数值范围
required选项必选or可选
help参数描述
metavar使用说明中显示的参数名
dest选项最终在解析结果对象中的名字

3.1 关键字name or flags

  关键字name是什么,flags又是什么,两者有什么差别呢

  name表示参数名,其赋值与位置顺序相关,因此也叫位置参数名,命令行中必须赋值

  flags表示-|--开头的参数名,命令行中可选参数

# 可选的flags参数
parser.add_argument('-f', '--foo')# 必选的name位置参数
parser.add_argument('parm0')
parser.add_argument('parm1')

这里假设--foo需要带1个参数,那么

prog arg1 --foo arg2 arg3
  • arg1 是位置参数parm0的值
  • arg2 是可选参数’-f, --foo’的值
  • arg3 是位置参数parm1的值

  换句话来说,在输入的命令行中,除去所有-|--开头的参数及其带上的参数值之外,剩下的参数都为位置参数,其顺序依次对应使用add_argument注册的位置参数顺序。

  在命令行调用中,位置参数必须赋值,即每个必选参数都要有赋值;而可选参数(-|--)可根据需求选择

3.2 关键字action

  关键字action控制匹配到命令行选项后的行为

  关键字action只支持以下值,如下表:

含义
store保存参数值
store_const关键字const配合使用,保存关键字const的值
store_true保存值为True
store_false保存值为False
append保存多次选项值为列表
append_const关键字const配合使用,保存关键字const的值为列表
const保存选项的出现次数
help效果等效于-h--help
version打印版本

3.2.1 store

  保存参数值,这也是默认的行为

parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.parse_args('--foo 1'.split())

parse_args()之后,--foo选项的值就保存到了parse_args()的解析结果对象中。

可以这样获取解析结果对象的值:

args = parser.parse_args('--foo 1'.split())
print(args.foo)# 执行结果
1

选项名是解析结果对象的成员,而选项对应的值则是成员的值

3.2.2 store_const

在匹配到选项后,存储关键字const的值,常用于命令行中不带参数的选项

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_const', const=42)
args = parser.parse_args(['--foo'])
print(args.foo)# 执行结果
42

从上面的例子,可以看到,在匹配到--foo后,对应成员foo的保存为了const参数的值。

但更多时候,不带参数的选项更多只是表示布尔型的开关,这时候可用store_true或者store_false

3.2.3 store_true 和 store_false

store_truestore_false是一种特殊的store_const,存储的值类型为布尔型TrueFalse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')
parser.add_argument('--baz', action='store_false')
args = parser.parse_args('--foo --bar'.split())
print(args.foo, args.bar, args.baz)# 执行结果
True False True

示例中有3个布尔型“开关”,可以发现有以下特点:

  1. store_true在匹配到命令选项后,保存为True;相对的,store_false保存为False
  2. 当命令行中没匹配到开关后,例如示例中的baz,则保存为store_false的相反值True

3.2.4 append

把所有值保存为一个列表,常用于支持多次选项的情况

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='append')
args = parser.parse_args('--foo 1 --foo 2'.split())
print(args.foo)# 执行结果
['1', '2']

3.2.5 append_const

store_const非常相似,只是把值存储为一个列表。此时如果没有指定关键字const,则默认为Noneappend_const常用于多个不同选项值需要存储到相同成员列表的情况。

parser = argparse.ArgumentParser()
parser.add_argument('--str', dest='types', action='append_const', const=str)
parser.add_argument('--int', dest='types', action='append_const', const=int)
args = parser.parse_args('--str --int'.split())
print(args.types)# 执行结果
[<class 'str'>, <class 'int'>]
  1. 关键字dest用于指定成员名
  2. 参数的值可以是各种对象,包括类型对象,即示例中的str类型int类型

在示例中,--str的常量值是str类型,以列表形式保存到types成员--int的常量值是int类型,以列表形式保存到types成员

3.2.6 count

如果只需要统计选项出现的次数,此处可以用count

parser = argparse.ArgumentParser()
parser.add_argument('--verbose', '-v', action='count')
args = parser.parse_args(['-vvv'])
print(args.verbose)# 执行结果
3

3.2.7 help

打印帮助信息,功能等效于-h|--help

parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('--foo', action='store_true',help='foo the bars before frobbling')
parser.add_argument('bar', nargs='+',help='one of the bars to be frobbled')
parser.parse_args(['-h'])

3.2.8 version

打印版本信息,需要配合关键字version使用,

import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--version', action='version', version='%(prog)s 2.0')
parser.parse_args(['--version'])PROG 2.0

3.3 关键字nargs

关键字nargsnumber argumemts的缩写,表示选项有多少个参数,其支持以下值:

含义
N (an integer)收集N个参数到列表
‘?’无参数或单个参数
‘*’大于等于0个参数
‘+’大于等于1个参数
argparse.REMAINDER只收集不解析

当没有指定关键字nargs时,其实际的值取决于关键字action,例如当action = "store"时,默认获取1个参数,当action = "store_true"时,选项不需要带参数。

3.3.1 N (an integer)

此处的N,表示一个整型数字,含义为选项需要提供N个参数。

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs=2)
parser.add_argument('bar', nargs=1)
args = parser.parse_args('c --foo a b'.split())
print(args.foo, args.bar)# 执行结果
['a', 'b'] ['c']

需要注意的是,当nargs = 1时,其并不等效于关键字nargs的默认情况。

parser = argparse.ArgumentParser()
parser.add_argument('bar0', nargs=1)
parser.add_argument('bar1')
args = parser.parse_args('a b'.split())
print(args.bar0, args.bar1)# 执行结果
['a'] 'b'

可以发现,nargs = 1时,例如bar0,其值是一个列表,一个只有1个元素的列表;而默认情况下,就是一个元素,官方称为item

3.3.2 ‘?’

nargs='?'可以实现3种场景:

  1. 输入的命令行中,选项带参数时,值为附带的参数
  2. 输入的命令行中,没有改选项时,值为关键字default的值
  3. 输入的命令行中,有选项但没带参数时,值为关键字const的值(只适用于可选选项(flag))
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='?', const='c', default='d')
parser.add_argument('bar', nargs='?', default='d')
args = parser.parse_args(['XX', '--foo', 'YY'])
print(args.bar, args.foo)
args = parser.parse_args(['XX', '--foo'])
print(args.bar, args.foo)
args = parser.parse_args([])
print(args.bar, args.foo)# 执行结果
'XX' 'YY'
'XX' 'C'
'd' 'd'

一个更常用的场景,是实现可选的输入输出文件,例如:

parser = argparse.ArgumentParser()
parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout)
print(parser.parse_args(['input.txt', 'output.txt']))
print(parser.parse_args([]))# 执行结果
Namespace(infile=<_io.TextIOWrapper name='input.txt' mode='r' encoding='cp936'>, outfile=<_io.TextIOWrapper name='output.txt' mode='w' encoding='cp936'>)
Namespace(infile=<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>, outfile=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>)

3.3.3 ‘*’

nargs=2会限制一定要有2个参数,如果需要任意多个参数呢?可以用nargs='*'

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='*')
parser.add_argument('--bar', nargs='*')
parser.add_argument('baz', nargs='*')
args = parser.parse_args('a b --foo x y --bar 1 2'.split())
print(args.bar, args.baz, args.foo)# 执行结果
['1', '2'] ['a', 'b'] ['x', 'y']

nargs=N相似,最终的值是列表类型。

3.3.4 ‘+’

nargs='+'nargs='*'从功能上非常相似,唯一不同的地方在于,nargs='+'要求至少要有1个参数,否则会报错。

'?''+''*'的定义与正则表达式中的+*非常相似

在正则表达式中,

  • ?:表示0或1个字符
  • +:表示大于等于1个字符
  • *:表示大于等于0个字符

示例如下:

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('foo', nargs='+')
args = parser.parse_args(['a', 'b'])
print(args.foo)
args = parser.parse_args([])# 执行结果
['a', 'b']
usage: PROG [-h] foo [foo ...]
PROG: error: the following arguments are required: foo

3.3.5 argparse.REMAINDER

nargs=argparse.REMAINDER常用于收集参数后传递给其他的命令行解析工具,其不会解析-|--,只是收集所有选项到列表。

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--foo')
parser.add_argument('command')
parser.add_argument('args', nargs=argparse.REMAINDER)
print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split()))# 执行结果
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')

上例中,argparse没有解析args选项的--arg1,而是全部收集到了一个列表

3.4 关键字const

关键字acton关键字nargs中,其实已经涉及了关键字const的所有功能。

关键字const只是存储一个常量值,在以下两种情况下才会使用:

  1. action='store_const'或者action='append_const'
  2. nargs='?'

当使用action='store_const'action='append_const'时,关键字const必须提供,对其他的action关键字时,默认值为None

3.5 关键字default

选项不带参数,或者命令行没对应选项,这时候就可以使用默认值,而关键字default存储的就是默认值。默认情况下,关键字default的值为None

parser = argparse.ArgumentParser()
parser.add_argument('--foo', default=42)
print(parser.parse_args(['--foo', '2']))
print(parser.parse_args([]))# 执行结果
Namespace(foo='2')
Namespace(foo=42)

如果关键字default赋值的是字符串,而关键字type有指定参数类型,那么就会把字符串转为关键字type指定的类型,

parser = argparse.ArgumentParser()
parser.add_argument('--length', default='10', type=int)
parser.add_argument('--width', default=10.5, type=int)
print(parser.parse_args())# 执行结果
Namespace(length=10, width=10.5)

如果[关键字nargs?或者*,那么default的值会在命令行没有参数时使用,

parser = argparse.ArgumentParser()
parser.add_argument('foo', nargs='?', default=42)
print(parser.parse_args(['a']))
print(parser.parse_args([]))# 执行结果
Namespace(foo='a')
Namespace(foo=42)

关键字default也提供一种特殊用法:default=argparse.SUPPRESS。在这种情况下,如果命令行并没有匹配的选项,那么并不会在解析结果对象中添加选项对应的成员,

parser = argparse.ArgumentParser()
parser.add_argument('--foo', default=argparse.SUPPRESS)
print(parser.parse_args([]))
print(parser.parse_args(['--foo', '1']))# 执行结果
Namespace()
Namespace(foo='1')

3.6 关键字type

默认情况下,argparse解析的参数默认为字符串类型,当然也可以通过关键字type指定其他任何类型,例如floatint,甚至是文件类型file

parser = argparse.ArgumentParser()
parser.add_argument('foo', type=int)
parser.add_argument('bar', type=open)
print(parser.parse_args('2 temp.txt'.split()))# 执行结果
Namespace(bar=<_io.TextIOWrapper name='temp.txt' mode='r' encoding='cp936'>, foo=2)

如果关键字type指定的是文件类型,还可以通过```FileType(‘w’)以可写形式打开文件,

parser = argparse.ArgumentParser()
parser.add_argument('bar', type=argparse.FileType('w'))
print(parser.parse_args(['out.txt']))# 执行结果
Namespace(bar=<_io.TextIOWrapper name='out.txt' mode='w' encoding='cp936'>)

关键字type甚至能指定为函数,经过函数处理后的返回值作为参数值,

def perfect_square(string):value = int(string)sqrt = math.sqrt(value)if sqrt != int(sqrt):msg = "%r is not a perfect square" % stringraise argparse.ArgumentTypeError(msg)return value
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('foo', type=perfect_square)
print(parser.parse_args(['9']))
print(parser.parse_args(['7']))# 执行结果
Namespace(foo=9)
usage: PROG [-h] foo
PROG: error: argument foo: '7' is not a perfect square

3.7 关键字choices

需要限制选项的值范围时可以用关键字choices关键字choices限定了参数值的可选列表,如果命令行提供的参数值不在列表中,则会报错,

parser = argparse.ArgumentParser(prog='game.py')
parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
print(parser.parse_args(['rock']))
print(parser.parse_args(['fire']))# 执行结果
Namespace(move='rock')
usage: game.py [-h] {rock,paper,scissors}
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock', 'paper', 'scissors')

当然,需要注意的是,关键字choice的值必须符合关键字type指定的类型。

3.8 关键字required

默认情况下,-f--foo都是可选的,但如果需要改为必选,可以使用关键字required

parser = argparse.ArgumentParser()
parser.add_argument('--foo', required=True)
print(parser.parse_args(['--foo', 'BAR']))
print(parser.parse_args([]))# 执行结果
Namespace(foo='BAR')
usage: argparse.py [-h] --foo FOO
argparse.py: error: the following arguments are required: --foo

3.9 关键字help

关键字help是选项的说明,在-h或者--help时会显示出来,

parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('--foo', action='store_true', help='foo the bars before frobbling')
parser.add_argument('bar', nargs='+', help='one of the bars to be frobbled')
parser.parse_args(['-h'])# 执行结果
usage: frobble [-h] [--foo] bar [bar ...]positional arguments:bar         one of the bars to be frobbledoptional arguments:-h, --help  show this help message and exit--foo       foo the bars before frobbling

关键字help也支持格式化显示,%(prog)s和大部分**add_argument()**的关键字,包括%(default)s%(type)s,等等,

parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('bar', nargs='?', type=int, default=42, help='the bar to %(prog)s (default: %(default)s)')
parser.print_help()# 执行结果
usage: frobble [-h] [bar]positional arguments:bar         the bar to frobble (default: 42)optional arguments:-h, --help  show this help message and exit

格式为%(keyword)s,如果需要显示%,就需要使用%%

还存在一种特殊情况,如果不希望参数显示在*–help*中,可以用:argparse.SUPPRESS

parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('--foo', help=argparse.SUPPRESS)
parser.print_help()# 执行结果
usage: frobble [-h]optional arguments:-h, --help  show this help message and exit

3.10 关键字dest

argparse会把解析的结果保存成解析结果对象的属性,但是,属性名是什么呢?例如,parser.add_argument(’-f', '--foo'),解析结果是保存在属性f中还是foo中?关键字dest就是用于定制属性名的。

对位置参数而言,关键字dest默认为第一个参数名

parser = argparse.ArgumentParser()
parser.add_argument('bar')
print(parser.parse_args(['XXX']))# 执行结果
Namespace(bar='XXX')

对可选参数而言,关键字dest首选第一个出现的长参数名。如果没有长参数,则选择第一个短参数名。不管选择的是长参数还是短参数,都会把-|--给去掉,同时把名字中的-符号替换为_,以符合python的变量命名规则

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo-bar', '--foo')
parser.add_argument('-x', '-y')
print(parser.parse_args('-f 1 -x 2'.split()))
print(parser.parse_args('--foo 1 -y 2'.split()))# 执行结果
Namespace(foo_bar='1', x='2')
Namespace(foo_bar='1', x='2')

定制属性名

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')
print(parser.parse_args('--foo XXX'.split()))# 执行结果
Namespace(bar='XXX')

3.11 关键字metavar

在执行-h|--help,显示的帮助信息中,如何定制选项带的参数名呢?

-t T  	loop times

希望修改显示的TTIMES,更直观。这时候就可以使用关键字metavar

在默认情况下,对位置参数,会直接显示参数名,对可选参数,则会显示大写

parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('bar')
print(parser.parse_args('X --foo Y'.split()))
parser.print_help()# 执行结果
Namespace(bar='X', foo='Y')
usage: lib_argparse.py [-h] [--foo FOO] barpositional arguments:baroptional arguments:-h, --help  show this help message and exit--foo FOO

上例中,位置参数bar直接显示为bar,而可选参数–foo带的参数名就转大写显示FOO

定制显示的参数名

parser = argparse.ArgumentParser()
parser.add_argument('--foo', metavar='YYY')
parser.add_argument('bar', metavar='XXX')
print(parser.parse_args('X --foo Y'.split()))
parser.print_help()# 执行结果
Namespace(bar='X', foo='Y')
usage: lib_argparse.py [-h] [--foo YYY] XXXpositional arguments:XXXoptional arguments:-h, --help  show this help message and exit--foo YYY

当然,还存在一种特殊情况,就是有多个参数nargs=N,这时候关键字metavar可以以列表形式提供啦,

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-x', nargs=2)
parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz'))
parser.print_help()# 执行结果
usage: PROG [-h] [-x X X] [--foo bar baz]optional arguments:-h, --help     show this help message and exit-x X X--foo bar baz

最后,关键字metavar关键字dest不一样的地方在于,关键字metavar仅仅只影响-h|–help的显示效果,关键dest则同时影响解析结果属性名

四、命令行参数解析结果

  选项名是解析结果对象的成员,而选项对应的值则是成员的值,所以直接使用解析结果的成员值就行

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-x', dest='xyz')
parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz'))# 执行解析
args = parser.parse_args("--foo a b -x c".split())# 读取结果
print(args.foo)
['a', 'b']
print(args.xyz)
c

may the odds be ever in your favor ~

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

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

相关文章

Android 剪切板相关

Android 剪切板相关 本篇文章简单介绍android中的ClipboardManager. 1:简介 ClipboardManager是android中用于管理剪切板一个类.它允许应用程序读取和写入剪切板数据,包括文本,图片等. 2: 获取实例 获取实例也很简单.如下: ClipboardManager clipboardManager (Clipboar…

【UEFI】数字签名的使用

简介 1&#xff09; 数字签名是指附加在数据单元上的一些数据&#xff0c;或是对数据单元所作的密码变换。这种数据或变换能使数据单元的接收者确认数据单元的来源和数据完整性&#xff0c;并保护数据&#xff0c;防止被人伪造。签名机制的本质特征是该签名只通过签名者的私有…

使用python查看官网是否发布新的内容

目录 前言 第一章、python介绍和使用pip install下载包 1.python介绍 2.使用vscode编写python 3.pip install的使用 第二章、查看官网是否发布新的内容 第三章、代码实现 目录结构 代码实现 check_new_news.py files.py news.py main.py file.txt 运行演示 前言 也…

python读写csv和json数据

python读写csv数据 在Python中&#xff0c;读写CSV&#xff08;Comma Separated Values&#xff09;数据通常使用内置的csv模块。以下是一个简单的例子&#xff0c;展示了如何使用csv模块来读取和写入CSV文件。 首先&#xff0c;假设我们有一个名为example.csv的文件&#xff0…

算法训练营day34(补), 动态规划2

//62. 不同路径 func uniquePaths(m int, n int) int { dp : make([][]int, m) // 行赋初始值为1 for i : range dp { dp[i] make([]int, n) dp[i][0] 1 } // 列赋初始值为1 for j : 0; j < n; j { dp[0][j] 1 } for i : 1; i < m; i { for j : 1; j < n; j { dp[…

【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog 前言 在以前的Databricks中&#xff0c;主要由Workspace和集群、SQL Warehouse组成&#xff0c; 这两年Databricks公…

我们在SqlSugar开发框架中,用到的一些设计模式

我们在《SqlSugar开发框架》中&#xff0c;有时候都会根据一些需要引入一些设计模式&#xff0c;主要的目的是为了解决问题提供便利和代码重用等目的。而不是为用而用&#xff0c;我们的目的是解决问题&#xff0c;并在一定的场景下以水到渠成的方式处理。不过引入任何的设计模…

【YOLOX-nano】YOLOX-nano的推理实践

目录 1 pt文件和pth文件的区别 2 安装依赖库 3 模型下载 4 实践 YOLOX-nano.pth模型转换为YOLOX-nano.onnx模型</

【selenium】WebElement、WebDriver、三种等待方式

目录 一、WebElement 1、click()——触发当前元素的点击事件 2、clear()——清空内容 3、sendKeys(...) 4、按键操作&#xff0c;回车 解决button不好定位和点击的情况&#xff0c;用回车去解决 5、getTagName()——获取元素的的标签名 6、getAttribute(当前标签具有的属…

SpringBoot对于SpringMVC的支持

创建项目 版本说明这里使用的 SpringBoot 2.0.0.Release SpringBoot对于SpringMVC的支持 在之前的开发中很多场景下使用的是基于xml配置文件或者是Java配置类的方式来进行SpringMVC的配置。一般来讲&#xff0c;初始的步骤如下所示 1、初始化SpringMVC的DispatcherServlet2、…

设计模式-工厂方法模式(C++)

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但将实际的对象创建过程延迟到子类中。这种模式解耦了具体产品的创建过程&#xff0c;使得系统更加灵活和可扩展。 下面是一个使用 C…

pytest结合Allure生成测试报告

文章目录 1.Allure配置安装2.使用基本命令报告美化1.**前置条件**2.**用例步骤****3.标题和描述****4.用例优先级**3.进阶用法allure+parametrize参数化parametrize+idsparametrize+@allure.title()4.动态化参数5.环境信息**方式一****方式二**6.用例失败截图1.Allure配置安装 …

Jmeter基础(2) 目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前&#xff0c;需要先对工具的目录有些了解&#xff0c;也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

代码随想录 | 216.组合总和III● 17.电话号码的字母组合

216.组合总和III 思路&#xff1a; 和77. 组合思路一致&#xff0c;只不过多了一个cursum用来记录总和。 代码&#xff1a; class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:path []result []def backtracking( k, n, start, cursum):i…

web安全学习笔记【15】——信息打点(5)

信息打点-CDN绕过&业务部署&漏洞回链&接口探针&全网扫描&反向邮件 #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指…

基于springboot财务管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

【C语言必知必会 | 第一篇】C语言入门,这一篇就够了

引言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会】系列第一篇&#xff0c;带你初步了解C语言&#xff0c;为之后的学习打下基础 文章目录 1️⃣发展历史2️⃣语言特点3️⃣语…

论文精读--GPT2

被BERT敲打了&#xff0c;但是仍然坚持解码器架构 Abstract Natural language processing tasks, such as question answering, machine translation, reading comprehension, and summarization, are typically approached with supervised learning on taskspecific dataset…

使用代理IP技术实现爬虫同步获取和保存

概述 在网络爬虫中&#xff0c;使用代理IP技术可以有效地提高爬取数据的效率和稳定性。本文将介绍如何在爬虫中同步获取和保存数据&#xff0c;并结合代理IP技术&#xff0c;以提高爬取效率。 正文 代理IP技术是一种常用的网络爬虫技术&#xff0c;通过代理服务器转发请求&a…

idea和jdk之间对应的版本(idea支持的jdk版本)

idea如果和jdk版本不对应&#xff0c;就会出现无法运行的情况&#xff0c;如下&#xff1a; 翻译&#xff1a;无法确定17的“tools.jar”库的路径&#xff08;C:\Program Files\Java\jdk-17&#xff09; 原因&#xff1a;idea版本是2020.2&#xff0c;而jdk版本是17&#xff0…