Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “内部函数”的名称是什么;执行;f字串?_Python_Python 3.x_String_String Interpolation_F String - Fatal编程技术网

Python “内部函数”的名称是什么;执行;f字串?

Python “内部函数”的名称是什么;执行;f字串?,python,python-3.x,string,string-interpolation,f-string,Python,Python 3.x,String,String Interpolation,F String,我已经阅读并看到了许多使用exec延迟执行f字符串的(有效)解决方案,如: template = "My name is {name} and I am {age} years old" name = 'Abcde' age = 123 s = eval('f"""' + template + '"""') # My name is Abcde and I am 123 years old 是否有一个内部Pyth

我已经阅读并看到了许多使用
exec
延迟执行f字符串的(有效)解决方案,如:

template = "My name is {name} and I am {age} years old"
name = 'Abcde'
age = 123
s = eval('f"""' + template + '"""')  # My name is Abcde and I am 123 years old
是否有一个内部Python函数(在许多双下划线
\uuuuuu something\uuuuuuu
函数中),用于定义interepreter如何“运行”/“插值”f字符串?

Python源代码中是否有类似于
\uuu runfstring\uuu
的东西,负责执行代码?如果是这样的话,我们是否可以用如下方式调用此函数:

s = __runfstring__(template)
在最新的Python版本中?(3.7或3.8+)

是否有一个内部Python函数(在许多双欠编码函数中),用于定义InterepMeter如何“运行”/“插值”f字符串

答案是否定的。其中介绍了f字符串:

未指定用于实现f字符串的确切代码。但是,可以保证,任何转换为字符串的嵌入值都将使用该值的
\uuuuuu格式\uuuuu
方法。这与
str.format()
用于将值转换为字符串的机制相同

以及第节中关于的文档:

如果指定了转换,则在格式化之前将转换表达式的计算结果。转换'!s'对结果调用
str()
'!r'调用repr(),和'!a'调用ascii()

然后使用
format()
协议格式化结果。格式说明符被传递到表达式或转换结果的
\uuuuu format\uuuu()
方法。省略格式说明符时,将传递空字符串。格式化后的结果将包含在整个字符串的最终值中


因此,没有为他们实施任何新的措施。它们是建立在现有协议之上的。

与传统的字符串格式相比,您是否有理由需要使用f-strings,例如,只需调用
template.format(name=name,age=age)
on?@TomDalton:是的,以避免必须执行
。如果有许多变量,则使用格式(name=name,age=age,…,var1234=var1234)
。但更一般地说,出于好奇,我想知道哪个
\uuuu internalfunction\uuuu
执行f字符串。如果有帮助,您可以将字典传递/解压缩到
.format
?我认为简单的答案可能是f字符串不适合您的用例。通过调用函数来实现您的目的的问题是,该函数中不存在局部变量,它需要做一些“令人惊讶”的事情。在调用作用域中发现变量。@TomDalton在某些场景中,您事先并不确切知道所有变量,也不想硬编码(例如:您使用新变量更改模板)