在python中使用.format()替换字符串的一部分

rqqzpn5f  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(407)

我正在阅读一本关于python的一些高级概念的书,遇到了以下代码块:

SECRET = 'this-is-a-secret'

class Error:
    def __init__(self):
        pass

err = Error()
print(err.__init__.__globals__["SECRET"])
user_input = '{error.__init__.__globals__[SECRET]}'

# Results in accessing the globals dictionary of the object and then the value of secret

print(user_input.format(error=err))

根据代码,我们可以通过使用 .format() 这让他们有点脆弱。我们如何才能仅访问 error 将{}块内部的部分替换为 err 对象
我看到的是 error 部分替换为我们刚才创建的对象。我们不需要完全替换字符串{}块中的内容吗?这个过程是如何进行的 .format() 工作

t9eec4r0

t9eec4r01#

如果您查看字符串格式语法(https://docs.python.org/3/library/string.html#format-字符串语法) error.__init__.__globals__[SECRET] 用户输入的一部分是 field_nameerror 对应于 arg_name 剩下的要么是 attribute_nameelement_index .
所以里面的东西 {} 在您的用户输入中,是有效的语法 str.format . 当您为.format提供参数时,它将替换 arg_name 仅部分,并且您不需要与花括号内的内容完全匹配。

相关问题