23 回复

pyenv 上没见到


Python 3.8 带来了几个挺实用的新特性,我挑几个重点的说说。

最显眼的是 海象运算符 (Walrus Operator) :=。它允许你在表达式内部进行赋值,能省不少代码。比如在循环和条件判断里特别有用:

# 传统写法
n = len(my_list)
if n > 10:
    print(f"List is too long ({n} elements)")

# 用海象运算符,一行搞定
if (n := len(my_list)) > 10:
    print(f"List is too long ({n} elements)")

# 在while循环里读取数据也干净多了
while (chunk := file.read(8192)) != b"":
    process(chunk)

然后是 仅限位置参数 (Positional-only parameters)。用 / 在函数定义里标记,它前面的参数只能按位置传,不能用作关键字参数。这给API设计多了层控制,能避免参数名变动破坏现有调用。

def pow(x, y, /, mod=None):
    """y 只能是位置参数"""
    r = x ** y
    return r if mod is None else r % mod

pow(2, 10)          # 正确
pow(2, y=10)        # 会报错:TypeError

f-string 支持 = 用于调试 这个小改动挺贴心。在表达式后面加个 =,它会同时打印表达式和它的值,调试时不用再手动拼字符串了。

user = "john"
print(f"{user=}")  # 输出:user='john'
print(f"{user.upper()=}")  # 输出:user.upper()='JOHN'

其他还有像 __pycache__ 目录结构更规整、pickle 协议版本默认为4、typing 模块增强(如 TypedDictLiteralFinal)等更新,让开发和维护更顺手。

总结:3.8在语法和工具链上做了些扎实的改进。


energybased
3.7
2 points
·
2 hours ago
If you’re using pyenv, then pyenv install 3.8.0 should eventually work (when it’s available).

reddit 上这人那个括号里的很灵性, 我先自己编吧

这么多负优化꒰ꌶ  ̯ ̜ꌶ ꒱

凑合吧, 反正我升级了以后, 一大半脚本挂了… 好多 Windows 上的也没编译出 whl 来, 我自己又没装 VS…AWSL

不着急一定要最新版,慢慢等

Mac 上哪个工具管理多个版本的 Python 比较方便?

(ana)conda 就行



谢谢哈

尝试了 3.8,pandas 始终安装失败
卸载回到 3.7.4,pandas 顺利安装

pymssql 安装不了了.



append 里提过了, 没装 VS 或者 mingw, 就先别更新, pypi 家还没提供对应 3.8 的 whl, 我也是 aiomysql 和 lxml 出问题才回滚的, Windows 永远都是二等公民

#12 我是 Mac 下 Pycharm

不是对新版功能有特别需求的话,小一号的偶数版 Python3.6 兼容性更完善,至少等周边库也要个更新时间

3.8 的 deprecated 让我想起来之前看到一个 issue。

维护者说你是要 deprecated3.4 并且 fix3.8-dev 吗。
然后 issue 的作者说,你实际上是要 fix3.4 然后 deprecated3.8 以及之后的所有版本。


上面那个 performance 对比, 3.7 和 3.8 对 3.6 提升太大了…


和 Pycharm 没关系, 一大些 C 的代码编译不过来, 3.7 的好处是 pypi 上已经替你编译成 whl 了, 早些年没有 wheel 的时候, 那编译叫一个痛苦, 后来非官方编译 whl 才解决了一半问题

这回复绝了… 维护者平时心态都这么好的么


3.8 等待中…
pyenv 现在只有 rc4. 等出了 3.8, docker 也出了以后, 部分项目就可以先上了.

我一直以为那些 whl 是开发者编译的,原来是 pypi 编译的?

是开发者, 不过会传到 pypi 上…

homebrew 还没有

虚拟环境有问题

一般新版本出来我只会用低两个版本号的😂

回到顶部