从属性链创建字符串!

snakespace的Python项目详细描述


Actions StatuscodecovPyPI - Python VersionPyPI version

蛇形空间

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

SnakeSpaces可以比较、组合和操作

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对象具有一些保留属性,无法用于生成命名空间标签。在

  1. Any dunder methods/attributes(最好避免以双下划线开头构建任何东西)
  2. 这些常见的字符串属性

有趣的例子

轻松地为一个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)

释放

  1. bump2version
  2. 推标签释放
  3. 检查gha

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中的安卓字节[]操作   java如何使用SeleniumWebDriver自动弹出对话框窗口   运行单黄瓜JVM的java。来自Gradle的功能文件   在Java中使用JTA连接到SSH   eclipse为什么在从SVN签出Ant版本1.3时,Ant java项目本身有很多错误?   java如何获取撇号之间的字符串   java锁在单个线程上作为布尔信号量工作吗?   bluej我可以使用什么代码清除屏幕(java)?   java在单击JButton时更改JPanel图标   java将逗号分隔的字符串转换为不带中间容器的列表   java Flink:以集群模式加载资源文件   java删除多对多条目,同时将两个对象都保留在数据库中   将数组值向左移动