如果最后一个变量是空字符串,则调整字符串的格式模式
Adapt the formating pattern of a string if the last variable is an empty string
我有一个 class,它有多个字符串模式作为 class 属性。
这些模式稍后用于创建字符串。
class Main:
pattern_for_a = "{} {} {}"
pattern_for_b = "{} {}-{}"
pattern_for_c = "{}-{} {}"
......................
def do_a(*args, **kwargs):
............
c = pattern_for_a.format(a1,a2,r)
这个 class 有多个子class,在某些情况下会覆盖 patterns.Ex:
class B(Main):
pattern_for_a = "{}:{} {}"
pattern_for_b = "{}-{}{}"
pattern_for_c = "{}{} {}"
当所有 3 个变量都具有实际值时,这很有效。但有些情况下,当
最后一个变量是空字符串。在这种特殊情况下,还需要删除分隔符。
示例:
pattern_for_a = "{}:{}-{}"
a="x" b="y" c="z"
Result: "x:y-z"
pattern_for_a = "{}:{}-{}"
a="x" b="y" c=""
Result: "x:y-"
结果还包含分隔符-
(在这种情况下,分隔符可以是任何char/string),我想是x:y
我可以复制这些模式以获得一个包含所有 3 个可用变量的集合,以及一组单独的模式用于当最后一个变量只是空字符串并结合 if else
条件或仅条件来解决它.
但是因为我有多个模式,需要在多个地方检查,所以我认为这个解决方案不是最优的。
我正在寻找一种不使用重复模式和许多 ifs
的解决方案来解决它。需要在 python2.7 和 3.*.
中工作
如果需要不用if的话,有条件的加上第三个格式部分:
a=123
b=456
c=""
pattern_for_a = "{}:{}"+(c!="")*"-{}"
print(pattern_for_a.format(a,b,c))
如果 c 为空,则字符串乘数将为 0,否则为 1
我会做一些稍微不同的事情。我认为仅指定两种模式不是问题,而且我认为它使事情更易于配置。关键是不必更改格式的工作方式。
class Main:
_pattern_a = ("{}:{} {}", "{}:{}")
def pattern_for(self, name, a, b, c=None):
long, short = getattr(self, f"_pattern_{name}")
if c is None:
return short.format(a, b)
return long.format(a, b, c)
class B(Main):
_pattern_a = ("{}:{}-{}", "{}:{}")
我有一个 class,它有多个字符串模式作为 class 属性。 这些模式稍后用于创建字符串。
class Main:
pattern_for_a = "{} {} {}"
pattern_for_b = "{} {}-{}"
pattern_for_c = "{}-{} {}"
......................
def do_a(*args, **kwargs):
............
c = pattern_for_a.format(a1,a2,r)
这个 class 有多个子class,在某些情况下会覆盖 patterns.Ex:
class B(Main):
pattern_for_a = "{}:{} {}"
pattern_for_b = "{}-{}{}"
pattern_for_c = "{}{} {}"
当所有 3 个变量都具有实际值时,这很有效。但有些情况下,当 最后一个变量是空字符串。在这种特殊情况下,还需要删除分隔符。
示例:
pattern_for_a = "{}:{}-{}"
a="x" b="y" c="z"
Result: "x:y-z"
pattern_for_a = "{}:{}-{}"
a="x" b="y" c=""
Result: "x:y-"
结果还包含分隔符-
(在这种情况下,分隔符可以是任何char/string),我想是x:y
我可以复制这些模式以获得一个包含所有 3 个可用变量的集合,以及一组单独的模式用于当最后一个变量只是空字符串并结合 if else
条件或仅条件来解决它.
但是因为我有多个模式,需要在多个地方检查,所以我认为这个解决方案不是最优的。
我正在寻找一种不使用重复模式和许多 ifs
的解决方案来解决它。需要在 python2.7 和 3.*.
如果需要不用if的话,有条件的加上第三个格式部分:
a=123
b=456
c=""
pattern_for_a = "{}:{}"+(c!="")*"-{}"
print(pattern_for_a.format(a,b,c))
如果 c 为空,则字符串乘数将为 0,否则为 1
我会做一些稍微不同的事情。我认为仅指定两种模式不是问题,而且我认为它使事情更易于配置。关键是不必更改格式的工作方式。
class Main:
_pattern_a = ("{}:{} {}", "{}:{}")
def pattern_for(self, name, a, b, c=None):
long, short = getattr(self, f"_pattern_{name}")
if c is None:
return short.format(a, b)
return long.format(a, b, c)
class B(Main):
_pattern_a = ("{}:{}-{}", "{}:{}")