You are on page 1of 15

PythonCodingRule

ᓔথ㓪ⷕ㾘㣗
䆥〓 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).

㸠ⱘ᳔໻䭓ᑺ

(Maximum Line Length)


਼ೈҡ✊᳝䆌໮䆒໛㹿䰤ࠊ೼↣㸠80ᄫヺ;㗠Ϩ,にষ䰤ࠊ೼80Ͼᄫヺ Փᇚ໮Ͼにষᑊᥦᬒ㕂៤Ўৃ㛑.೼䖭ѯ䆒໛ϞՓ⫼咬䅸ⱘᡬ঴
(wrapping)ᮍᓣⳟ䍋ᴹ᳝⚍ϥ䰟. ಴ℸ,䇋ᇚ᠔᳝㸠䰤ࠊ೼᳔໻79ᄫヺ(Emacs‫⹂ޚ‬ᕫᇚ㸠䰤ࠊЎ䭓80ᄫヺ), ᇍ乎ᑣᥦᬒⱘ໻ഫ᭛ᴀ(᭛
ḷᄫヺІ៪⊼䞞),᥼㤤ᇚ䭓ᑺ䰤ࠊ೼72ᄫヺ.
ᡬ঴䭓㸠ⱘ佪䗝ᮍ⊩ᰃՓ⫼Pyhonᬃᣕⱘ೚ᣀো,ᮍᣀো(brackets)੠㢅ᣀো(braces)‫ⱘݙ‬㸠ᓊ㓁. བᵰ䳔㽕,Դৃҹ೼㸼䖒ᓣ਼ೈ๲ࡴϔ
ᇍ乱໪ⱘ೚ᣀো, Ԛᰃ᳝ᯊՓ⫼ড᭰ᴴⳟ䍋ᴹ᳈ད.⹂䅸ᙄᔧᕫ㓽䖯њᓊ㓁ⱘ㸠. EmacsⱘPython-modeℷ⹂ᕫᅠ៤њ䖭ѯ.ϔѯ՟ᄤ:
Toggle line numbers

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ḌᖗথᏗЁⱘҷⷕᖙ乏ྟ㒜Փ⫼ASCII៪Latin-1㓪ⷕ(জৡ ISO-8859-1). Փ⫼ASCIIⱘ᭛ӊϡᖙ᳝䆥ⷕcookie(coding cookie).
Latin-1ҙᔧ⊼䞞៪᭛ḷᄫヺІ⍝ঞ԰㗙ৡᄫ䳔㽕Latin-1ᯊᠡ㹿Փ⫼; ঺໪Փ⫼\x䕀Нᄫヺᰃ೼ᄫヺІЁࣙ৿䴲ASCII(non-ASCII)᭄᥂
ⱘ佪䗝ᮍ⊩. ԰ЎPEP 263ᅲ⦄ҷⷕⱘ⌟䆩༫ӊⱘ䚼ߚ᭛ӊᰃϾ՟໪.

Python 2.4 Unicode


UTF-8

--ZoomQuiet

ᇐܹ

(Imports)
䗮ᐌᑨ䆹೼ऩ⣀ⱘ㸠Ёᇐܹ(Imports),՟བ:

No: import sys, os


Yes: import sys
import os

Ԛᰃ䖭ḋгᰃৃҹⱘ:

from types import StringType, ListType

Imports 䗮ᐌ㹿ᬒ㕂೼᭛ӊⱘ乊䚼,ҙ೼῵ഫ⊼䞞੠᭛ḷᄫヺІПৢ,೼῵ഫⱘܼሔব䞣੠ᐌ䞣Пࠡ.Importsᑨ䆹᳝乎ᑣഄ៤㒘ᅝᬒ.
1. ᷛ‫ޚ‬ᑧⱘᇐܹ(Imports )
2. Ⳍ݇ⱘЏࣙ(major package)ⱘᇐܹ(े,᠔᳝ⱘemailࣙ೼䱣ৢᇐܹ)
3. ⡍ᅮᑨ⫼ⱘᇐܹ(imports)
Դᑨ䆹೼↣㒘ᇐܹП䯈ᬒ㕂ϔϾぎ㸠.
ᇍѢ‫ݙ‬䚼ࣙⱘᇐܹᰃϡ᥼㤤Փ⫼Ⳍᇍᇐܹⱘ.ᇍ᠔᳝ᇐܹ䛑㽕Փ⫼ࣙⱘ㒱ᇍ䏃ᕘ.
ҢϔϾࣙ৿㉏ⱘ῵ഫЁᇐܹ㉏ᯊ,䗮ᐌৃҹ‫ݭ‬៤䖭ḋ:

