从属性链创建字符串!
snakespace的Python项目详细描述
蛇形空间
SnakeSpace
是一个用于从attribute chaining和args/kwargs构建标签命名空间的模块
为什么
为文件或密钥创建一个好的标签是hard。在Python中,str
标签通常通过format strings或字符串连接来生成。首先,格式字符串太好了!但是它们是动态的,如果你不小心,你会得到一个复杂的表达式,你还必须包括那些讨厌的f
和{SnakeSpace
!在
使用SnakeSpace
您只需键入所需的属性链!表达式S.yo.hey.woohoo
完全有效!现在标签可以轻松创建!或者至少以不同的风格。。。在
安装
本次回购使用设置.py,因此它遵循标准的Python安装例程
pip install -U snakespace
或者如果你想从源代码安装
^{pr2}$示例和行为
使用SnakeSpace
可以从链接属性创建标签名称空间。在
fromsnakespaceimportSnakeSpaceS=SnakeSpace()print(S.super.duper.cool)# -> 'super.duper.cool'
您还可以使用s
函数来提供自定义参数
fromsnakespaceimportSnakeSpaceS=SnakeSpace()print(S.my.favorite.number.s(1301))# -> 'my.favorite.number.1301'print(S.yay.kwargs.s(1,2,third=3))# -> 'yay.kwargs.1.2.3'print(S.shoop.s('da').whoop)# -> 'shoop.da.whoop'
{{10}你不能使用特殊的分隔符来改变它
fromsnakespaceimportSnakeSpaceS=SnakeSpace()print(S.a.b.c)# -> 'a.b.c'S.separator='/'print(S.a.b.c)# -> 'a/b/c'
注意!不能用^{
名称间距
SnakeSpace
的行为介于str
和它自己的自定义对象之间。在
当与另一个str
一起操作时,SnakeSpace
的行为类似于str
,例如:S.a + 'woop' # -> 'awoop
。但是,SnakeSpace
在被其他SnakeSpace
操作以支持常见的名称空间操作时,其行为略有不同
SnakeSpace
可用于组合和比较其他SnakeSpace
您可以通过使用in
来查看SnakeSpace
是否是另一个的子空间
fromsnakespaceimportSnakeSpaceS=SnakeSpace()print(S.a.b.cinS.a)# -> Trueprint(S.potatoinS.a)# -> Falseprint(S.data.s(1,2)inS.data)# -> True
SnakeSpace
s可以比较、组合和操作
fromsnakespaceimportSnakeSpaceS=SnakeSpace()# order (lexicographic)print(S.one<S.one.two)# -> Trueprint(S.a.b.c>S.a.b>S.a)# -> True# equalityprint(S.a==S.a)# -> True# additionprint(S.a+S.b)# -> 'a.b'# sizeprint(len(S.apple.bannana.cherry))# -> 3# itemsprint(S.a.b.c[1])# -> 'b'# superspaceprint(S.a%S.a.b.c)# -> Trueprint(S.a.b.c.d%S.a.b.c)# -> False
Snakespace
还附带了多个常用的pythonstr
方法,这些方法在Snakespace
中按元素顺序应用,而不是对整个结果字符串进行操作。在
限制
SnakeSpace
对象具有一些保留属性,无法用于生成命名空间标签。在
- Any dunder methods/attributes(最好避免以双下划线开头构建任何东西)
- 这些常见的字符串属性
有趣的例子
轻松地为一个dict
生成一堆密钥
fromrandomimportrandintfromsnakespaceimportSnakeSpaceS=SnakeSpace()D={}foriinrange(10):D[S.data.s(i)]=randint(0,10)
用一个名称模式生成一堆文件,然后轻松地过滤它们
fromuuidimportuuid4frompathlibimportPathasPthimporttempfileastmpffromsnakespaceimportSnakeSpaceS=SnakeSpace(separator='/')tmp_dir=tmpf.TemporaryDirectory()## Make some filesforiinrange(10):Pth(S.s(tmp_dir.name,uuid4())).touch()forfinPth(tmp_dir.name).iterdir():ifS.a<S(f.parts[-1])<S.z:print(f)
释放
bump2version
- 推标签释放
- 检查gha
- 项目
标签: