python-mode 不支持 Python 3.6 的 f-string

貌似 f-string 现在 很受推崇,但 Emacs 目前不支持(高亮和补全):

16

相关的 Bug Report(目前还没有任何回应):

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30750

1 个赞

r'...'u'...' 也都没有高亮吧?

python说是要只有一种正确的方法去做一件事。现在格式化字符串自带都有三种方法(%算符 str.format f-string)。而且python似乎喜欢把库函数能做到的东西都装成语言特性(列表推导式),事实上列表推导式的可读性就不如map和filter

这种方式比c风格的printf式格式化,效果是不是更好,感觉还要打个问号啊。

1 个赞

.format 不同,这个 f 是嵌入表达式,各有所长。

高亮没有,但是我用lsp是有补全的。

这个 f-string 怎么开启?我在 3.6.5/3.6.6/3.7.0 下试了都提示出错:

In [3]: print(f'hello, {name}')
  File "<ipython-input-3-9f1973a9ac37>", line 1
    print(f'hello, {name}')
                         ^
SyntaxError: invalid syntax

Python 3.6 引入的

乌龙一场

是我这边环境问题,因为 brew 安装了 ipython (我也不知道什么时候安装的,可能是由于某些软件依赖),导致我没发现当前 pyenv 下没有 ipytho:

⋊> python --version
Python 3.6.5

⋊>  pyenv version --bare
3.6.5 (set by ~/.pyenv/version)

⋊> which ipython
~/.pyenv/shims/ipython  <--- 被这一行蒙蔽了

实际真正是调用的是:

⋊> pyenv which ipython
/usr/local/bin/ipython

⋊> head -1 /usr/local/bin/ipython
#!/usr/local/opt/python@2/bin/python2.7

给当前 pyenv 安装一个 ipthon 就解决了:

⋊> pip install ipython

⋊> which ipython
~/.pyenv/shims/ipython

⋊> pyenv which ipython
~/.pyenv/versions/3.6.6/bin/ipython  <--- 这回跑不掉了

f-string确实更简洁,但是 C/C++程序员表示,还是%来得舒服 :joy:

1 个赞

我也觉得不是越简洁越好,如果一次format要用四个以上的参数,我就觉得应该修改程序了。

对打表来说不是很正常么

我是天天用f-string,已经回不去了。看str直接就能猜到大致内容,光这点就省心不少,在团队协作的时候,代码易懂,省心很重要