from MyClass import MyClass


from foo.bar.YourClass import YourClass

བᵰ䖭ḋ‫ݭ‬ᇐ㟈њᴀഄৡᄫ‫ކ‬さ,䙷Мህ䖭ḋ‫ݭ‬

import MyClass
import foo.bar.YourClass

ेՓ⫼0\&ODVV0\&ODVV੠IRREDU<RXU&ODVV<RXU&ODVV

ぎḐ

(Whitespace in Expressions and Statements)


Guidoϡ୰⃶೼ҹϟഄᮍߎ⦄ぎḐ:
VSDP KDP>@^HJJV` $OZD\VZULWHWKLVDV VSDP KDP>@^HJJV` 
㋻᣼ⴔ೚ᣀো,ᮍᣀো੠㢅ᣀোⱘ,བ:VSDP KDP>@^HJJV` 
㽕ྟ㒜ᇚᅗ‫ݭ‬៤VSDP KDP>@^HJJV` 
LI[ SULQW[\[\ \[ Always write this as LI[ SULQW[\[\ \[
㋻䌈೼䗫ো,ߚো៪‫ݦ‬োࠡⱘ,བ:
LI[ SULQW[\[\ \[ 㽕ྟ㒜ᇚᅗ‫ݭ‬៤ LI[ SULQW[\[\ \[
㋻䌈ⴔߑ᭄䇗⫼ⱘখ᭄߫㸼ࠡᓔᓣᣀো(open parenthesis )ⱘ,བVSDP  .㽕ྟ㒜ᇚᅗ‫ݭ‬៤VSDP  .
VOLFLQJDVLQGLFW> NH\ @ OLVW>LQGH[@ Always write this as GLFW> NH\ @ OLVW>LQGH[@
㋻䌈೼㋶ᓩ៪ߛ⠛(slicing?ϟᷛ?)ᓔྟⱘᓔᓣᣀোࠡⱘ,བ:
GLFW> NH\ @ OLVW>LQGH[@㽕ྟ㒜ᇚᅗ‫ݭ‬៤GLFW> NH\ @ OLVW>LQGH[@
೼䌟ؐ(៪݊ᅗ)䖤ㅫヺ਼ೈⱘ⫼Ѣ੠݊ᅗᑊᥦⱘϔϾҹϞⱘぎḐ,བ:
Toggle line numbers

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

1 def complex(real, imag=0.0):


2 return magic(r=real, i=imag)

ϡ㽕ᇚ໮ᴵ䇁হ‫ݭ‬೼ৠϔ㸠Ϟ.

No: if foo == 'blah': do_blah_thing()


Yes: if foo == 'blah':
do_blah_thing()

No: do_one(); do_two(); do_three()


Yes: do_one()
do_two()
do_three()
⊼䞞

(Comments)
ৠҷⷕϡϔ㟈ⱘ⊼䞞↨≵⊼䞞᳈Ꮒ.ᔧҷⷕׂᬍᯊ,ྟ㒜Ӭ‫ܜ‬᳈ᮄ⊼䞞!
⊼䞞ᑨ䆹ᰃᅠᭈⱘহᄤ. བᵰ⊼䞞ᰃϔϾⷁ䇁៪হᄤ,佪ᄫ↡ᑨ䆹໻‫ݭ‬, 䰸䴲ҪᰃϔϾҹᇣ‫ݭ‬ᄫ↡ᓔ༈ⱘᷛ䆚ヺ(∌䖰ϡ㽕ׂᬍᷛ䆚ヺ
ⱘ໻ᇣ‫)ݭ‬.
བᵰ⊼䞞ᕜⷁ,᳔དⳕ⬹᳿ሒⱘহো(period?㒧ሒহ᳿ⱘ‫ذ‬乓?гৃҹᰃ䗫ো৻,) ⊼䞞ഫ䗮ᐌ⬅ϔϾ៪໮Ͼ⬅ᅠᭈহᄤᵘ៤ⱘ↉㨑㒘៤,
↣Ͼহᄤᑨ䆹ҹহো㒧ሒ.
Դᑨ䆹೼হ᳿,হোৢՓ⫼ϸϾぎḐ,ҹ֓ՓEmacsⱘᮁ㸠੠฿‫ܙ‬Ꮉ԰ण䇗ϔ㟈 (䆥ᣝ:ᑨ䆹䇈ᰃՓ䖭ϸ⾡ࡳ㛑ℷᐌᎹ԰,". "㒭ߎњ᭛ḷ
㒧ᵘⱘᦤ⼎).
⫼㣅䇁к‫ݭ‬ᯊ,ᮁ䆡੠ぎḐᰃৃ⫼ⱘ.
䴲㣅䇁೑ᆊⱘPython⿟ᑣਬ:䇋⫼㣅䇁к‫ݭ‬Դⱘ⊼䞞,䰸䴲Դ120%ⱘ⹂ֵ 䖭ѯҷⷕϡӮ㹿ϡពԴⱘ䇁㿔ⱘҎ䯙䇏.

E
E

-- ZoomQUiet
㑺ᅮՓ⫼㒳ϔⱘ᭛ḷ࣪⊼䞞Ḑᓣ᳝߽Ѣ㡃དдᛃ੠ಶ䯳ᓎ䆂ʽ-- CodeCommentingRule

⊼䞞ഫ

(Block Comments)
⊼䞞ഫ䗮ᐌᑨ⫼Ѣ䎳䱣ⴔϔѯ(៪㗙ܼ䚼)ҷⷕᑊ੠䖭ѯҷⷕ᳝ⴔⳌৠⱘ㓽䖯ሖ⃵. ⊼䞞ഫЁ↣㸠ҹ'#'੠ϔϾぎḐᓔྟ(䰸䴲Ҫᰃ⊼䞞
‫ⱘݙ‬㓽䖯᭛ᴀ). ⊼䞞ഫ‫↉ⱘݙ‬㨑ҹҙ৿ऩϾ'#'ⱘ㸠ߚࡆ. ⊼䞞ഫϞϟᮍ᳔ད᳝ϔぎ㸠ࣙೈ(៪Ϟᮍϸ㸠ϟᮍϔ㸠,ᇍϔϾᮄߑ᭄ᅮН↉
ⱘ⊼䞞).

㸠‫⊼ݙ‬䞞

(Inline Comments)
(inline?‫ݙ‬㘨?㗏៤"㸠‫↨"ݙ‬䕗ད৻)
ϔϾ㸠‫⊼ݙ‬䞞ᰃ੠䇁হ೼ৠϔ㸠ⱘ⊼䞞.㸠‫⊼ݙ‬䞞ᑨ䆹䇼ᜢ䗖⫼. 㸠‫⊼ݙ‬䞞ᑨ䆹㟇ᇥ⫼ϸϾぎḐ੠䇁হߚᓔ. ᅗӀᑨ䆹ҹ'#'੠ऩ
ϾぎḐᓔྟ.
x = x+1 # Increment x

བᵰ䇁ᛣᰃᕜᯢњⱘ,䙷М㸠‫⊼ݙ‬䞞ᰃϡᖙ㽕ⱘ,џᅲϞᰃᑨ䆹㹿এᥝⱘ. ϡ㽕䖭ḋ‫ݭ‬:

x = x+1 # Increment x

x = x+1 # Compensate for border

Ԛᰃ᳝ᯊ,䖭ḋᰃ᳝Ⲟⱘ:

x = x+1 # Compensate for border

᭛ḷ࣪

(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

Optional plotz says to frobnicate the bizbaz first.


"""

ᇍऩ㸠ⱘ᭛ḷᄫヺІ,㒧ሒⱘ"""೼ৠϔ㸠гৃҹ.
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

Return the current time in seconds since the Epoch.


Fractions of a second may be present if the system clock provides them.

⠜ᴀ⊼䆄

(Version Bookkeeping) (៥㾝ᕫি"⊼䆄"᳈ད)


བᵰԴ㽕ᇚRCS៪CVSⱘᴖ乍(crud)ࣙ৿೼Դⱘ⑤᭛ӊЁ,ᣝབϟ‫خ‬.
Toggle line numbers

1 __version__ = "$Revision: 1.4 $"


2 # $Source: E:/cvsroot/python_doc/pep8.txt,v $

䖭Ͼ㸠ᑨ䆹ࣙ৿೼῵ഫⱘ᭛ḷᄫヺІПৢ,᠔᳝ҷⷕПࠡ,Ϟϟ⫼ϔϾぎ㸠ߚࡆ.

CVS

# $id$
# $Revision$

# $Id: ussp.py,v 1.22 2004/07/21 04:47:41 hd Exp $


# $Revision: 1.4 $
----HD

ੑৡ㑺ᅮ

(Naming Conventions)
Pythonᑧⱘੑৡ㑺ᅮ᳝⚍⏋х,᠔ҹ៥Ӏᇚ∌䖰ϡ㛑ՓПবᕫᅠܼϔ㟈--- ϡ䖛䖬ᰃ᳝݀䅸ⱘੑৡ㾘㣗ⱘ. ᮄⱘ῵ഫ੠ࣙ(ࣙᣀ㄀ϝᮍⱘ
Ḛᶊ)ᖙ乏ヺড়䖭ѯᷛ‫ޚ‬,ԚᇍᏆ᳝ⱘᑧᄬ೼ϡৠ亢Ḑⱘ, ֱᣕ‫ݙ‬䚼ⱘϔ㟈ᗻᰃ佪䗝ⱘ.

ᦣ䗄ੑৡ亢Ḑ

(Descriptive: Naming Styles)


᳝䆌໮ϡৠⱘੑৡ亢Ḑ.ҹϟⱘ᳝ࡽѢ䕼䅸ℷ೼Փ⫼ⱘੑৡ亢Ḑ,⣀ゟѢᅗӀⱘ԰⫼.
ҹϟⱘੑৡ亢Ḑᰃӫ᠔਼ⶹⱘ:
b (ऩϾᇣ‫ݭ‬ᄫ↡)
B (ऩϾ໻‫ݭ‬ᄫ↡)
ᇣ‫ݭ‬І བ:getname
ᏺϟߦⱘᇣ‫ݭ‬І བ:_getname
໻‫ݭ‬І བ:GETNAME
ᏺϟߦⱘ໻‫ݭ‬І བ:_GETNAME
CapitalizedWords(佪ᄫ↡໻‫ݭ‬ऩ䆡І) (៪ CapWords, CamelCase -- 䖭ḋੑৡᰃ⬅Ѣᅗⱘᄫ↡䫭㨑᳝㟈ⱘḋᄤ㗠ᴹⱘ.
䖭᳝ᯊг㹿ᔧ԰StudlyCaps. བ:GetName
mixedCase (⏋ড়໻ᇣ‫ݭ‬І)(Ϣ佪ᄫ↡໻‫ݭ‬ІϡৠП໘೼Ѣ㄀ϔϾᄫヺᰃᇣ‫ݭ‬བ:getName)
Capitalized_Words_With_Underscores(ᏺϟߦ㒓ⱘ佪ᄫ↡໻‫ݭ‬І) (ϥ䰟!)
䖬᳝ϔ⾡Փ⫼⡍߿ࠡ㓔ⱘ亢Ḑˈ⫼ѢᇚⳌ݇ⱘৡᄫߚ៤㒘.䖭೼PythonЁϡᐌ⫼, ԚᰃߎѢᅠᭈᗻ㽕ᦤϔϟ.՟བ,os.stat()ߑ᭄䖨ಲϔ
Ͼtuple, Ҫⱘ‫ܗ‬㋴Ӵ㒳Ϟ᳝䈵st_mode, st_size, st_mtimeㄝㄝ䖭ḋⱘৡᄫ. X11ᑧⱘ᠔᳝݀ᓔߑ᭄ҹXᓔ༈.(೼PythonЁ,䖭Ͼ亢Ḑ䗮ᐌ䅸
Ўᰃϡᖙ㽕ⱘ, ಴Ўሲᗻ੠ᮍ⊩ৡҹᇍ䈵԰ࠡ㓔,㗠ߑ᭄ৡҹ῵ഫৡ԰ࠡ㓔.)
঺໪,ҹϟ⫼ϟߦ㒓԰ࠡᇐ៪㒧ሒⱘ⡍⅞ᔶᓣᰃ㹿݀䅸ⱘ(䖭ѯ䗮ᐌৃҹ੠ӏԩдᛃ㒘ড়(Փ⫼?)):
_single_leading_underscore(ҹϔϾϟߦ㒓԰ࠡᇐ): ᔅⱘ"‫ݙ‬䚼Փ⫼(internal use)"ᷛᖫ.
(՟བ,"from M import *"ϡӮᇐܹҹϟߦ㒓ᓔ༈ⱘᇍ䈵).
single_trailing_underscore_(ҹϔϾϟߦ㒓㒧ሒ): ⫼Ѣ䙓‫ܡ‬ϢPython݇䬂䆡ⱘ‫ކ‬さ,՟བ.
"Tkinter.Toplevel(master, class_='ClassName')".
BBGRXEOHBOHDGLQJBXQGHUVFRUH(ঠϟߦ㒓): ҢPython 1.4䍋Ў㉏⾕᳝ৡ.
BBGRXEOHBOHDGLQJBDQGBWUDLOLQJBXQGHUVFRUHBB: ⡍⅞ⱘ(magic) ᇍ䈵៪ሲᗻ,ᄬ೼Ѣ⫼᠋᥻ࠊⱘ(user-controlled)ৡᄫぎ䯈, ՟བ:
BBLQLWBB, BBLPSRUWBB ៪ BBILOHBB. ᳝ᯊᅗӀ㹿⫼᠋ᅮН, ⫼Ѣ㾺থᶤϾ⡍⅞㸠Ў(magic behavior)(՟བ:䖤ㅫヺ䞡䕑); ᳝ᯊ㹿ᵘ䗴఼
(infrastructure)ᦦܹ,ҹ֓㞾ᏅՓ⫼៪Ўњ䇗䆩. ಴ℸ,೼᳾ᴹⱘ⠜ᴀЁ,ᵘ䗴఼(ᵒᬷᕫᅮНЎPython㾷䞞఼੠ᷛ‫ޚ‬ᑧ) ৃ㛑ᠧㅫᓎゟ㞾Ꮕ
ⱘ儨⊩ሲᗻ߫㸼,⫼᠋ҷⷕ䗮ᐌᑨ䆹䰤ࠊᇚ䖭⾡㑺ᅮ԰ЎᏅ⫼. ℆៤Ўᵘ䗴఼ⱘϔ䚼ߚⱘ⫼᠋ҷⷕৃҹ೼ϟ⒥㒓Ё㒧ড়Փ⫼ⷁࠡ㓔,՟
བ. BBERERBPDJLFBDWWUBB.

䇈ᯢੑৡ㑺ᅮ

(Prescriptive: Naming Conventions)

ᑨ䙓‫ⱘܡ‬ৡᄫ

(Names to Avoid)
∌䖰ϡ㽕⫼ᄫヺ`l'(ᇣ‫ݭ‬ᄫ↡el(ህᰃ䇏䷇,ϟৠ)), 2 ໻‫ݭ‬ᄫ↡RK ៪I'(໻‫ݭ‬ᄫ↡eye)԰Ўऩᄫヺⱘব䞣ৡ. ೼ᶤѯᄫԧЁ,䖭ѯᄫヺϡ
㛑Ϣ᭄ᄫ1੠0ߚᓔ.ᔧᛇ㽕Փ⫼'l'ᯊˈ⫼'L'ҷ᳓ᅗ.

῵ഫৡ

(Module Names)
῵ഫᑨ䆹ᰃϡ৿ϟߦ㒓ⱘ,ㅔⷁⱘ,ᇣ‫ⱘݭ‬ৡᄫ.
಴Ў῵ഫৡ㹿᯴ᇘࠄ᭛ӊৡ, ᳝ѯ᭛ӊ㋏㒳໻ᇣ‫ݭ‬ϡᬣᛳᑊϨ៾ⷁ䭓ৡᄫ, ῵ഫৡ㹿䗝ЎⳌᔧⷁᰃ䞡㽕ⱘ---䖭೼UnixϞϡᰃ䯂乬, Ԛ
ᔧҷⷕӴࠄMac ៪WindowsϞህৃ㛑ᰃϾ䯂乬њ.
ᔧϔϾ⫼C៪C++‫ⱘݭ‬ᠽሩ῵ഫ᳝ϔϾԈ䱣ⱘPython῵ഫ,䖭ϾPython῵ഫᦤկњ
ϔϾ᳈催ሖ(՟བˈ᳈䴶৥ᇍ䈵)ⱘ᥹ষᯊ,C/C++῵ഫ᳝ϔϾࠡᇐϟߦ㒓(བ˖_socket)
Pythonࣙᑨ䆹ᰃϡ৿ϟߦ㒓ⱘ,ㅔⷁⱘ,ܼᇣ‫ⱘݭ‬ৡᄫ.

㉏ৡ
(Class Names)
޴Т≵᳝՟໪ˈ㉏ৡᘏᰃՓ⫼佪ᄫ↡໻‫ݭ‬ऩ䆡І(CapWords)ⱘ㑺ᅮ.

ᓖᐌৡ

(Exception Names)
བᵰ῵ഫᇍ᠔᳝ᚙ‫މ‬ᅮНњऩϾᓖᐌ,ᅗ䗮ᐌ㹿ি‫"خ‬error"៪"Error". ԐТ‫ݙ‬ᓎ(ᠽሩ)ⱘ῵ഫՓ⫼"error"(՟བ:os.error), 㗠Python῵ഫ䗮
ᐌ⫼"Error" (՟བ: xdrlib.Error). 䍟࢓ԐТᰃؒ৥Փ⫼CapWordsᓖᐌৡ.

ܼሔব䞣ৡ

(Global Variable Names)


(䅽៥ӀᏠᳯ䖭ѯব䞣ᠧㅫা㹿⫼Ѣ῵ഫ‫ݙ‬䚼) 䖭ѯ㑺ᅮϢ䙷ѯ⫼Ѣߑ᭄ⱘ㑺ᅮᏂϡ໮.㹿䆒䅵ৃҹ䗮䖛"from M import *"ᴹՓ⫼ⱘ
䙷ѯ῵ഫ,ᑨ䆹೼䙷ѯϡᛇ㹿ᇐܹⱘܼሔব䞣(䖬᳝‫ݙ‬䚼ߑ᭄੠㉏)ࠡࡴϔϾϟߦ㒓).

ߑ᭄ৡ

(Function Names)
ߑ᭄ৡᑨ䆹Ўᇣ‫ݭ‬,ৃ㛑⫼ϟߦ㒓亢Ḑऩ䆡ҹ๲ࡴৃ䇏ᗻ. mixedCaseҙ㹿‫ܕ‬䆌⫼Ѣ䖭⾡亢ḐᏆ㒣ऴӬ࢓ⱘϞϟ᭛(བ: threading.py) ҹ
ֱ֓ᣕ৥ৢ‫ݐ‬ᆍ.

ᮍ⊩ৡ੠ᅲ՟ব䞣

(Method Names and Instance Variables)


䖭↉໻ԧϞ੠ߑ᭄Ⳍৠ:䗮ᐌՓ⫼ᇣ‫ݭ‬ऩ䆡,ᖙ㽕ᯊ⫼ϟߦ㒓ߚ䱨๲ࡴৃ䇏ᗻ.
Փ⫼ϔϾࠡᇐϟߦ㒓ҙ⫼Ѣϡᠧㅫ԰Ў㉏ⱘ݀݅᥹ষⱘ‫ݙ‬䚼ᮍ⊩੠ᅲ՟ব䞣. Pythonϡᔎࠊ㽕∖䖭ḋ; ᅗপ‫އ‬Ѣ⿟ᑣਬᰃ৺䙉ᅜ䖭Ͼ
㑺ᅮ.
Փ⫼ϸϾࠡᇐϟߦ㒓ҹ㸼⼎㉏⾕᳝ⱘৡᄫ. Pythonᇚ䖭ѯৡᄫ੠㉏ৡ䖲᥹೼ϔ䍋: བᵰ㉏Foo᳝ϔϾሲᗻৡЎ BBD, ᅗϡ㛑ҹ)RRBBD䆓
䯂. (ᠻ㨫ⱘ⫼᠋(An insistent user)䖬ᰃৃҹ䗮䖛)RRB)RRBBDᕫࠄ䆓䯂ᴗ.) 䗮ᐌ,ঠࠡᇐϟߦ㒓ᑨ䆹া⫼ᴹ䙓‫ܡ‬Ϣ㉏(Ўৃҹᄤ㉏࣪᠔䆒
䅵)Ёⱘሲᗻথ⫳ৡᄫ‫ކ‬さ.

㒻ᡓⱘ䆒䅵

(Designing for inheritance)


ྟ㒜㽕⹂ᅮϔϾ㉏Ёⱘᮍ⊩੠ᅲ՟ব䞣ᰃ৺㽕㹿݀ᓔ. 䗮ᐌ,∌䖰ϡ㽕ᇚ᭄᥂ব䞣݀ᓔ,䰸䴲Դᅲ⦄ⱘᴀ䋼Ϟাᰃ䆄ᔩ. ҎӀᘏᰃ᳈୰
⃶㒭㉏ᦤկϔϾߑ᭄ⱘ᥹ষ԰Ў᳓ᤶ (Python 2.2 ⱘϔѯᓔথ㗙೼䖭⚍Ϟ‫خ‬ᕫ䴲ᐌⓖ҂).
ৠḋ,⹂ᅮԴⱘሲᗻᰃ৺ᑨЎ⾕᳝ⱘ.⾕᳝Ϣ䴲᳝݀ⱘऎ߿೼Ѣ: ࠡ㗙∌䖰ϡӮ㹿⫼೼ϔϾ⌒⫳㉏Ё,㗠ৢ㗙ৃ㛑Ӯ. ᰃⱘ,Դᑨ䆹೼໻㛥
Ёህ⫼㒻ᡓ䆒䅵དњԴⱘ㉏.
⾕᳝ሲᗻᖙ乏᳝ϸϾࠡᇐϟߦ㒓,᮴ৢ㕂ϟߦ㒓.
䴲᳝݀ሲᗻᖙ乏᳝ϔϾࠡᇐϟߦ㒓,᮴ৢ㕂ϟߦ㒓.
݀݅ሲᗻ≵᳝ࠡᇐ੠ৢ㕂ϟߦ㒓,䰸䴲ᅗӀϢֱ⬭ᄫ‫ކ‬さ, ೼ℸᚙ‫މ‬ϟ,ऩϾৢ㕂ϟߦ㒓↨ࠡ㕂៪⏋хⱘᣐ‫ݭ‬㽕ད, ՟བ:class_ӬѢ
klass. ᳔ৢϔ⚍᳝ѯѝ䆂; བᵰⳌ↨class_Դ᳈୰⃶klass,䙷М䖭াᰃϔ㟈ᗻ䯂乬.

䆒䅵ᓎ䆂

(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."""

Փ⫼ᄫヺІᮍ⊩(methods)ҷ᳓ᄫヺІ῵ഫ,䰸䴲ᖙ乏৥ৢ‫ݐ‬ᆍPython 2.0ҹࠡⱘ⠜ᴀ. ᄫヺІᮍ⊩ᘏᰃ䴲ᐌᖿ,㗠Ϩ੠unicodeᄫヺІ݅


⫼ৠḋⱘAPI(ᑨ⫼⿟ᑣ᥹ষ)
೼Ẕᶹࠡ㓔៪ৢ㓔ᯊ䙓‫ܡ‬ᇍᄫヺІ䖯㸠ߛ⠛.
⫼startswith()੠endswith()ҷ᳓, ಴ЎᅗӀᰃᯢ⹂ⱘᑊϨ䫭䇃᳈ᇥ. ՟བ:

No: if foo[:3] == 'bar':


Yes: if foo.startswith('bar'):

՟໪ᰃབᵰԴⱘҷⷕᖙ乏Ꮉ԰೼Python 1.5.2 (Ԛᰃ៥ӀᏠᳯᅗϡӮথ⫳!).


ᇍ䈵㉏ൟⱘ↨䕗ᑨ䆹ྟ㒜⫼isinstance()ҷ᳓Ⳉ᥹↨䕗㉏ൟ.՟བ:

No: if type(obj) is type(1):


Yes: if isinstance(obj, int):

ẔᶹϔϾᇍ䈵ᰃ৺ᰃᄫヺІᯊ,㋻䆄ᅗгৃ㛑ᰃunicodeᄫヺІ! ೼Python 2.3, str੠unicode᳝݀݅ⱘ෎㉏,basestring,᠔ҹԴৃҹ䖭ḋ‫خ‬:


Toggle line numbers

1 if isinstance(obj, basestring):

೼Python 2.2 ㉏ൟ῵ഫЎℸᅮНњStringTypes㉏ൟ, ՟བ:


Toggle line numbers

1 from types import StringTypes


2 if isinstance(obj, StringTypes):

೼Python 2.0੠2.1,Դᑨ䆹䖭ḋ‫خ‬:
Toggle line numbers

1 from types import StringType, UnicodeType


2 if isinstance(obj, StringType) or \
isinstance(obj, UnicodeType) :

ᇍᑣ߫,(ᄫヺІ(strings),߫㸼(lists),‫ܗ‬㒘(tuples)), Փ⫼ぎ߫㸼ᰃfalse䖭Ͼџᅲ,಴ℸ"if not seq"៪"if seq"↨ "if len(seq)"៪"if not len(seq)"


ད.
к‫ݭ‬ᄫヺІ᭛ᄫᯊϡ㽕ձ䌪Ѣ᳝ᛣНⱘৢ㕂ぎḐ. 䖭⾡ৢ㕂ぎḐ೼㾚㾝Ϟᰃϡৃ䕼߿ⱘ,ᑊϨ᳝ѯ㓪䕥఼(⡍߿ᰃ䖥ᴹ,reindent.py) Ӯ
ᇚᅗӀׂᭈᥝ.
ϡ㽕⫼ == ᴹ↨䕗Ꮧᇨൟⱘؐҹ⹂ᅮᰃTrue៪False(ᏗᇨൟᰃPythn 2.3Ёᮄ๲ⱘ)

No: if greeting == True:


Yes: if greeting:
No: if greeting == True:
Yes: if greeting:

-- ZoomQuiet (2005-01-26)

last edited 2005-06-17 02:48:56 by ZoomQuiet

You might also like