Slide 1

Slide 1 text

PEP8 ΛಡΜͰΈΑ͏ Python౦ւ ୈ24ճษڧձ 2014೥5݄24೔ @2box2bo

Slide 2

Slide 2 text

ࣗݾ঺հ • ໊લɿ௶಺ ༝޹
 @2box2bo
 • ϒϩάɿhttp://www.zumwalt.info/blog • ͓࢓ࣄɿ஍ํ͍͑͋͋͢ʔͷΠϯϑϥ԰ • ॴଐɿ(” ՞ਊ ՞)”΢ΟʔϯͳϢʔβʔձ
 Python౦ւ • ࠷ۙͷ͋Εɿ਀໊͸େৎ෉Ͱ͢ʂ
 (´ʀωʀʆ)ŲƄƂŕ


Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

PEP

Slide 5

Slide 5 text

PEP ͱ͸ͳΜͧʁ • ʮPython Enhancement Proposalʯͷུ
 ೔ຊޠ༁͢ΔͱʮPython֦ுఏҊʯ • Python ίϛϡχςΟʹ৘ใఏڙ΍৽ػೳɾ
 ϓϩηεɾ؀ڥ౳Λઆ໌͢ΔͨΊͷઃܭॻ • ٕज़తͳ࢓༷ͱͦͷػೳ͕ඞཁͳ࿦ཧతͳ
 ཧ༝Λఏڙ͢Δ

Slide 6

Slide 6 text

PEP8

Slide 7

Slide 7 text

PEP8 ͱ͸ͳΜͧʁ • PEPͷ8൪໨ 
 λΠτϧ͸ʮStyle Guide for Python Codeʯ • ಺༰͸ίʔσΟϯάελΠϧͷΨΠυ • ೔ʑɺ࣌୅ʹ͋ͬͨ෺ʹมΘ͍ͬͯ͘ • ࣗ෼͕ॴଐ͍ͯ͠Δ૊৫ͷίʔσΟϯάελΠϧͱ ڝ߹ͨ͠Βࣗ૊৫ͷίʔσΟϯάελΠϧΛ༏ઌ

Slide 8

Slide 8 text

"A Foolish Consistency is the Hobgoblin of Little Minds"

Slide 9

Slide 9 text

۪͔ͳҰ؏ੑ͸ڱ͍৺͕Խ͚ͨ ΋ͷͰ͋Δ • ίʔυ͸ॻ͔ΕΔΑΓ΋ͣͬͱଟ͘ಡ·ΕΔ • ελΠϧΨΠυ͸Ұ؏ੑͷͨΊʹ͋Δ • Ұ൪ॏཁͳࣄ͸ɺҰ؏ੑΛఘΊΔɺελΠϧ ΨΠυΛద༻͠ͳ͍ λΠϛϯάΛ஌Δࣄ • PEP8 ʹै͏ͨΊʹޙํޓ׵ੑΛյ͢͜ͱ͸ઈ ରʹ͠ͳ͍

Slide 10

Slide 10 text

Code lay-out

Slide 11

Slide 11 text

Indentation

Slide 12

Slide 12 text

Πϯσϯτ̍ • 1 ஈ֊ͷΠϯσϯτʹ͸ 4 ͭͷεϖʔεΛ࢖͏ • ܧଓߦͷΠϯσϯτ͸ͦͷ࣍ͷΠϯσϯτͱ ۠ผͰ͖ΔΑ͏ʹ͢Δ def long_function_name( var_one, var_two, var_three, var_four): print(var_one)

Slide 13

Slide 13 text

Πϯσϯτ̎ • ΧοίʹΑΔ҉໧ͷߦܧଓΛ࢖͍ͬͯΔ৔߹ɺ ॎʹἧ͑Δ͔ʮ௻ΓԼ͛ΠϯσϯτʯΛ࢖͏ • ʮ௻ΓԼ͛ΠϯσϯτʯΛ࢖͍ͬͯΔ৔߹͸ ࠷ॳͷߦʹҾ਺Λஔ͔ͳ͍͜ͱɻ foo = long_function_name(var_one, var_two, var_three, var_four) foo = long_function_name( var_one, var_two, var_three, var_four)

