python - 为什么 Python 赋值不返回值?

标签 python python-3.x language-design

为什么 Python 赋值是语句而不是表达式?如果它是一个返回赋值右侧值的表达式,那么在某些情况下它会允许更少冗长的代码。有什么我看不到的问题吗?

例如:

# lst is some sequence
# X is come class
x = X()
lst.append(x)

可以改写为:

lst.append(x = X())

好吧,准确地说,上面的方法不起作用,因为 x 将被视为关键字参数。但是另一对括号(或关键字参数的另一个符号)会解决这个问题。

最佳答案

很多人认为赋值是表达式,特别是在 Python 这样的语言中,在条件中允许 any 值(不仅仅是某些 bool 类型的值)容易出错。大概Guido是/曾经是那些有这种感觉的人之一。经典错误是:

if x = y: # oops! meant to say ==

在 Python 中的情况也比在 C 之类的语言中要复杂一些,因为在 Python 中,对变量的第一个赋值也是它的声明。例如:

def f():
    print x

def g():
    x = h()
    print x

在这两个函数中,“print x”行做了不同的事情:一个引用全局变量x,另一个引用局部变量 xg 中的 x 因为赋值是本地的。如果可以将赋值隐藏在一些更大的表达式/语句中,这可能会更加困惑(比现在更加困惑)。

关于python - 为什么 Python 赋值不返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869770/

相关文章:

python - Pandas 从长到宽,多列

python - 如何使用 TensorFlow 张量索引列表?

python - 如何将 "x += 5"(x 为自定义类)添加到 x 的属性中?

python - 如何用numpy中的索引索引数组?

python - Python 初学者

python - 这段代码究竟是如何在 Python 中反转字符串的

python - 使用 r2pipe 进行多处理

c++ - C++ 编译器中的 POD 和 VPtr 设计

javascript - 为什么等待和异步有效的变量名?

xml - 去哪里申请语言设计审查?