Python 2.6引入了该str.format()
方法,其语法与现有%
运算符略有不同.哪种情况更好,哪种情况更好?
以下使用每种方法并具有相同的结果,那么有什么区别?
#!/usr/bin/python
sub1 = "python string!"
sub2 = "an arg"
a = "i am a %s" % sub1
b = "i am a {0}".format(sub1)
c = "with %(kwarg)s!" % {'kwarg':sub2}
d = "with {kwarg}!".format(kwarg=sub2)
print a # "i am a python string!"
print b # "i am a python string!"
print c # "with an arg!"
print d # "with an arg!"
Run Code Online (Sandbox Code Playgroud)此外,何时在Python中发生字符串格式化?例如,如果我的日志记录级别设置为HIGH,我仍然会执行以下%
操作吗?如果是这样,有没有办法避免这种情况?
log.debug("some debug info: %s" % some_info)
Run Code Online (Sandbox Code Playgroud)假设我想在前面显示带有可变数量的填充零的数字123.
例如,如果我想以5位数显示它,我会有数字= 5给我:
00123
Run Code Online (Sandbox Code Playgroud)
如果我想以6位数显示它,我会有数字= 6给出:
000123
Run Code Online (Sandbox Code Playgroud)
我将如何在Python中执行此操作?
Rubyist在这里编写Python.我有一些看起来像这样的代码:
result = database.Query('complicated sql with an id: %s' % id)
Run Code Online (Sandbox Code Playgroud)
database.Query
被模拟了,我想测试ID是否被正确注入而不将整个SQL语句硬编码到我的测试中.在Ruby/RR中,我会这样做:
mock(database).query(/#{id}/)
Run Code Online (Sandbox Code Playgroud)
但是我无法在unittest.mock中看到像这样设置'选择性模拟'的方法,至少没有一些毛茸茸的side_effect
逻辑.所以我尝试在断言中使用正则表达式:
with patch(database) as MockDatabase:
instance = MockDatabase.return_value
...
instance.Query.assert_called_once_with(re.compile("%s" % id))
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.这种方法确实有效,但它很难看:
with patch(database) as MockDatabase:
instance = MockDatabase.return_value
...
self.assertIn(id, instance.Query.call_args[0][0])
Run Code Online (Sandbox Code Playgroud)
好主意?