在 Python 3 中为 Atom 使用 f 字符串时,它不会正确自动完成字符串。正在输入
types_of_people = 10
x = f"There are {types_of_people} types_of_people."
Run Code Online (Sandbox Code Playgroud)
x = f"...当我开始输入但结束引用不会自动完成时,我得到了
当我输入结束语时,我得到x = f"There are {types_of_people} types_of_people."""
如何让最终报价根据需要自动完成?
我去了这个链接。但是当我输入结束引号时,atom 仍然会打印附加引号,而不是仅仅给出结束引号。
我这里有一个字符串:
s0 = 'Ready1 Origin1 Destination1 Type1 Rate1 Phone1 # Pro1 #'
Run Code Online (Sandbox Code Playgroud)
以下变量的计算如下:
is_head = len([i.group() for i in re.finditer(r"(\s+){2,}", s0)]) >= 3
Run Code Online (Sandbox Code Playgroud)
这给了我True对我来说正确且预期的结果。现在我有另一个变量cont_,它可能包含 到 之间的任何2值6。我想根据 的值将正则表达式从 更改r"(\s+){2,}"为。我想获取变量而不为每种情况声明单独的正则表达式。为此,我需要使用 f 字符串以及当前用于正则表达式检查的原始字符串。我已经尝试过这些:r"(\s+){6,}"cont_is_head
>>> len([i.group() for i in re.finditer(fr"(\s+){{cont_},}", s0)]) >= 3
File "<stdin>", line 1
SyntaxError: f-string: single '}' is not allowed
>>> len([i.group() for i in re.finditer(rf"(\s+){{cont_},}", s0)]) >= 3
File "<stdin>", line 1
SyntaxError: f-string: single '}' …Run Code Online (Sandbox Code Playgroud) 有没有办法避免在 python3 中转义大括号字符f-string?
例如,如果你想输出一个 json 字符串或一段 CSS 规则,那么如果你想使用 f 字符串语法,必须将所有{和}字符转换为{{和,这确实很不方便。}}
我知道可以使用eg或字符串模板的旧语法div {color: %s} % color,但'text {}'.format(abc)我想知道是否有一种方法可以在原始文本上使用f字符串,最好是通过一种方法来标记“原始”的开头和结尾带有某种分隔符的块,例如类似于在 java 正则表达式中使用and的方式,以便在正则表达式中包含未转义的原始字符。\Q\E
作为替代方案,标准库中是否有某些东西允许获取一大块原始文本并将其转换为f 字符串安全格式?(同样,类似于如何将Pattern.quote用于 java 正则表达式)
我收到了一个 python 笔记本,其中充满了f"{expr=}"在我的环境中产生错误消息的表达式:
var=7
print(f"{var=}")
File "<fstring>", line 1
(var=)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我怀疑/期望它实际上可能是 的新语法f"expr={expr}",即如以下打印语句所示:
print(f"var={var}")
var=7
Run Code Online (Sandbox Code Playgroud)
事实上,我经常使用后者这样的表达式进行调试,如果有一个它的简写就更好了。
那是比我的(3.7.6)更高版本的Python吗?还是fstring模块的定制?
在网络或 SE 中搜索它并没有什么成效。
如果它不是标准功能,我怎样才能让它工作?
是否可以将 Python f 字符串与可变十进制数字说明符一起使用?这是一个示例,但它不起作用:
print(f'{1.23456:.2f}') # working f-string code
number = 2
print(f'{1.23456:.' + number + 'f}')
Run Code Online (Sandbox Code Playgroud)
Python3.7。
我有一个像这样的 f 字符串:
f"foo-{i:03d}"
Run Code Online (Sandbox Code Playgroud)
这会为我读入的文件生成一个文件名。问题是有时有数百个文件,因此文件的名称类似于 foo-001、foo-002 等,但其他时候有数千个,因此文件的名称为 foo-001、foo-002 等。需要 foo-0001 和 04d。有没有办法可以动态地做到这一点?例如,如果我将文件总数作为变量 n,那么我可以这样做:
pad = len(str(n))
Run Code Online (Sandbox Code Playgroud)
但是我该如何在 f 字符串中使用该 pad 变量呢?
我和一位同事刚刚使用 f 字符串偶然发现了一个有趣的问题。这是一个最小的例子:
>>> f"{ 42:x}"
'2a'
Run Code Online (Sandbox Code Playgroud)
在十六进制类型后面写入空格会导致ValueError:
>>> f"{ 42:x }"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid format specifier
Run Code Online (Sandbox Code Playgroud)
我理解PEP 498 中忽略表达式中的前导和尾随空白段落意味着该空格实际上应该被忽略。
为什么空格字符会导致错误,其背后的原因是什么?
在Python> = 3.6中,f-strings可以用作方法的替代品str.format.举个简单的例子,它们是等价的:
'{} {}'.format(2+2, "hey")
f'{2+2} {"hey"}'
Run Code Online (Sandbox Code Playgroud)
忽略格式说明符,我基本上可以str.format在f字符串中移动内部大括号的位置参数.请特别注意,我可以将str文字放在这里,虽然看起来有点笨拙.
但是有一些限制.具体来说,任何形状或形式的反斜杠都不允许在f字符串的大括号内:
'{}'.format("new\nline") # legal
f'{"new\nline"}' # illegal
f'{"\\"}' # illegal
Run Code Online (Sandbox Code Playgroud)
\如果它在支架内,我甚至不能用它来分开一条长线;
f'{2+\
2}' # illegal
Run Code Online (Sandbox Code Playgroud)
即使\在正常情况下完全允许这种用法str;
'{\
}'.format(2+2) # legal
Run Code Online (Sandbox Code Playgroud)
在我看来,如果它\在f字符串的大括号内完全看到字符,则会将硬停止编码到解析器中.为什么要实施此限制?虽然文档指定了这种行为,但它并不能证明原因.
我想创建一个f字符串,它可以与以下代码一起多次使用format:
TEXT_AMOUNT = 'text {amount}'
def f1(beginning):
return beginning + TEXT_AMOUNT.format(amount=10)
def f2(ending):
return TEXT_AMOUNT.format(amount=100) + ending
Run Code Online (Sandbox Code Playgroud)
如何使用f字符串实现相同的功能?我试过了:
TEXT_AMOUNT = f'text {amount}'
def f1(beginning):
amount = 100
return beginning + TEXT_AMOUNT
def f2(ending):
amount = 10
return TEXT_AMOUNT + ending
Run Code Online (Sandbox Code Playgroud)
但是,出现以下错误:
Run Code Online (Sandbox Code Playgroud)NameError: name 'amount' is not defined
我想将f-string与我的string变量一起使用,而不是与使用字符串常量定义的string一起使用"..."。
这是我的代码
name=["deep","mahesh","nirbhay"]
user_input = r"certi_{element}" # this string i ask from user
for element in name:
print(f"{user_input}")
Run Code Online (Sandbox Code Playgroud)
此代码提供输出:
certi_{element}
certi_{element}
certi_{element}
Run Code Online (Sandbox Code Playgroud)
但我想要:
certi_{deep}
certi_{mahesh}
certi_{nirbhay}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
f-string ×10
python ×9
python-3.x ×8
string ×2
atom-editor ×1
backslash ×1
debugging ×1
escaping ×1
python-3.7 ×1
regex ×1