Slide 14

Slide 14 text

Πϯσϯτ̏ • ෳ਺ߦʹ౉ΔΧοίͷด͡Χοί͸ͦͷߦͷ
 ࠷ॳͷۭനͰͳ͍จࣈͷΠϯσϯτʹἧ͑Δ • ΋͘͠͸ɺͦͷෳ਺ߦͷཁૉ͕։࢝ͨ͠
 Πϯσϯτʹἧ͑Δ my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments( 'a', 'b', 'c', 'd', 'e', 'f', )

Slide 15

Slide 15 text

Πϯσϯτ̐ # NG 1 foo = long_function_name(var_one, var_two, var_three, var_four) ! # NG 2 def long_function_name( var_one, var_two, var_three, var_four): print(var_one) ʮ௻ΓԼ͛ΠϯσϯτʯΛ࢖͏৔߹͸ ࠷ॳͷߦʹҾ਺Λॻ͍ͯ͸͍͚ͳ͍ ࣍ͷΠϯσϯτͱ۠ผͰ͖ΔΑ͏ʹ͢Δ

Slide 16

Slide 16 text

Tabs or Spaces?

Slide 17

Slide 17 text

λϒ͔εϖʔε͔? • Πϯσϯτʹ͸εϖʔεΛਪ঑ • λϒΛ࢖͍͍ͬͯͷ͸طʹλϒͰΠϯσϯτ͞ Ε͍ͯΔίʔυͱҰ؏ੑΛอͭ৔߹ͷΈ • Python3 Ͱ͸Πϯσϯτʹλϒͱεϖʔε
 ྆ํ࢖͏͜ͱΛڐՄ͠ͳ͍ • Python2 ༻ͷίʔυͰ྆ํ࢖ΘΕ͍ͯΔ৔߹͸
 εϖʔεͷΈʹม׵͢Δ

Slide 18

Slide 18 text

Maximum Line Length

Slide 19

Slide 19 text

ߦͷ௕͞ͷ࠷େ஋̍ • શͯͷߦ͸79จࣈҎ಺ • docstring ΍ίϝϯτ͸72จࣈ • νʔϜͰ߹ҙ͕औΕΕ͹99จࣈ·Ͱ૿΍ͯ͠΋ྑ͍ ‘’’ ࠷େ72จࣈ ! ‘’’ ! # ࠷େ72จࣈ ! def aaa(): print “ඪ४తʹ͸79จࣈɺ࠷େ99จࣈ”

Slide 20

Slide 20 text

ߦͷ௕͞ͷ࠷େ஋̎ • ߦ͕௕͍৔߹͸ΧοίͰͷ҉໧తͳߦܧଓ͔όο ΫεϥογϡΛ࢖ͬͯॻ͘ • ΧοίͰͷߦܧଓΛ༏ઌͯ͠ॻ͘ • withɺassertͰ͸όοΫεϥογϡΛ࢖༻͢Δ with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read())

Slide 21

Slide 21 text

ߦͷ௕͞ͷ࠷େ஋̏ • ܧଓߦΛద੾ʹΠϯσϯτ͢Δ • ߲̎ԋࢉࢠͰվߦ͢Δ৔߹͸ԋࢉࢠͷޙΖͰ
 վߦ͢Δͷ͕ਪ঑ class Rectangle(Blob): ! def __init__(self, width, height, color='black', emphasis=None, highlight=0): if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong' or highlight > 100): raise ValueError("sorry, you lose") if width == 0 and height == 0 and (color == 'red' or emphasis is None): raise ValueError("I don't think so -- values are %s, %s" % (width, height)) Blob.__init__(self, width, height, color, emphasis, highlight)

Slide 22

Slide 22 text

Blank Lines

Slide 23

Slide 23 text

ۭߦ • τοϓϨϕϧͷؔ਺ఆٛͱΫϥεఆٛ͸ۭനߦ̎ͭͰ ۠੾Δ • Ϋϥε಺ͷϝιουఆٛ͸ۭനߦ̍ͭ • ࿦ཧతͳάϧʔϓΛ෼͚ΔҝʹۭനߦΛ࢖͏͜ͱ΋Մೳ class foo(object): # contents of foo ! ! class bar(object): # contents of bar

