考虑一下:
>>> '{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)
造成这种行为的原因是什么?
我真的很想深入研究代码风格,从现在开始知道从现在开始使用新风格会更好.
我.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 Github存储库下载了一个Python 3.6 alpha版本,我最喜欢的一个新功能是文字字符串格式化.它可以像这样使用:
>>> x = 2
>>> f"x is {x}"
"x is 2"
Run Code Online (Sandbox Code Playgroud)
这似乎与format在str实例上使用该函数做同样的事情.但是,我注意到的一件事是,与仅调用相比,这种文字字符串格式化实际上非常慢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几乎占用了一半的时间.我希望文字方法更快,因为涉及的语法更少.幕后发生了什么导致文字方法如此慢?
我正在寻找格式化的字节字符串文字.具体来说,相当于
name = "Hello"
bytes(f"Some format string {name}")
Run Code Online (Sandbox Code Playgroud)
可能是类似的东西fb"Some format string {name}".
这样的事情存在吗?
我试图在 python 中使用 f 字符串将一些变量替换为我正在打印的字符串,但出现语法错误。这是我的代码:
print(f"{index+1}. {value[-1].replace("[Gmail]/", '')}")
Run Code Online (Sandbox Code Playgroud)
我在添加替换后才开始遇到问题。我已经检查过很多次了,我确信我没有漏掉括号。我知道还有很多其他方法可以实现此目的,其中一些可能更好,但我很好奇为什么这行不通。
我怎么能用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的新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) 我想打印一个单一的大括号。
例子:
a = 2
>>> f"{'{'} {a}"
'{ 2'
Run Code Online (Sandbox Code Playgroud)
如何使用少于 5 个字符?
众所周知,{} 在 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) 以前您将使用gettext以下内容:
_('Hey {},').format(username)
Run Code Online (Sandbox Code Playgroud)
但是新的Python的f-string怎么样?
f'Hey {username}'
Run Code Online (Sandbox Code Playgroud) f-string ×10
python ×10
python-3.6 ×3
python-3.x ×3
dictionary ×1
format ×1
gettext ×1
performance ×1
python-3.8 ×1
quotes ×1
quoting ×1
string ×1
typeerror ×1