Python 在首次创建变量并随后使用时,是否可以将模(%s)放入字符串中?

Python 在首次创建变量并随后使用时,是否可以将模(%s)放入字符串中?,python,python-3.x,dictionary,modulo,Python,Python 3.x,Dictionary,Modulo,我是python新手,如果这是一个愚蠢的问题,请原谅我。我知道如何以这种方式在字符串中使用模 Me = "I'm %s and I like to %s" % ('Mike', 'code') 然而,通过我的搜索,我还没有找到一个答案,是否可以将模硬编码成字符串,然后再利用它 例如: REPO_MENU = {'Issues':Api.github/repo/%s/branch/%s/issues, 'Pull Requests':'Api.github/repo/%s/br

我是python新手,如果这是一个愚蠢的问题,请原谅我。我知道如何以这种方式在字符串中使用模

Me = "I'm %s and I like to %s" % ('Mike', 'code')
然而,通过我的搜索,我还没有找到一个答案,是否可以将模硬编码成字符串,然后再利用它

例如:

REPO_MENU = {'Issues':Api.github/repo/%s/branch/%s/issues,
         'Pull Requests':'Api.github/repo/%s/branch/%s/pull_requests',
         'Commits':'Api.github/repo/%s/branch/%s/commits'
         '<FILTER>: Branch':'Api.github/repo/%s/branch/%s'
        }

for key, value in REPO_MENU.items():
    Print value % ('Beta', 'master')
REPO_菜单={'Issues':Api.github/REPO/%s/branch/%s/Issues,
“拉请求”:“Api.github/repo/%s/branch/%s/Pull_请求”,
“提交”:“Api.github/repo/%s/branch/%s/Commits”
“:Branch”:“Api.github/repo/%s/Branch/%s”
}
对于键,REPO_MENU.items()中的值:
打印值%(“测试版”、“主版”)

这种格式行吗?使用这种方法是好的做法吗?我觉得这在很多情况下都是有益的。

这确实有效。您还可以使用格式功能,该功能运行良好。例如:

menu1 = {'start':'hello_{0}_{1}',
        'end':'goodbye_{0}_{1}'}

menu2 = {'start':'hello_%s_%s',
        'end':'goodbye_%s_%s'}

for key, value in menu1.items():
    print value.format('john','smith')

for key, value in menu2.items():
    print value %('john','smith')

这确实有效。您还可以使用格式功能,该功能运行良好。例如:

menu1 = {'start':'hello_{0}_{1}',
        'end':'goodbye_{0}_{1}'}

menu2 = {'start':'hello_%s_%s',
        'end':'goodbye_%s_%s'}

for key, value in menu1.items():
    print value.format('john','smith')

for key, value in menu2.items():
    print value %('john','smith')

%
是一个与其他操作符类似的操作符;当其左侧操作数是字符串时,它会尝试用右侧操作数的值替换各种占位符。左手操作数是字符串文字还是更复杂的表达式并不重要,只要它的计算结果是字符串。

%
是一个与其他运算符类似的运算符;当其左侧操作数是字符串时,它会尝试用右侧操作数的值替换各种占位符。不管左边的操作数是字符串文字还是更复杂的表达式,只要它的计算结果是字符串。

正如其他答案所指出的,您肯定可以在同一字符串上多次执行字符串模运算。但是,如果您使用的是Python3.6(如果可以的话,您肯定应该这样做!),我建议您不要使用字符串模或
.format
。它们简单易读,非常方便:

格式化字符串文字或f-string是前缀为“f”或“f”的字符串文字。这些字符串可能包含替换字段,这些字段是由大括号{}分隔的表达式。虽然其他字符串文字总是有一个常量值,但格式化字符串实际上是在运行时计算的表达式

因此,f字符串也是可移植的,就像其他格式选项一样

例如:

您可以使用f字串将其添加到任何模块的顶部,作为对其他用户(或未来用户)的有用警报:


正如其他答案所指出的,您完全可以在同一个字符串上多次执行字符串模运算。但是,如果您使用的是Python3.6(如果可以的话,您肯定应该这样做!),我建议您不要使用字符串模或
.format
。它们简单易读,非常方便:

格式化字符串文字或f-string是前缀为“f”或“f”的字符串文字。这些字符串可能包含替换字段,这些字段是由大括号{}分隔的表达式。虽然其他字符串文字总是有一个常量值,但格式化字符串实际上是在运行时计算的表达式

因此,f字符串也是可移植的,就像其他格式选项一样

例如:

您可以使用f字串将其添加到任何模块的顶部,作为对其他用户(或未来用户)的有用警报:


这不是模运算。这是一个格式字符串。模是指整数除法运算的余数(例如,10模7=3);它与字符串无关。除了@KenWhite给出的答案外,如果您使用的是3.x解释器,那么标准的做法是使用
str.format()
方法。它也更灵活,因此不必提供格式说明符。哦,我认为如果您使用的是Python3.6(如果可以,您应该!),那么
'Mike,code'
应该是
'Mike',code'
,不要使用
.format
%
。相反,肯怀特。我经常看到称为模的运算符,即使它用于其他事情,如字符串格式。@RickTeachey谢谢你的建议。我想使用
.format
%
的原因是:1)对我来说,目前它更具可读性(仍在学习中),2)它允许向后兼容无法使用3.x的环境。这不是模运算符。这是一个格式字符串。模是指整数除法运算的余数(例如,10模7=3);它与字符串无关。除了@KenWhite给出的答案外,如果您使用的是3.x解释器,那么标准的做法是使用
str.format()
方法。它也更灵活,因此不必提供格式说明符。哦,我认为如果您使用的是Python3.6(如果可以,您应该!),那么
'Mike,code'
应该是
'Mike',code'
,不要使用
.format
%
。相反,肯怀特。我经常看到称为模的运算符,即使它用于其他事情,如字符串格式。@RickTeachey谢谢你的建议。我想使用
.format
%
的原因是:1)对我而言,目前它更具可读性(仍在学习中),2)它将允许向后兼容无法使用3.x的环境。感谢您的确认,以及+1提供这两个示例。这正是我想要的。谢谢你的确认和+1提供了这两个例子。正是我想要的。谢谢你的详细解释和有用的链接。将来我可能会在经验丰富一点的时候再看fstrings,但现在我想重点介绍一些能为自己提供更多可读性的方法,以便建立我的理解。@CaffeinatedCoder在结尾添加了一个有用的提示。感谢您的详细解释和有用的链接。我可能会在未来的某个时候再次访问fstrings
try: 
    eval(f'')
except SyntaxError:
    print('Python 3.6+ required.')`.
    raise