Slide 24

Slide 24 text

Source File Encoding

Slide 25

Slide 25 text

ιʔεϑΝΠϧͷΤϯίʔσΟϯά • Python഑෍෺ͷίʔυ͸ৗʹ
 Python3͸utf8ɺPython2͸ASCIIͰ͋Δ͜ͱ • جຊతʹ͸ӳޠͰॻ͘ • ৄࡉ͸PEP3131 ࢀর

Slide 26

Slide 26 text

import

Slide 27

Slide 27 text

Πϯϙʔτ̍ • importจ͸̍ߦͮͭʹ෼͚Δ͜ͱ • ͨͩ͠Ϋϥε໊౳Λ·ͱΊͯimport͸Մೳ import os import sys ! from sabprocess import Popen, PIPE

Slide 28

Slide 28 text

Πϯϙʔτ̎ • importจ͸ίʔυͷઌ಄ʹॻ͘ • importจ͸࣍ͷॱ൪ͰάϧʔϓԽ͢Δ
 1. ඪ४ϥΠϒϥϦͷ import
 2. αʔυύʔςΟϥΠϒϥϦͷimport
 3. ϩʔΧϧΞϓϦ/ϥΠϒϥϦಠࣗͷimport • ֤importͷάϧʔϓ͸ۭനߦͰ۠੾Δ

Slide 29

Slide 29 text

Whitespace in Expressions and Statements

Slide 30

Slide 30 text

Pet Peeves

Slide 31

Slide 31 text

͍ͭ΋ͷจ۟ͷλω̍ • ҎԼͷΑ͏ͳ༨ܭͳεϖʔεΛ࢖Θͳ͍
 - Χοίͷ಺ଆ
 
 - ΧϯϚɺηϛίϩϯɺίϩϯͷखલ
 
 - ؙΧοί΍֯Χοίͷखલ # OK spam(ham[1], {eggs: 2}) # NG spam( ham[ 1 ], { eggs: 2 } ) # OK if x == 4: print x, y; x, y = y, x # NG if x == 4 : print x , y ; x , y = y , x # OK dict[‘key’] = spam(list[index]) # NG dict [‘key’] = spam (list [index])

Slide 32

Slide 32 text

͍ͭ΋ͷจ۟ͷλω̎ - ଞͷߦͱἧ͑ΔͨΊʹ̎ͭҎ্ͷεϖʔε
 # OK x = 1 y = 2 long_variable = 3 ! #NG x = 1 y = 2 
long_variable = 3 ※ ͜ͷهड़ํ๏ʹ͸ࢍ൱྆࿦͋Γ

Slide 33

Slide 33 text

Other Recommendations

Slide 34

Slide 34 text

ͦͷଞͷਪ঑̍ • ҎԼͷ2߲ԋࢉࢠͷࠨӈʹ͸ඞͣεϖʔε
 ୅ೖ (=)ɾෳ߹୅ೖ (+=, -= etc.)
 ൺֱ (==, <, >, !=, <>, <=, >=, in, not in, is, is not)
 ࿦ཧ (and, or, not) # OK a = i + 1 b = x*2 - y*y c = (a+b) * (a-b) ! # NG a = i+1 b = x * 2 - y * y c = (a + b) * (a - b)

Slide 35

Slide 35 text

ͦͷଞͷਪ঑̎ • ΩʔϫʔυҾ਺΍Ҿ਺ͷσϑΥϧτ஋ͷ৔߹
 =ʹ͸લޙͷεϖʔεΛೖΕͳ͍ # OK def complex(real, imag=0.0): return magic(r=real, i=imag) ! # NG def complex(real, imag = 0.0): return magic(r = real, i = imag)

Slide 36

Slide 36 text

ͦͷଞͷਪ঑̏ • ෳ਺ͷจΛ1ͭͷߦʹॻ͘͜ͱ͸ඇਪ঑ • খ͍͞จͰ͋Ε͹ڐ͞ΕΔ৔߹΋͋Δ # OK if foo == 'blah': do_blah_thing() do_one() do_two() do_three() ! # Rather not if foo == 'blah': do_blah_thing() do_one(); do_two(); do_three() ! # NG do_one(); do_two(); do_three(long, argument, list, like, this)

