C 是否像 python 那样支持 a , b = 0, 1 类型的多重赋值?
Does C support multiple assignment of the type a , b = 0, 1 like python does?
""" Sample python code representing multiple assignment """
a , b = 0 , 1
print a , b
以下代码给出了输出:
0 1
并且显然不会引发任何错误。 C支持吗?
没有C不支持这样的多重赋值。
编译通过,因为 a , b = 0 , 1
被分组为 a, (b = 0), 1
。 a
和 1
是无操作但仍然有效的表达式;表达式等同于
b = 0
与 a
未更改。
有趣的是,您可以在 C++ 中通过一些设计和语法上的微小更改来实现您想要的表示法。
C 不像 Python 那样支持列表赋值。您需要分别分配给每个变量:
a = 0; b = 1;
不,C 不支持多重赋值,也没有对元组的语言级支持。
a, b = 0, 1;
以上是,考虑到operator precedence,相当于:
a, (b = 0), 1;
相当于:
b = 0;
参见 live on coliru。
与您的 Python 代码最接近的 C 等效代码是:
a = 0, b = 1;
在这种情况下,使用赋值表达式的值没有用。
""" Sample python code representing multiple assignment """
a , b = 0 , 1
print a , b
以下代码给出了输出: 0 1 并且显然不会引发任何错误。 C支持吗?
没有C不支持这样的多重赋值。
编译通过,因为 a , b = 0 , 1
被分组为 a, (b = 0), 1
。 a
和 1
是无操作但仍然有效的表达式;表达式等同于
b = 0
与 a
未更改。
有趣的是,您可以在 C++ 中通过一些设计和语法上的微小更改来实现您想要的表示法。
C 不像 Python 那样支持列表赋值。您需要分别分配给每个变量:
a = 0; b = 1;
不,C 不支持多重赋值,也没有对元组的语言级支持。
a, b = 0, 1;
以上是,考虑到operator precedence,相当于:
a, (b = 0), 1;
相当于:
b = 0;
参见 live on coliru。
与您的 Python 代码最接近的 C 等效代码是:
a = 0, b = 1;
在这种情况下,使用赋值表达式的值没有用。