Spyke
lemmy.sdf.org
print("odd" if num % 2 else "even")

That's the native python version, for those curious

141
lemmy.blahaj.zone

The ternary syntax is really my only real gripe with python design -- putting the conditional BETWEEN the true and false values feels so very messy to me.

88
balsoftreply
lemmy.ml

Eh, reads pretty naturally to me. That said, (like I lisp)

22
Sharenireply
programming.dev

Lisps makes more sense to me though

(if condition a b)

VS

a if condition else b

16
rbosreply
lemmy.ca

It's kinda natural to me having used Perl a lot.

13
rbosreply
lemmy.ca

heheh. I wasn't really making an argument though

1
l3mmingreply
lemmy.world

You clearly haven't used Perl a lot. Perl's ternary looks like:

$even = $num % 2 ? "nay" : "yay";

Incidentally, it is also the same as PHP's, but mainly because PHP stole it.

2
psudreply
aussie.zone

You do get the if in the middle of stuff though in the form print(debug message) if $debug

2
fedia.io

Wait until you learn that postfix conditionals are syntactic sugar and the compiler* turns that line into the equivalent of $debug and print(debug message), putting the conditional in first place, a lot like the ternary operator.

* Perl compiles to bytecode before running.

The ternary operator itself isn't implemented in terms of and (and or) but it could be.

5

Luckily I don't need to read or write bytecode and all that matters to me is the syntax

4

I think it's just what you're used to. Imo it really matters that it's keywords and not operator symbols - it's meant to read closer to natural language. I prefer the c version when it's ? and :, but I like them this way round when it's if and else.

1
Gorkreply
sopuli.xyz

That's way too non-convoluted enough

9
lemmy.ca

You would not believe the number of people I’ve interviewed who excel at making Python read like ass.

6

I mean, it does have enough ways to write the same thing that it can really allow for some funny code golf, but some people just have no sense of readability whatsoever.

6
jacksilverreply
lemmy.world

I think the idea is it reads more naturally, so you can read it like this return A if statement is true else return B

18
Nalivaireply
discuss.tchncs.de

Is it really more natural for a non-programmer than "if statement is true than a else b"? I can't evaluate because of decades of C, so for me the python logic is still bizarre.

1

Maybe?

For C at least it doesn't have the actual words, so you need to know what the specific symbols are var = condition ? a : b. In that expression we don't know what a or b are in regards to the condition.

Python literally is a if condition else b, so it reads out what is being done.

1

Edit... I reread your comment and realized that python does it differently and that everything I typed was irrelevant... I'm still gonna leave it if anyone is interested in ternary expressions, but I suppose the answer to your question is, that's just how python does it.

That's how ternary operators are designed to work. In essence, if you're looking to do a single line if/then, you can directly assign a variable from the result of a ternary expression.

As an example, I was scripting something earlier where there may or may not be a value returned from a function, but I still had to do something with that return value later. For this thing, I was using JavaScript.

I ended up with:

return platform == "name"  ? "Option 1" : "Option 2"

If I were to write that out in a typical if/then it would be:

if (platform == "name") {
    return "option 1"
} else {
    return "option 2"
}

A ternary starts with a boolean expression, then the if true value, else the false value. That's returned to either a variable or if in a function like my example, to the object calling the function. It's just a way to write less code that in many cases is easier to read.

9
lemmy.ml

For optimal performance, you should rewrite it in Rust:

inline_python::python! {
    print(js2py.eval_js("(number) => number % 2 ? 'odd' : 'even'")(number))
};
124
ATPA9reply
feddit.org

And now you can use wasm to run it in a browser!

70

Make sure the browser is made using Rust and run on a VM running on Linux, compiled to WASM.

11
lemmy.world

Please. That's C's ternary operator. JS is just a pile of garbage cosplaying as a programming language

58
filcukreply
lemmy.zip

No they're not supposed to be piling it up

5

One example that's giving you problems? Maybe even on a daily basis if you use it for work? What's garbage about it?

1
lemmy.sdf.org

print( ["even", "odd"][num % 2] )

If you need to avoid evaluating the wrong branch:

print( [lambda: "even", lambda: "odd"][num % 2]() )

41

Just send pseudo code to AI and compile straight to binary.

19
SatyrSackreply
lemmy.sdf.org

Are you just referring to how Python uses the English and/or instead of the more common &&/||? I think what the user above you was talking about was Lua's strange ternary syntax using and/or.

1

no, the linked table shows how python also returns the first non-falsey result of an a or b expression rather than just giving a boolean. it's useful for initialising optional reference args:

def foo(a: list = None)
    a = a or []

works with and as well.

6

often I do a function called elvis XD with the next signature elvis(condition, res1, res2)

1
lemmy.world

Yeah... I played that "serial killer or programming language inventor" game.

The only one I was completely in disagreement with was the inventor of Python. He's definitely a mass-murderer

10
programming.dev

num % 2 isn't a boolean result in any of these languages, so I feel like it would always output "odd"

Edit: 0 is false, everything else is true.

0
programming.dev

All of those languages will convert numbers into booleans, 0 is false, all other numbers are true.

8

I agree. If anything it should check if there is a nuumber and 0 is clearly a number.

1
lemmy.ml

In JS at least, there's a concept of truthiness and falsiness. 0, undefined, null, and a few other non-boolean values are treated as false if used in conditionals and logical operations, while every other value is treated as true. I'm pretty sure python has something similar.

5

You'd be surprised.

But seriously, numbers can be used as booleans in an impressive number of languages. Including machine code for almost every machine out there.

3
Lifterreply
discuss.tchncs.de

They are not the same, but 0 can be implicitly converted to false.

What do you get if you do: 0 === false

1