Comment

Comment by Ultimatt

I haven't touched Perl in about ten years but your example is kind of insane. This is the one place Python is more annoying than Perl???

    my $a = ["foo", 123, {"bar" => [[1,2,3], {"qux" => "quux"}]}];
    $a->[2]{"bar"}[1]{"spam"} = "eggs";
    use JSON;
    print(encode_json($a))
That's the same as your example (minus the tuple type), but where Perl shines over Python (a lot) is you could have done the following:

    use JSON;
    my $a = [];
    $a->[2]{"bar"}[1]{"spam"} = "eggs";
    print(encode_json($a))
which would yield the json: [null,null,{"bar":[null,{"spam":"eggs"}]}]

To do this in Python is truly grim:

    import json
    from collections import defaultdict

    # recursive defaultdict using lambda
    datastructure = lambda: defaultdict(datastructure)

    a = [None] * 3
    a[2] = datastructure()
    a[2]["bar"][1]["spam"] = "eggs"

    print(json.dumps(a))
and thats doing it the unpythonic way, if you were to do this like the typical Python dev would accept in an MR for a large corp you would have written:

    import json
    from collections import defaultdict

    def datastructure():
       return defaultdict(datastructure)

    a = []
    # expand list to at least length 3
    while len(a) < 3:
       a.append(None)
 
    a[2] = datastructure()
    a[2]["bar"][1]["spam"] = "eggs"

    print(json.dumps(a))
They would still hate you for defaultdict(datastructure) though. Because absolutely no one in Python realises its got that level of expressionism one of the few places it does.
parent Ultimatt 1 year ago

Discussion

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton