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ḌᖗথᏗЁⱘҷⷕᖙ乏ྟ㒜Փ⫼ASCIILatin-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\&ODVVIRREDU<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) (៥㾝ᕫি"⊼䆄"ད)
བᵰԴ㽕ᇚRCSCVSⱘᴖ乍(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)Ўऩᄫヺⱘব䞣ৡ. ᶤѯᄫԧЁ,䖭ѯᄫヺϡ
㛑Ϣ᭄ᄫ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ᓖᐌৡ.
ܼሔব䞣ৡ
(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, strunicode᳝݀݅ⱘ㉏,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.02.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) Ӯ
ᇚᅗӀׂᭈᥝ.
ϡ㽕⫼ == ᴹ↨䕗Ꮧᇨൟⱘؐҹ⹂ᅮᰃTrueFalse(Ꮧᇨൟᰃ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