我有一个关于默认参数值的Python问题:
def command(one="Number 1", a = "{one} .. {two}"):
two = "Number 2"
a.format(one=one, two=two)
return a
print command()
实际输出:{one}。。{2}
期望输出: 1号。。数字2
如果你有什么建议,请告诉我。 谢谢
后续问题:
import logging
import sys
def command(one="Number 1", a = "{one} .. {two}"):
two = "Number 2"
a = a.format(one=one, two=two)
logging.error(a) # Will print
#logging.debug(a) # Will not print
command()
为什么日志记录错误会打印,但是日志记录.调试不打印?我认为调试级别低于错误级别,应该打印出来。你知道吗
线路
这就是问题所在。因为
str
的值是不可变的,所以这一行的结果是解释器按您所期望的方式格式化,但它不会将值赋回a
(字符串是不可变的)。你知道吗所以当你
您的
a
仍然是以前未格式化的a
。你知道吗解决办法是把这两条线结合起来
针对后续问题:
logging.debug(whatever)
可能不会显示,因为logging
可能尚未配置为显示DEBUG
级别。要更正此问题,请使用basicConfig
函数:str.format
不会修改字符串。它只返回基于其参数的新修改的字符串。所以你真正想要的是这样的:在Python中,
str
和string
函数都没有实际修改它们处理的字符串,而是倾向于返回新字符串。这是因为字符串是不可变的,即它们不能被修改。你知道吗您需要将
a
重新分配给a = a.format(one=one, two=two)
,或者只返回它。你知道吗a.format
不会更改原始字符串a
,字符串是不可变的,因此a.format
所做的就是创建一个新字符串。任何时候修改一个字符串都会创建一个新对象。除非使用连接,否则要更改a
的值,需要将a
重新分配给新对象。你知道吗str.replace
是人们被抓的另一个例子:相关问题 更多 >
编程相关推荐