Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I accidentally discovered this a=b=c=d=e=f=2 in python(2.7)(and JavaScript a few minutes later) interpreter .

Is this a feature or just the way the interpreter works, if is a feature how it is called ?

Do other languages have this feature ?

share|improve this question
Please include code example. – ClintNash Sep 20 '12 at 15:26
a=b=c=d=e=f=2 is the code example you just run it in the interpreter either in python or browser console. – Eduard Florinescu Sep 20 '12 at 15:33
2  
I can't think of a language that doesn't support chained assignment... It's existed seemingly forever. – Izkata Sep 20 '12 at 18:05
@Izkata Both Pascal and Basic my starting languages didn't support that, maybe you started with C. – Eduard Florinescu Sep 20 '12 at 18:20
1  
In C -- int a, b, c = 1; only sets c to 1. a and b are uninitialized. – MebAlone Sep 24 '12 at 18:26
show 3 more comments

3 Answers

up vote 10 down vote accepted

In many languages, the = operator returns the value that was assigned.

The line a=b=c=d=e=f=2 is the same as a = (b = ( c = (d = (e = (f = 2)))))

f=2 returns the value of 2.

Thus, this then reduces to a = (b = ( c = (d = (e = 2)))) and so on.

This is known as chained assignment

share|improve this answer

This type of feature is typically known as "multiple assignment." Many languages have this type of feature.

This type of feature is typically known as "chained assignment." Languages that consider assignment to be expressions have this type of feature.

Multiple assignment typically means something else, e.g. Python:

a, b, c, d, e, f = [2, 2, 2, 2, 2, 2]

This type of syntax structure can be referred to as multiple assignment. In the context of Python, this is also known as unpacking.

The astute programmer might note that this is related to multiple return values:

def f(): return [1, 2, 3]
a, b, c = f()

There are a large number of languages that support chained assignment or multiple assignment in different ways.

C, C++, Java, and C# support the syntax you provided. VB does not support chained assignment (since assignment is a statement and not an expression like in the C family). Go supports multiple assignment similarly to Python, e.g. a swap:

a, b = b, a

I believe Lua supports multiple assignment and multiple return values. It can be done in a Lisp but there's usually a better way to go about it.

Basically, most languages support either of these features in some way.

share|improve this answer
I guess a bit of Pascal and Basic still lingers in my mind! – Eduard Florinescu Sep 20 '12 at 15:55
2  
Actually, the version in the question is typically called "chained assignment". – Izkata Sep 20 '12 at 18:03
4  
multiple assignment (what's described here) is very different from what's being asked. The original question is about "assignment is an expression", which allows another assignment to use the same value. – Javier Sep 20 '12 at 19:19
You're right. I made appropriate changes to the answer. – Joel Sep 24 '12 at 17:51

It is a feature of the language, the = statement evaluates the statement to its right and assigns that value to the variable on the left.

In Python a statement like a, b = 1,2 is also legal. That is called multiple assignment. See Python Docs I don't know of a special term for the a=b=2 structure though. It is just multiple assignments on the same line.

share|improve this answer
This is wrong. This only works in languages where assignment is not a statement. If it were a statement, then it wouldn't have a value and couldn't be assigned. – Jörg W Mittag Sep 21 '12 at 2:39
sorry what in particular is wrong? – ben336 Sep 21 '12 at 16:17
@ben336 I believe you have confused statement with expression. if(foo) {} and return 5; are statatements. On the other hand a + 5 and i++ are expressions. In pascal, a := 5; is a statement. In C, a = 5; is an expression. Its semantics, but it is important semantics when talking about languages. – MichaelT Sep 24 '12 at 19:12
good to know. Thanks. – ben336 Sep 24 '12 at 19:34

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.