Python's Context Dependent Syntax Soup: 「… in …」 And 「… not in …」

By Xah Lee. Date: . Last updated: .

Python has these operators to check if a key exist in hash table or element exist in list:

note that ② is not necessary. It can simply be done with not (x in list).

Now, the not operator has multiple meanings, depending on context. It compounds on syntax complexity. Now, not in is actually a operator. Having English words acting as operator and not function is bad enough, but now that operator is 2 words, separated by space! So, syntactically, it becomes not distinguishable from statements, or the tens of idiosyncratic syntax of C such as its “for”, “while”.

note that the syntax … in … is similar to the form for … in …, and also the list comprehension syntax [… for … in …]. Each have completely different semantics. [see Why List Comprehension is Bad]

this is the state of the affair of syntax soup. When you learn a language, there's little governing principle of what symbol can go where (as in formal language❕), instead, you learn by rote of what symbols or words can go where in what context means what.

but, the k in d is itself idiotic. Python has a has_key() method for dictionary, which is in sync with the 20 other methods on dict. Method syntax is systematic and also informative of its meaning because of the name. Though, strangely, python decided to deprecate it, and in python 3, it's gone.

[see Python: Dictionary]

2013-11-27 google plus discussion https://plus.google.com/+XahLee/posts/NH8nDKtgXJ6

Here's another example.

the python import statement syntax, is a prime example of context dependent semantics. witness:

in the above, the two import name have different meaning.

Soup. Soup. It's All good Soup.

Context Dependent Syntax

  1. JavaScript Syntax Soup: 「p in o」 vs 「for (p in o) {…}」
  2. Python's Context Dependent Syntax Soup: 「… in …」 And 「… not in …」
  3. Context Dependent Syntax, Lisp setf, Python a[i]=x

Python Syntax Suck

  1. Why Python Lambda is Broken and Can't be Fixed
  2. The Fate of Lambda in Python 3000 and Scheme v300
  3. Lambda in Python 3000
  4. Python, Lambda, Guido: is Language Design Just Solving Puzzles?
  5. Python's Context Dependent Syntax Soup: 「… in …」 And 「… not in …」
  6. Python Syntax Problem: Comment and Backslash
  7. Syntax Design: Python's Indentation vs Nesting

If you have a question, put $5 at patreon and message me.