标签: f-string

为什么 `'{x[1:3]}'.format(x="asd")` 会导致 TypeError?

考虑一下:

>>> '{x[1]}'.format(x="asd")
's'
>>> '{x[1:3]}'.format(x="asd")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
Run Code Online (Sandbox Code Playgroud)

造成这种行为的原因是什么?

python typeerror f-string

35
推荐指数
2
解决办法
1789
查看次数

Python 3.6中的f-strings

我真的很想深入研究代码风格,从现在开始知道从现在开始使用新风格会更好.

.format()在我的Python 3.5项目中使用了很多,并且我担心在下一个Python版本中它会被弃用,因为这种新的字符串文字.

>>> name = "Test"
>>> f"My app name is {name}."
'My app name is Test.'
Run Code Online (Sandbox Code Playgroud)

格式化的字符串功能是否完全取代旧的format()

我理解它基于这样的想法:

简单比复杂更好.

但是,性能问题如何,它们之间是否存在差异?或者它只是一个简单的相同功能的外观?

python python-3.x python-3.6 f-string

34
推荐指数
3
解决办法
2万
查看次数

为什么Python 3.6 alpha中的文字格式化字符串如此之慢?(现在固定在3.6稳定)

我从Python Github存储库下载了一个Python 3.6 alpha版本,我最喜欢的一个新功能是文字字符串格式化.它可以像这样使用:

>>> x = 2
>>> f"x is {x}"
"x is 2"
Run Code Online (Sandbox Code Playgroud)

这似乎与formatstr实例上使用该函数做同样的事情.但是,我注意到的一件事是,与仅调用相比,这种文字字符串格式化实际上非常慢format.以下是timeit关于每种方法的内容:

>>> x = 2
>>> timeit.timeit(lambda: f"X is {x}")
0.8658502227130764
>>> timeit.timeit(lambda: "X is {}".format(x))
0.5500578542015617
Run Code Online (Sandbox Code Playgroud)

如果我使用字符串作为timeit参数,我的结果仍然显示模式:

>>> timeit.timeit('x = 2; f"X is {x}"')
0.5786435347381484
>>> timeit.timeit('x = 2; "X is {}".format(x)')
0.4145195760771685
Run Code Online (Sandbox Code Playgroud)

如您所见,使用format几乎占用了一半的时间.我希望文字方法更快,因为涉及的语法更少.幕后发生了什么导致文字方法如此慢?

python performance python-internals python-3.6 f-string

32
推荐指数
2
解决办法
3447
查看次数

Python 3.6+中是否有格式化的字节字符串文字?

我正在寻找格式化的字节字符串文字.具体来说,相当于

name = "Hello"
bytes(f"Some format string {name}")
Run Code Online (Sandbox Code Playgroud)

可能是类似的东西fb"Some format string {name}".

这样的事情存在吗?

python string-interpolation python-3.x f-string

25
推荐指数
4
解决办法
4770
查看次数

f 字符串:与函数调用不匹配的“(”

我试图在 python 中使用 f 字符串将一些变量替换为我正在打印的字符串,但出现语法错误。这是我的代码:

print(f"{index+1}. {value[-1].replace("[Gmail]/", '')}")
Run Code Online (Sandbox Code Playgroud)

我在添加替换后才开始遇到问题。我已经检查过很多次了,我确信我没有漏掉括号。我知道还有很多其他方法可以实现此目的,其中一些可能更好,但我很好奇为什么这行不通。

python quotes quoting function-call f-string

24
推荐指数
1
解决办法
4万
查看次数

如何在python 3.6中使用f-string进行字典格式?

我怎么能用python 3.6 F-String做这个格式?

person = {'name': 'Jenne', 'age': 23}

print('My name {0[name]} and my age {1[age]}'.format(person, person))
print('My name {0} and my age {1}'.format(person['name'], person['age']))
Run Code Online (Sandbox Code Playgroud)

python format dictionary f-string

21
推荐指数
4
解决办法
1万
查看次数

如何将字符串转换为f-string

我正在阅读关于python的新f字符串的博客,它们看起来非常整洁.但是,我希望能够从字符串或文件加载f-string.

我似乎找不到任何字符串方法或其他功能.

从上面链接中的示例:

name = 'Fred'
age = 42
f"My name is {name} and I am {age} years old"

'My name is Fred and I am 42 years old'
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个字符串s怎么办?我希望能够有效s,这样的事情:

name = 'Fred'
age = 42
s = "My name is {name} and I am {age} years old"
effify(s)
Run Code Online (Sandbox Code Playgroud)

事实证明,我已经可以执行类似的操作str.format并获得性能提升.即:

format = lambda name, age: f"My name is {name} and I am {age} years old"
format('Ted', 12)

'My name is Ted and …
Run Code Online (Sandbox Code Playgroud)

python python-3.6 f-string

21
推荐指数
3
解决办法
6225
查看次数

21
推荐指数
1
解决办法
2万
查看次数

= (equal) 在表达式大括号内的 f 字符串中做什么?

众所周知,{} 在 Python f-strings 中的用法是执行代码段并以string格式给出结果(一些教程在这里)。但是,表达式末尾的“ = ”是什么意思?

log_file = open("log_aug_19.txt", "w") 
console_error = '...stuff...'           # the real code generates it with regex
log_file.write(f'{console_error=}')
Run Code Online (Sandbox Code Playgroud)

python string python-3.x f-string python-3.8

19
推荐指数
3
解决办法
4562
查看次数

如何使用带有python> 3.6 f-strings的gettext

以前您将使用gettext以下内容:

_('Hey {},').format(username)
Run Code Online (Sandbox Code Playgroud)

但是新的Python的f-string怎么样?

f'Hey {username}'
Run Code Online (Sandbox Code Playgroud)

python gettext f-string

18
推荐指数
2
解决办法
1314
查看次数