Striving for PEP-8 compliance

Tom Evans tevans.uk at googlemail.com
Wed Apr 7 12:06:59 EDT 2010


On Wed, Apr 7, 2010 at 4:10 PM, geremy condra <debatem1 at gmail.com> wrote:
> On Wed, Apr 7, 2010 at 10:53 AM, Tom Evans <tevans.uk at googlemail.com> wrote:
>> [ Please keep me cc'ed, I'm not subscribed ]
>>
>> Hi all
>>
>> I've written a bunch of internal libraries for my company, and they
>> all use two space indents, and I'd like to be more consistent and
>> conform to PEP-8 as much as I can.
>>
>> My problem is I would like to be certain that any changes do not alter
>> the logic of the libraries. When doing this in C, I would simply
>> compile each module to an object file, calculate the MD5 of the object
>> file, then make the whitespace changes, recompile the object file and
>> compare the checksums. If the checksums match, then the files are
>> equivalent.
>>
>> Is there any way to do something semantically the same as this with python?
>
> Probably the logical thing would be to run your test suite against
> it, but assuming that's not an option, you could run the whole
> thing through dis and check that the bytecode is identical. There's
> probably an easier way to do this though.
>
> Geremy Condra
>

dis looks like it may be interesting.

I had looked a little at the bytecode, but only enough to rule out md5
sums as a solution. Looking closer at the bytecode for a simple
module, it seems like only a few bytes change (see below for hexdumps
of the pyc).

So in this case, only bytes 5 and 6 changed, the rest of the file
remains exactly the same. Looks like I need to do some digging to find
out what those bytes mean.

Cheers

Tom

2 space indents:

00000000  d1 f2 0d 0a 51 a7 bc 4b  63 00 00 00 00 00 00 00  |....Q..Kc.......|
00000010  00 02 00 00 00 40 00 00  00 73 28 00 00 00 64 00  |..... at ...s(...d.|
00000020  00 84 00 00 5a 00 00 65  01 00 64 01 00 6a 02 00  |....Z..e..d..j..|
00000030  6f 0e 00 01 65 00 00 65  02 00 83 01 00 01 6e 01  |o...e..e......n.|
00000040  00 01 64 02 00 53 28 03  00 00 00 63 01 00 00 00  |..d..S(....c....|
00000050  01 00 00 00 03 00 00 00  43 00 00 00 73 20 00 00  |........C...s ..|
00000060  00 64 01 00 47 48 7c 00  00 6f 10 00 01 68 01 00  |.d..GH|..o...h..|
00000070  64 02 00 64 01 00 36 47  48 6e 01 00 01 64 00 00  |d..d..6GHn...d..|
00000080  53 28 03 00 00 00 4e 74  05 00 00 00 68 65 6c 6c  |S(....Nt....hell|
00000090  6f 74 05 00 00 00 77 6f  72 6c 64 28 00 00 00 00  |ot....world(....|
000000a0  28 01 00 00 00 74 03 00  00 00 62 61 72 28 00 00  |(....t....bar(..|
000000b0  00 00 28 00 00 00 00 73  0e 00 00 00 74 65 73 74  |..(....s....test|
000000c0  6c 69 62 2f 66 6f 6f 2e  70 79 74 03 00 00 00 66  |lib/foo.pyt....f|
000000d0  6f 6f 01 00 00 00 73 08  00 00 00 00 01 05 01 07  |oo....s.........|
000000e0  01 03 01 74 08 00 00 00  5f 5f 6d 61 69 6e 5f 5f  |...t....__main__|
000000f0  4e 28 03 00 00 00 52 03  00 00 00 74 08 00 00 00  |N(....R....t....|
00000100  5f 5f 6e 61 6d 65 5f 5f  74 04 00 00 00 54 72 75  |__name__t....Tru|
00000110  65 28 00 00 00 00 28 00  00 00 00 28 00 00 00 00  |e(....(....(....|
00000120  73 0e 00 00 00 74 65 73  74 6c 69 62 2f 66 6f 6f  |s....testlib/foo|
00000130  2e 70 79 74 08 00 00 00  3c 6d 6f 64 75 6c 65 3e  |.pyt....<module>|
00000140  01 00 00 00 73 04 00 00  00 09 07 0d 01           |....s........|
0000014d


4 space indents:

00000000  d1 f2 0d 0a 51 a7 bc 4b  63 00 00 00 00 00 00 00  |....Q..Kc.......|
00000010  00 02 00 00 00 40 00 00  00 73 28 00 00 00 64 00  |..... at ...s(...d.|
00000020  00 84 00 00 5a 00 00 65  01 00 64 01 00 6a 02 00  |....Z..e..d..j..|
00000030  6f 0e 00 01 65 00 00 65  02 00 83 01 00 01 6e 01  |o...e..e......n.|
00000040  00 01 64 02 00 53 28 03  00 00 00 63 01 00 00 00  |..d..S(....c....|
00000050  01 00 00 00 03 00 00 00  43 00 00 00 73 20 00 00  |........C...s ..|
00000060  00 64 01 00 47 48 7c 00  00 6f 10 00 01 68 01 00  |.d..GH|..o...h..|
00000070  64 02 00 64 01 00 36 47  48 6e 01 00 01 64 00 00  |d..d..6GHn...d..|
00000080  53 28 03 00 00 00 4e 74  05 00 00 00 68 65 6c 6c  |S(....Nt....hell|
00000090  6f 74 05 00 00 00 77 6f  72 6c 64 28 00 00 00 00  |ot....world(....|
000000a0  28 01 00 00 00 74 03 00  00 00 62 61 72 28 00 00  |(....t....bar(..|
000000b0  00 00 28 00 00 00 00 73  0e 00 00 00 74 65 73 74  |..(....s....test|
000000c0  6c 69 62 2f 66 6f 6f 2e  70 79 74 03 00 00 00 66  |lib/foo.pyt....f|
000000d0  6f 6f 01 00 00 00 73 08  00 00 00 00 01 05 01 07  |oo....s.........|
000000e0  01 03 01 74 08 00 00 00  5f 5f 6d 61 69 6e 5f 5f  |...t....__main__|
000000f0  4e 28 03 00 00 00 52 03  00 00 00 74 08 00 00 00  |N(....R....t....|
00000100  5f 5f 6e 61 6d 65 5f 5f  74 04 00 00 00 54 72 75  |__name__t....Tru|
00000110  65 28 00 00 00 00 28 00  00 00 00 28 00 00 00 00  |e(....(....(....|
00000120  73 0e 00 00 00 74 65 73  74 6c 69 62 2f 66 6f 6f  |s....testlib/foo|
00000130  2e 70 79 74 08 00 00 00  3c 6d 6f 64 75 6c 65 3e  |.pyt....<module>|
00000140  01 00 00 00 73 04 00 00  00 09 07 0d 01           |....s........|
0000014d

python code: testlib/foo.py

def foo(bar):
  print "hello"
  if bar:
    print {
        'hello': 'world'
      }

if __name__ == "__main__":
  foo(True)



More information about the Python-list mailing list