Python Coding Rule
Python Coding Rule
ᓔথ㓪ⷕ㾘㣗
䆥〓 Pythonᓔথ㓪ⷕ㾘㣗
1. Pythonᓔথ㓪ⷕ㾘㣗
3\WKRQᓔথ㓪ⷕ㾘㣗 1. ҟ㒡
2. ϔ㟈ᗻⱘᓎ䆂
--- hoxide dreamingk 040724 3. ҷⷕⱘᏗሔ
--- xyb 040915 1. 㓽䖯
--- ZoomQuiet MoinMoin 050610 2. ࠊ㸼ヺ䖬ᰃぎḐ?
3. 㸠ⱘ᳔䭓ᑺ
⫼Python䖯㸠ᓔথᯊⱘ㓪ⷕ亢Ḑ㑺ᅮ
䖯㸠ᓔথᯊⱘ㓪ⷕ亢Ḑ㑺ᅮ ॳ᭛:epes:PEP 008ljStyle Guide for Python CodeNJ 4. ぎ㸠
5. 㓪ⷕ
4. ᇐܹ
ҟ㒡 5. ぎḐ
1. ݊ᅗᓎ䆂
䖭㆛᭛ḷ᠔㒭ߎⱘ㓪ⷕ㑺ᅮ䗖⫼ѢЏ㽕ⱘPythonথᏗ⠜ᴀЁ㒘៤ᷛޚᑧⱘPython ҷⷕ.䇋ᶹ䯙Ⳍ 6. ⊼䞞
݇ⱘ݇ѢPythonⱘCᅲ⦄ЁCҷⷕ亢Ḑᣛफⱘᦣ䗄.
1. ⊼䞞ഫ
䖭㆛᭛ḷᬍ㓪㞾Guido᳔߱ⱘljPython亢ḐᣛफNJϔ᭛. ᑊҢljBarry's style guideNJЁ⏏ࡴњ䚼ߚݙ 2. 㸠⊼ݙ䞞
ᆍ. ᳝ކさⱘഄᮍˈGuideⱘ亢Ḑ㾘߭ᑨ䆹ᰃヺড়ᴀPEPⱘᛣ (䆥⊼˖ህᰃᔧ᳝ކさᯊˈᑨҹ 7. ᭛ḷ࣪
Guido亢ḐЎ )ޚ䖭㆛PEPг䆌ҡ✊ᇮᅠ៤(ᅲ䰙Ϟˈᅗৃ㛑∌䖰ϡӮ㒧ᴳ). 8. ⠜ᴀ⊼䆄
9. ੑৡ㑺ᅮ
ϔ㟈ᗻⱘᓎ䆂 1. ᦣ䗄:ੑৡ亢Ḑ
2. 䇈ᯢ:ੑৡ㑺ᅮ
ᛮ㷶ᕫՓ⫼ϔ㟈ᗻᰃ᮴ⶹⱘཪᗾ(A
ᛮ㷶ᕫՓ⫼ϔ㟈ᗻᰃ᮴ⶹⱘཪᗾ Foolish Consistency is the Hobgoblin of Little Minds) 1. ᑨ䙓ⱘܡৡᄫ
2. ഫৡ
! 3. ㉏ৡ
-- Zoomq 4. ᓖᐌৡ
5. ܼሔব䞣ৡ
䖭㆛亢ḐᣛᇐЁⱘϔ㟈ᗻᰃ䞡㽕ⱘ. ϔϾ乍Ⳃⱘݙϔ㟈ᗻ䞡㽕. ϔϾഫߑ᭄ⱘݙϔ㟈 6. ߑ᭄ৡ
ᗻ᳔䞡㽕. 7. ᮍ⊩ৡᅲ՟ব䞣
8. 㒻ᡓⱘ䆒䅵
Ԛ᳔䞡㽕ⱘᰃ:ⶹ䘧ԩᯊӮϡϔ㟈 -- ᳝ᯊাᰃ≵᳝ᅲᮑ亢Ḑᣛᇐ.ᔧߎ⦄⭥ᚥᯊ,
10. 䆒䅵ᓎ䆂
䖤⫼Դⱘ᳔Շ߸ᮁ.ⳟⳟ߿ⱘ՟ᄤ,✊ৢއᅮᗢḋⳟ䍋ᴹད.ᑊϨ㽕ϡ㘏ϟ䯂!
ᠧ⸈ϔᴵ᮶ᅮ㾘߭ⱘϸϾད⧚⬅:
1. ᔧᑨ⫼䖭Ͼ㾘߭ᰃᇚᇐ㟈ҷⷕৃ䇏ᗻϟ䰡,े֓ᇍᶤҎᴹ䇈,ҪᏆ㒣дᛃѢᣝ䖭ᴵ㾘߭ᴹ䯙䇏ҷⷕњ.
2. Ўњ਼ೈⱘҷⷕֱᣕϔ㟈㗠ᠧ⸈㾘߭(г䆌ᰃग़ॳ)
-- 㱑✊䖭гᰃϾ⏙䰸݊ᅗ⏋хⱘདᴎӮ(ⳳℷⱘXP亢Ḑ).
ҷⷕⱘᏗሔ
(Code lay-out)
㓽䖯
(Indentation)
Փ⫼EmacsⱘPython-modeⱘ咬䅸ؐ:4ϾぎḐϔϾ㓽䖯ሖ. ᇍѢ⹂ᅲস㗕ⱘҷⷕ,ԴϡᏠᳯѻ⫳⏋х,ৃҹ㒻㓁Փ⫼8ぎḐⱘࠊ㸼ヺ
(8-space tabs). Emacs Python-mode㞾ࡼথ⦄᭛ӊЁЏ㽕ⱘ㓽䖯ሖ,ձℸ䆒ᅮ㓽䖯খ᭄.
ࠊ㸼ヺ䖬ᰃぎḐ"
(Tabs or Spaces)
∌䖰ϡ㽕⏋⫼ࠊ㸼ヺぎḐ. ᳔⌕㸠ⱘPython㓽䖯ᮍᓣᰃҙՓ⫼ぎḐ, ݊ᰃҙՓ⫼ࠊ㸼ヺ.⏋ড়ⴔࠊ㸼ヺぎḐ㓽䖯ⱘҷⷕᇚ㹿䕀ᤶ
៤ҙՓ⫼ぎḐ. (EmacsЁ,䗝ЁᭈϾ㓧ކऎ,ᣝESC-xএ䰸ࠊ㸼ヺ(untabify).) 䇗⫼pythonੑҸ㸠㾷䞞఼ᯊՓ⫼-t䗝乍,ৃᇍҷⷕЁϡড়⊩
ᕫ⏋ড়ࠊ㸼ヺぎḐথߎ䄺ਞ(warnings). Փ⫼-ttᯊ䄺ਞ(warnings)ᇚব៤䫭䇃(errors).䖭ѯ䗝乍ᰃ㹿催ᑺ㤤ⱘ.
ᇍѢᮄⱘ乍Ⳃ,ᔎ⚜㤤ҙՓ⫼ぎḐ(spaces-only)㗠ϡᰃࠊ㸼ヺ. 䆌㓪䕥఼ᢹ᳝ՓПᯧѢᅲ⦄ⱘࡳ㛑.(EmacsЁ,⹂䅸indent-tabs-
modeᰃnil).
㸠ⱘ᳔䭓ᑺ
1 class Rectangle(Blob):
2
3 def __init__(self, width, height,
4 color='black', emphasis=None, highlight=0):
5 if width == 0 and height == 0 and \
color == 'red' and emphasis == 'strong' or \
highlight > 100:
6 raise ValueError, "sorry, you lose"
7 if width == 0 and height == 0 and (color == 'red' or
8 emphasis is None):
9 raise ValueError, "I don't think so"
10 Blob.__init__(self, width, height,
11 color, emphasis, highlight)
ぎ㸠
(Blank Lines)
⫼ϸ㸠ぎ㸠ߚࡆ乊ሖߑ᭄㉏ⱘᅮН,㉏ݙᮍ⊩ⱘᅮН⫼ऩϾぎ㸠ߚࡆ. 乱ⱘぎ㸠ৃ㹿⫼Ѣ(ֱᅜⱘ(sparingly))ߚࡆⳌ݇ߑ᭄㒘៤ⱘ
㕸(groups of related functions). ϔ㒘Ⳍ݇ⱘऩহЁ䯈ৃҹⳕ⬹ぎ㸠.(՟བ.ϔ㒘થ(ܗa set of dummy implementations)).
ᔧぎ㸠⫼Ѣߚࡆᮍ⊩(method)ⱘᅮНᯊ,'class'㸠ϔϾᮍ⊩ᅮНП䯈г㽕᳝ϔϾぎ㸠.
ߑ᭄ЁՓ⫼ぎ㸠ᯊ,䇋䇼ᜢⱘ⫼Ѣ㸼⼎ϔϾ䘏䕥↉㨑(indicate logical sections).
Pythonফcontol-L(े^L)ᤶ义ヺЎぎḐ;Emacs(ϔѯᠧॄᎹ )㾚䖭ϾᄫヺЎ义䴶ߚࡆヺ,ℸԴⱘ᭛ӊЁ,ৃҹ⫼ҪӀᴹЎⳌ
݇⠛↉(sections)ߚ义.
㓪ⷕ
(Encodings)epes:(PEP 263)
PythonḌᖗথᏗЁⱘҷⷕᖙ乏ྟ㒜Փ⫼ASCIILatin-1㓪ⷕ(জৡ ISO-8859-1). Փ⫼ASCIIⱘ᭛ӊϡᖙ᳝䆥ⷕcookie(coding cookie).
Latin-1ҙᔧ⊼䞞᭛ḷᄫヺІ⍝ঞ㗙ৡᄫ䳔㽕Latin-1ᯊᠡ㹿Փ⫼; Փ⫼\x䕀НᄫヺᰃᄫヺІЁࣙ䴲ASCII(non-ASCII)᭄
ⱘ佪䗝ᮍ⊩. ЎPEP 263ᅲ⦄ҷⷕⱘ⌟䆩༫ӊⱘ䚼ߚ᭛ӊᰃϾ՟.
--ZoomQuiet
ᇐܹ
(Imports)
䗮ᐌᑨ䆹ऩ⣀ⱘ㸠Ёᇐܹ(Imports),՟བ:
Ԛᰃ䖭ḋгᰃৃҹⱘ:
Imports 䗮ᐌ㹿ᬒ㕂᭛ӊⱘ乊䚼,ҙഫ⊼䞞᭛ḷᄫヺІПৢ,ഫⱘܼሔব䞣ᐌ䞣Пࠡ.Importsᑨ䆹᳝乎ᑣഄ៤㒘ᅝᬒ.
1. ᷛޚᑧⱘᇐܹ(Imports )
2. Ⳍ݇ⱘЏࣙ(major package)ⱘᇐܹ(े,᠔᳝ⱘemailࣙ䱣ৢᇐܹ)
3. ⡍ᅮᑨ⫼ⱘᇐܹ(imports)
Դᑨ䆹↣㒘ᇐܹП䯈ᬒ㕂ϔϾぎ㸠.
ᇍѢݙ䚼ࣙⱘᇐܹᰃϡ㤤Փ⫼Ⳍᇍᇐܹⱘ.ᇍ᠔᳝ᇐܹ䛑㽕Փ⫼ࣙⱘ㒱ᇍ䏃ᕘ.
ҢϔϾࣙ㉏ⱘഫЁᇐܹ㉏ᯊ,䗮ᐌৃҹݭ៤䖭ḋ:
བᵰ䖭ḋݭᇐ㟈њᴀഄৡᄫކさ,䙷Мህ䖭ḋݭ
import MyClass
import foo.bar.YourClass
ेՓ⫼0\&ODVV0\&ODVVIRREDU<RXU&ODVV<RXU&ODVV
ぎḐ
1 x = 1
2 y = 2
3 long_variable = 3
㽕ྟ㒜ᇚᅗݭ៤
Toggle line numbers
1 x = 1
2 y = 2
3 long_variable = 3
(ϡ㽕ᇍҹϞӏᛣϔᴵҪѝ䆎 --- Guido ݏ៤䖭ḋⱘ亢Ḑ䍙䖛20ᑈњ.)
݊ᅗᓎ䆂
(Other Recommendations)
ྟ㒜䖭ѯѠܗ䖤ㅫヺϸ䖍ᬒ㕂ϔϾぎḐ:䌟ؐ(=), ↨䕗(==, <, >, !=, <>, <=,>=, in, not in, is, is not), Ꮧᇨ䖤ㅫ (and, or, not).
* ᣝԴⱘⳟ⊩ㅫᴃ䖤ㅫヺ਼ೈᦦܹぎḐ. ྟ㒜ֱᣕѠܗ䖤ㅫヺϸ䖍ぎḐⱘϔ㟈.
ϔѯ՟ᄤ:
Toggle line numbers
1 i = i+1
2 submitted = submitted + 1
3 x = x*2 - 1
4 hypot2 = x*x + y*y
5 c = (a+b) * (a-b)
6 c = (a + b) * (a - b)
ϡ㽕⫼Ѣᣛᅮ݇䬂ᄫখ᭄咬䅸খ᭄ؐⱘ'='ো਼ೈՓ⫼ぎḐ,՟བ:
Toggle line numbers
ϡ㽕ᇚᴵ䇁হݭৠϔ㸠Ϟ.
(Comments)
ৠҷⷕϡϔ㟈ⱘ⊼䞞↨≵⊼䞞Ꮒ.ᔧҷⷕׂᬍᯊ,ྟ㒜Ӭܜᮄ⊼䞞!
⊼䞞ᑨ䆹ᰃᅠᭈⱘহᄤ. བᵰ⊼䞞ᰃϔϾⷁ䇁হᄤ,佪ᄫ↡ᑨ䆹ݭ, 䰸䴲ҪᰃϔϾҹᇣݭᄫ↡ᓔ༈ⱘᷛ䆚ヺ(∌䖰ϡ㽕ׂᬍᷛ䆚ヺ
ⱘᇣ)ݭ.
བᵰ⊼䞞ᕜⷁ,᳔དⳕ⬹ሒⱘহো(period?㒧ሒহⱘذ乓?гৃҹᰃ䗫ো৻,) ⊼䞞ഫ䗮ᐌ⬅ϔϾϾ⬅ᅠᭈহᄤᵘ៤ⱘ↉㨑㒘៤,
↣Ͼহᄤᑨ䆹ҹহো㒧ሒ.
Դᑨ䆹হ,হোৢՓ⫼ϸϾぎḐ,ҹ֓ՓEmacsⱘᮁ㸠฿ܙᎹण䇗ϔ㟈 (䆥ᣝ:ᑨ䆹䇈ᰃՓ䖭ϸ⾡ࡳ㛑ℷᐌᎹ,". "㒭ߎњ᭛ḷ
㒧ᵘⱘᦤ⼎).
⫼㣅䇁кݭᯊ,ᮁ䆡ぎḐᰃৃ⫼ⱘ.
䴲㣅䇁ᆊⱘPythonᑣਬ:䇋⫼㣅䇁кݭԴⱘ⊼䞞,䰸䴲Դ120%ⱘ⹂ֵ 䖭ѯҷⷕϡӮ㹿ϡពԴⱘ䇁㿔ⱘҎ䯙䇏.
E
E
-- ZoomQUiet
㑺ᅮՓ⫼㒳ϔⱘ᭛ḷ࣪⊼䞞Ḑᓣ᳝߽Ѣ㡃དдᛃಶ䯳ᓎ䆂ʽ-- CodeCommentingRule
⊼䞞ഫ
(Block Comments)
⊼䞞ഫ䗮ᐌᑨ⫼Ѣ䎳䱣ⴔϔѯ(㗙ܼ䚼)ҷⷕᑊ䖭ѯҷⷕ᳝ⴔⳌৠⱘ㓽䖯ሖ. ⊼䞞ഫЁ↣㸠ҹ'#'ϔϾぎḐᓔྟ(䰸䴲Ҫᰃ⊼䞞
ⱘݙ㓽䖯᭛ᴀ). ⊼䞞ഫ↉ⱘݙ㨑ҹҙऩϾ'#'ⱘ㸠ߚࡆ. ⊼䞞ഫϞϟᮍ᳔ད᳝ϔぎ㸠ࣙೈ(Ϟᮍϸ㸠ϟᮍϔ㸠,ᇍϔϾᮄߑ᭄ᅮН↉
ⱘ⊼䞞).
㸠⊼ݙ䞞
(Inline Comments)
(inline?ݙ㘨?㗏៤"㸠↨"ݙ䕗ད৻)
ϔϾ㸠⊼ݙ䞞ᰃ䇁হৠϔ㸠ⱘ⊼䞞.㸠⊼ݙ䞞ᑨ䆹䇼ᜢ䗖⫼. 㸠⊼ݙ䞞ᑨ䆹㟇ᇥ⫼ϸϾぎḐ䇁হߚᓔ. ᅗӀᑨ䆹ҹ'#'ऩ
ϾぎḐᓔྟ.
x = x+1 # Increment x
བᵰ䇁ᛣᰃᕜᯢњⱘ,䙷М㸠⊼ݙ䞞ᰃϡᖙ㽕ⱘ,џᅲϞᰃᑨ䆹㹿এᥝⱘ. ϡ㽕䖭ḋݭ:
x = x+1 # Increment x
Ԛᰃ᳝ᯊ,䖭ḋᰃ᳝Ⲟⱘ:
᭛ḷ࣪
(Documentation Strings)
Conventions for writing good documentation strings (a.k.a. "docstrings") are immortalized in epes:PEP 257.
ᑨ䆹ϔⳈ䙉ᅜ㓪ݭདⱘ᭛ḷᄫヺІ(জৡ"docstrings")ⱘ㑺ᅮ(?ᅲϡⶹ䘧ᗢМ䆥)
Documentation Strings-- ;
pydoc;epydoc,Doxygen , MoinMoin , ,
!
-- Zoomq
Ў᠔᳝݀݅ഫ,ߑ᭄,㉏ᮍ⊩㓪ݭ᭛ḷᄫヺІ.᭛ḷᄫヺІᇍ䴲݀ᓔⱘᮍ⊩ϡᰃᖙ㽕ⱘ,ԚԴᑨ䆹᳝ϔϾᦣ䗄䖭Ͼᮍ⊩خҔМⱘ⊼
䞞.䖭Ͼ⊼䞞ᑨ䆹"def"䖭㸠ৢ.
epes:PEP 257 ᦣ䗄њདⱘ᭛ḷᄫヺІⱘ㑺ᅮ.ϔᅮ⊼ᛣ,㸠᭛ḷᄫヺІ㒧ሒⱘ""" ᑨ䆹ऩ⣀៤㸠,՟བ:
"""Return a foobang
ᇍऩ㸠ⱘ᭛ḷᄫヺІ,㒧ሒⱘ"""ৠϔ㸠гৃҹ.
Python \
:
#python
>>> import time
>>> dir(time)
['__doc__', '__file__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime',
'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset']
>>> help(time.time)
Help on built-in function time in module time:
time(...)
time() -> floating point number
⠜ᴀ⊼䆄
䖭Ͼ㸠ᑨ䆹ࣙഫⱘ᭛ḷᄫヺІПৢ,᠔᳝ҷⷕПࠡ,Ϟϟ⫼ϔϾぎ㸠ߚࡆ.
CVS
# $id$
# $Revision$
ੑৡ㑺ᅮ
(Naming Conventions)
Pythonᑧⱘੑৡ㑺ᅮ᳝⚍⏋х,᠔ҹ៥Ӏᇚ∌䖰ϡ㛑ՓПবᕫᅠܼϔ㟈--- ϡ䖛䖬ᰃ᳝݀䅸ⱘੑৡ㾘㣗ⱘ. ᮄⱘഫࣙ(ࣙᣀϝᮍⱘ
Ḛᶊ)ᖙ乏ヺড়䖭ѯᷛޚ,ԚᇍᏆ᳝ⱘᑧᄬϡৠ亢Ḑⱘ, ֱᣕݙ䚼ⱘϔ㟈ᗻᰃ佪䗝ⱘ.
ᦣ䗄ੑৡ亢Ḑ
䇈ᯢੑৡ㑺ᅮ
ᑨ䙓ⱘܡৡᄫ
(Names to Avoid)
∌䖰ϡ㽕⫼ᄫヺ`l'(ᇣݭᄫ↡el(ህᰃ䇏䷇,ϟৠ)), 2 ݭᄫ↡RK I'(ݭᄫ↡eye)Ўऩᄫヺⱘব䞣ৡ. ᶤѯᄫԧЁ,䖭ѯᄫヺϡ
㛑Ϣ᭄ᄫ10ߚᓔ.ᔧᛇ㽕Փ⫼'l'ᯊˈ⫼'L'ҷ᳓ᅗ.
ഫৡ
(Module Names)
ഫᑨ䆹ᰃϡϟߦ㒓ⱘ,ㅔⷁⱘ,ᇣⱘݭৡᄫ.
Ўഫৡ㹿ᇘࠄ᭛ӊৡ, ᳝ѯ᭛ӊ㋏㒳ᇣݭϡᬣᛳᑊϨⷁ䭓ৡᄫ, ഫৡ㹿䗝ЎⳌᔧⷁᰃ䞡㽕ⱘ---䖭UnixϞϡᰃ䯂乬, Ԛ
ᔧҷⷕӴࠄMac WindowsϞህৃ㛑ᰃϾ䯂乬њ.
ᔧϔϾ⫼CC++ⱘݭᠽሩഫ᳝ϔϾԈ䱣ⱘPythonഫ,䖭ϾPythonഫᦤկњ
ϔϾ催ሖ(՟བˈ䴶ᇍ䈵)ⱘষᯊ,C/C++ഫ᳝ϔϾࠡᇐϟߦ㒓(བ˖_socket)
Pythonࣙᑨ䆹ᰃϡϟߦ㒓ⱘ,ㅔⷁⱘ,ܼᇣⱘݭৡᄫ.
㉏ৡ
(Class Names)
Т≵᳝՟ˈ㉏ৡᘏᰃՓ⫼佪ᄫ↡ݭऩ䆡І(CapWords)ⱘ㑺ᅮ.
ᓖᐌৡ
(Exception Names)
བᵰഫᇍ᠔᳝ᚙމᅮНњऩϾᓖᐌ,ᅗ䗮ᐌ㹿ি"خerror""Error". ԐТݙᓎ(ᠽሩ)ⱘഫՓ⫼"error"(՟བ:os.error), 㗠Pythonഫ䗮
ᐌ⫼"Error" (՟བ: xdrlib.Error). 䍟ԐТᰃؒՓ⫼CapWordsᓖᐌৡ.
ܼሔব䞣ৡ
ߑ᭄ৡ
(Function Names)
ߑ᭄ৡᑨ䆹Ўᇣݭ,ৃ㛑⫼ϟߦ㒓亢Ḑऩ䆡ҹࡴৃ䇏ᗻ. mixedCaseҙ㹿ܕ䆌⫼Ѣ䖭⾡亢ḐᏆ㒣ऴӬⱘϞϟ᭛(བ: threading.py) ҹ
ֱ֓ᣕৢݐᆍ.
ᮍ⊩ৡᅲ՟ব䞣
㒻ᡓⱘ䆒䅵
䆒䅵ᓎ䆂
(Programming Recommendations)
ৠ䈵NoneП㉏ⱘऩؐ䖯㸠↨䕗,ᑨ䆹∌䖰⫼:'is''is not'ᴹخ. ᔧԴᴀᛣᰃ"if x is not None"ᯊ,ᇍݭ៤"if x"㽕ᇣᖗ -- ՟བᔧԴ⌟䆩ϔϾ
咬䅸ЎNoneⱘব䞣খ᭄ᰃ৺㹿䆒㕂Ў݊ᅗؐᯊ. 䖭Ͼ݊ᅗؐৃ㛑ᰃϔϾᏗᇨϞϟ᭛ЁЎ!ؐⱘ؛
Ѣ㉏ⱘᓖᐌᘏᰃད䖛ѢᄫヺІⱘᓖᐌ. ഫࣙᑨ䆹ᅮНᅗӀ㞾Ꮕⱘඳݙ⡍ᅮⱘᓖᐌ㉏(base exception class), ㉏ᑨ䆹ᰃݙᓎ
ⱘException㉏ⱘᄤ㉏. 䖬ྟ㒜ࣙϔϾ㉏ⱘ᭛ḷᄫヺІ.՟བ:
Toggle line numbers
1 class MessageError(Exception):
2 """Base class for errors in the email package."""
1 if isinstance(obj, basestring):
Python 2.02.1,Դᑨ䆹䖭ḋخ:
Toggle line numbers
-- ZoomQuiet (2005-01-26)