On Tuesday, October 4, 2016 at 8:11:41 AM UTC+5:30, Steve D'Aprano wrote: > On Mon, 3 Oct 2016 04:15 pm, Jussi Piitulainen wrote: > > > Steve D'Aprano writes: > >> Why shouldn't people say that binding and assignment are the same > >> thing in Python? What's the difference? > > > > Outside Python, (lambda x : f(x)) is said to "bind" x. It's different > > from assigning a new value to x. It's similar to how quantifiers in > > logic are said to bind their variables, so that variables bound to > > different quantifiers are different variables. > > o_O > > Me: "How is binding different from assignment?" > > You: "This is an example of binding: lambda x: f(x). Its different from > assigning to x. Clear now?" > > > What's "outside python"? Can you give some examples? Presumably you don't > actually mean "every single programming language apart from Python", even > if that's what it sounds like. > > Anyway, I've done my own research, and what I've found is: > > - Some people consider assignment and binding to be synonyms. This is > especially common in OOP languages (like Python), and procedural languages.
Here’s C++ http://www.informit.com/articles/article.aspx?p=376876 roughly using initialization where Jussi/Greg/myself/etc are using binding > > - Some people consider them to be different. This is especially common in > functional languages with an academic emphasis. > > For those who consider them different, the distinction is usually along > these lines: > > - Assignment associates a mutable label to a value. So if I say "x = 1", > that sets up a labelled box and puts 1 inside that box. Then if I say "x = > 2", the box is updated to contain 2 instead of 1. > > - Binding is more like setting up a label or identifier for a constant. For > example, in a legal contract, you might say words to the effect of: > > John and Jane Smith, of 123 Evergreen Terrace, Metropolis ("the Client") > > and then everywhere the contract refers to "the Client", you are supposed to > mentally substitute "John and Jane Smith, of ...". Its a fixed label for a > fixed value. Even if the value is mutable (John and Jane have a baby, and > the baby is now automatically covered by the contract, the value cannot be > replaced with a new value (you can't swap out John and Jane and replace > them with their neighbours Fred and Ethel, you have to cancel the contract > and write a new one). > > So for these languages, bindings relate to a *fixed* association between a > label and value. Whether the *value* itself is mutable or immutable, the > association is fixed. Are you suggesting that python can be understood without this distinction? Consider the ‘mutable default gotcha’ in which the mutable is assigned but not mutated tl;dr Many concepts are needed to understand programming languages Some of them may be reified into the language; all cannot be. “Not reified into the language” ≠ “Not a necessary concept for the language” If you have variables+scopes you need (the concept of) binding As understood by language-theorists, eg: http://homepage.cs.uiowa.edu/~slonnegr/plf/Book/Chapter9.pdf -- https://mail.python.org/mailman/listinfo/python-list