2 ms·
The new walrus operator now makes indentation obsolete. You can write averything within one line as an array and it is hard to read. This in combination with sy
by fxj 7y ago
The new walrus operator now makes indentation obsolete. You can write averything within one line as an array and it is hard to read. This in combination with syntactic sugar, operator overloading and unicode variables can make the language very hard to read.
e.g.
# compute pi
1000000 >> ψ( ψ(χ>>op("(x**2+y**2)**0.5<1")@rlµ<<χ)>>Σ*4>> _/_)
or this:
# 10 fibonacci numbers
[x:=[1,1]] + [x := [x[1], sum(x)] for i in range(10)]
is valid python code. (for the first see my github jamitzky/iverson).
Not that I wouldnt like it, but python3 has changed and the zen of python is not valid for some time now.
- BiteCode_dev 7y agoYou could do that with a lambda since Python 2.4. E.G, calculating primes: >>> print(list(filter(None,map(lambda y:y*__import__('functools').reduce(lambda x,y:x*y!=0, map(lambda x,y=y:y%x,range(2,int(pow(y,0.5)+1))),1),range(2,1000))))) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997] As for the unicode caracters as variables... Remember you could do that in Python 2 ? # -*- coding: rot13 -*- cevag "Relax" But people don't do it. Just like they don't use "import *" everywhere, or monkey patch methods like it's going out of style the way Ruby loved it 15 years ago. Because such capabilities are restricted (one line lambda, parenthesis for walrus, not all unicode is allowed as var names or everywhere...), introduced slowly, and the community culture is to value readability, Python stays Python. I was against the walrus personally, for the reasons you mention. But while I do see Raymond Hettinger trolling twitter regularly with his latest crazy walrus magic, in production we see no such thing. Not to say it never happens. It does, I've seen monstrosities in the field. Like with every tech. I mean, you can start a fire with a water hose if you try hard enough. But it's rare.
- Rainymood 7y ago> [x:=[1,1]] + [x := [x[1], sum(x)] for i in range(10)] Tried to run this in a REPL and got invalid syntax.
- fxj 7y agopython 3.8? try: https://tio.run/#python38pr https://tio.run/#python38pr
- uryga 7y agoin principle you could always write one-liners like this with lambdas or list comprehensions by translating let x = <val> in <expr> into this: (lambda x: <expr>)(<val>) (as the lambda calculus does) or this: [<expr> for x in (<val>,)][0] of course the readability is terrible, but the power was always there if you wanted to (ab)use it :) (yeah, i've used the second one in a repl, don't @ me)
- recursivecaveat 7y agoIndeed, a single python expression has been enough for Turing completeness for a long time now. I wrote a brainfuck interpreter in one once.