Domanda

I've got this if statement in a while loop and it's set out exactly like this, but i'm struggling to understand exactly whats going on. I'm a recent convert from java and i'm having a little trouble grasping the whole 'white space matters' business and I can't find an explanation for this bit of code:

if x % 2 == 1: z = z + y
y = y << 1
x = x >> 1

Can anyone explain why the z = z + y is on the same line as the if? and why the two lines under it are not indented to the right so to be inside the if block? Thanks

È stato utile?

Soluzione

This is equivalent to

if x % 2 == 1:
    z = z + y
y = y << 1
x = x >> 1

it's just shorthand for a single-line subclause.

Altri suggerimenti

Is just grammatical sugar to allow the if to be in one line. Is the same as having:

x = 4
y = 5
z = 0
while x:
  if x % 2 == 1:
    z = z + y
  y = y << 1
  x = x >> 1
  print 'x: %s, y: %s, z: %s' % (x, y, z)

(I added a few extra lines to have a functioning example)

You could even shorten that to:

x = 4; y = 5; z = 0
while x:
  if x % 2 == 1: z = z + y
  y = y << 1; x = x >> 1; print 'x: %s, y: %s, z: %s' % (x, y, z)

But don't. Is not Pythonic!! :-D I also came from Java, and in the beginning, I was longing for a ; but when you get used to it, you'll find them... odd to use (at least, I find them kind of ugly, even).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top