Slide 37

Slide 37 text

Comments

Slide 38

Slide 38 text

ίϝϯτ • ίʔυͱໃ६͍ͯ͠Δίϝϯτ͸ίϝϯτ͕ͳ͍ ΑΓ΋ѱ͍ɻৗʹ࠷৽ʹอͭ • ίϝϯτ͕จͷ৔߹ɺ࠷ॳͷจࣈ͸େจࣈʹ͢Δ • ӳޠΛॻ͘৔߹ʮThe Elements of Styleʯʹै͏ • 120% ଞݴޠݍͷਓ͕ίʔυΛಡ·ͳ͍ͱ֬৴͕
 ແ͍ݶΓӳޠͰίϝϯτΛॻ͘

Slide 39

Slide 39 text

Block Comments

Slide 40

Slide 40 text

ϒϩοΫίϝϯτ • ϒϩοΫίϝϯτ͸ಉ͡ϨϕϧͷΠϯσϯτͷ ίʔυʹର͢Δίϝϯτ • ϒϩοΫίϝϯτ͸#ͱ1ͭͷεϖʔεͰ࢝·Δ

Slide 41

Slide 41 text

Inlines Commnets

Slide 42

Slide 42 text

ΠϯϥΠϯίϝϯτ • ΠϯϥΠϯίϝϯτ͸ίʔυͱಉ͡ߦʹॻ͔ΕΔ ίϝϯτ • ίʔυͱΠϯϥΠϯίϝϯτͷؒ͸গͳ͘ͱ΋
 2ͭͷεϖʔεͰ۠੾ΓɺΠϯϥΠϯίϝϯτ͸
 #ͱ1ͭͷεϖʔεͰ࢝·Δ

Slide 43

Slide 43 text

Documentation Strings

Slide 44

Slide 44 text

υΩϡϝϯτจࣈྻ • ྑ͍υΩϡϝϯτจࣈྻ(docstring)ͷॻ͖ํ͸
 PEP257ʹॻ͔Ε͍ͯΔ • શͯͷϞδϡʔϧɺΫϥεɺؔ਺ɺϝιουʹॻ͘ • ຤ඌʹͭ͘”""͸ಠཱͨ͠ߦͱͯ͠ॻ͖ɺۭനߦΛ
 ຤ඌͷલʹೖΕΔͷ͸ਪ঑͞ΕΔ • 1ߦͷscstring͸ɺ຤ඌͷ"""Λಉ͡ߦʹॻ͚Δ

Slide 45

Slide 45 text

·ͱΊ

Slide 46

Slide 46 text

·ͱΊ • ಡΈ΍͍͢ίʔυΛॻ͖·͠ΐ͏ • ͨ·ʹ͸PEPΛಡΜͰΈΔͱ໘ന͍ • ͨͩ͠ɺӳޠྗ͕͍Δ • Python౦ւͷൃදͰॳΊͯPythonͷίʔυΛൃ දͨ͠

Slide 47

Slide 47 text

ࢀߟURL • http://www.tdoc.info/PEP-ja/ • https://dl.dropboxusercontent.com/u/555254/ pep-0008.ja.html • http://www.lifewithpython.com/2013/01/pep-8-style-guide- for-python-code.html • http://legacy.python.org/dev/peps/pep-0008/ • http://sphinx-users.jp/articles/pep1.html

Slide 48

Slide 48 text

࠷ޙʹ • ҙ༁ɺ୺ંͬͨจɾ಺༰͕ଟʑ͕͋Γ·͢ɻ • PEP8ʹ͸όʔδϣϯ؅ཧͱ໋໊نଇ͕͋Γ·͕͢ ୺ંΓ·ͨ͠ɻ • ؒҧͬͯͨΒ͝ΊΜͳ͍͞ɻ • azusaςϯϓϨʔτΛ࢖͍·ͨ͠ɻ
 http://memo.sanographix.net/post/82160791768

Slide 49

Slide 49 text

͓·͚