遇到一个问题,我再看书的过程中,看到 yield from 语法,想尝试一下,然后就输入了书上的例子,然后编译器提示 yield from 语法报错了:
from collections import Iterable
def flatten(items, ignore_types=(str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
yield from flatten(x)
else:
yield x
报错提示是 yield 语法有问题:
yield from flatten(x)
^
SyntaxError: invalid syntax
经过一番 google,有人提出升级 setuptools 能解决,可是我执行了 pip install --upgrade setuptools pip 升级之后,依然有这样的报错提示。我的环境是 mac,pyhon 2.7,这里的问题该如何解决呢?
1
rocksolid 2017-08-08 09:11:53 +08:00 1
3 的语法放在 pyhon 2.7 里用了
|
2
Lycnir 2017-08-08 09:12:02 +08:00
请看 python3
|
3
louzhumuyou OP @rocksolid 能在 2 里面调用 python3 的语法吗?我记得原来好像看到过。不知道有没有记错。
|
4
rocksolid 2017-08-08 09:23:53 +08:00
@louzhumuyou
from __future__ import xxxxxxx |
5
louzhumuyou OP @Lycnir 如果我想在 python 2.7 里面用,该怎么办呢?
|
6
sujin190 2017-08-08 09:27:06 +08:00
@louzhumuyou #5 这种语法 2.7 肯定用不了啊,否则 3 和 2.7 的兼容问题不是被你解决了
|
7
laike9m 2017-08-08 09:33:09 +08:00 via Android
yield from 是没法在 2 里用的
|
8
ylcc 2017-08-08 10:09:39 +08:00
看到标题我就感觉是在 2 里面跑了,果然。。。
|
9
leavic 2017-08-08 10:23:33 +08:00
@louzhumuyou 自己把 python2 的源码拿来修改,自己实现 yield from 语法,然后用自己的 python2,除此,无他。
|
10
dsg001 2017-08-08 10:26:31 +08:00
移植到 py2,只能用 for 了
|
11
ipwx 2017-08-08 10:32:21 +08:00
Python 2 不支持 yield from。
其实我觉得是时候投向 Python 3 了,除非你有老项目的历史包袱。 P.S. yield from xx 等价于 for x in xx: yield x |
12
dreamapple 2017-08-08 11:08:12 +08:00 via Android
书都是 python3 的书,还用 python2 的解释器
|
13
louzhumuyou OP @dreamapple 书上没写,没指明,一直用的 python 2.7,之前写的很多项目都是 2.7 的。在考虑中迁移。
|
14
louzhumuyou OP @ipwx 谢谢,在考虑迁移。
|
15
badttt 2017-08-08 16:04:15 +08:00
python2.x 和 python3 是两种语言
|
16
SoulMelody 2017-08-09 14:30:52 +08:00
|
17
860670496 2017-08-11 14:00:31 +08:00
早日投奔 py3,不受苦
前一阵为了给新服务器同时兼容 2 和 3 费了半天劲 |