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

有帮助吗?

解决方案

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.

其他提示

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).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top