2011-08-16 46 views
1

[ちょうどあざけり任意のテストコードを除く組み込み]組み込み関数をシャドウする変数名を使用するPython標準ライブラリにはPythonコードがありますか?

多くの組み込みコマンドは、複数の発生がある場合、私はモジュールまたは作成されたいくつかのコードを示すの答えを受け入れるだろう、時間をかけて追加されていることを考えるとの後にが存在します。

尋ねるための私の根拠はPythonのメーリングリストでquestionを掲示した後、回答の一部が影の組み込みコマンドが時に他の名前を変数名を使用してその は完全に合理的だと思うPythonコミュニティのメンバーがあることが示されたということですまったく同じように動作します。

私は、このプラクティスがさまざまなPython開発者の間でどのくらい一般的であるかという基準として、標準ライブラリを使用したいと考えています。

+0

[pylint](http://www.logilab.org/857)はこのようなことを検出します(W0622)。あなたの最善の策はPythonの標準ライブラリに対して(他のすべての規則を無効にして)実行することです。 – nmichaels

+0

関数内に 'str'、' list'などの変数名を付けることには問題ありません。あなたがしたことを覚えていてください。 – JBernardo

+1

@JBernardo。問題は、読みにくく、他の人が維持するのが難しく、追跡が困難なエラーにつながる可能性があるということです。 – Gerrat

答えて

5

私が最もよく使う陰影は、変数名として非常に便利であり、組み込み関数はめったに呼び出されないため、idです。 2.7標準ライブラリで簡単に見ては、使用回数上がっ:

aifc.py:   if id == marker[0]: 
aifc.py:    id = _read_short(chunk) 
aifc.py:   if id == self._markers[i][0]: 
aifc.py:   if id == marker[0]: 
difflib.py:   id = ' id="%s%s"' % (self._prefix[side],linenum) 
difflib.py:   id = '' 
nntplib.py:  id = '' 
nntplib.py:    id = words[2] 
nntplib.py:  resp, nr, id = self.statparse(resp) 
pdb.py:   id = idstring[0].strip() 
pdb.py:   id = idstring[1].strip() 
pdb.py:  if id == '': return failed 
platform.py:    id = values[2] 
platform.py: id = '' 
platform.py:   id = l[1] 
platform.py:  id = _id 

strlist、ともintの用途がたくさんあります。

Cookie.py: str = str[1:-1] 
mailcap.py:  str = os.environ['MAILCAPS'] 
mimetools.py:  str = self.typeheader 
mimetools.py:   str = 'text/plain' 
mimetools.py:   str = str[:i] 
mimetools.py:  str = self.plisttext 
mimetools.py:   str = str[1:] 
mimetools.py:   str = str[end:] 
rfc822.py: str = m.getheader(name) 
rfc822.py: str = m.getrawheader(name) 
smtplib.py:   str = "" 
smtplib.py:   str = '%s%s' % (cmd, CRLF) 
smtplib.py:   str = '%s %s%s' % (cmd, args, CRLF) 
sre_parse.py: pattern.str = str 
xmllib.py:   str = res.group(1) 
xmllib.py:     str = chr(int(str[2:], 16)) 
xmllib.py:     str = chr(int(str[1:])) 
xmllib.py:     str = self.entitydefs[str] 
xmllib.py:     str = '&' + str + ';' 

uuid.py:   int = long(hex, 16) 
uuid.py:   int = long(('%02x'*16) % tuple(map(ord, bytes)), 16) 
uuid.py:   int = ((time_low << 96L) | (time_mid << 80L) | 

SimpleHTTPServer.py:   list = os.listdir(path) 
StringIO.py:list = f.readlines()# list of f.readline() results until EOF 
StringIO.py: list = f.readlines() 
anydbm.py:  list = d.keys() # return a list of all existing keys (slow!) 
asynchat.py:   self.list = deque() 
asynchat.py:   self.list = deque(list) 
bdb.py:  list = self.breaks[filename] 
cgi.py: list = None 
cgi.py: list = traceback.format_tb(tb, limit) + \ 
code.py:  list = traceback.format_exception_only(type, value) 
code.py:   list = traceback.format_list(tblist) 
dircache.py:  cached_mtime, list = cache[path] 
dircache.py:  cached_mtime, list = -1, [] 
dircache.py:  list = os.listdir(path) 
mailbox.py:  # list = map(long, filter(pat.match, os.listdir(self.dirname))) 
mailbox.py:  list = os.listdir(self.dirname) 
mailbox.py:  list = filter(pat.match, list) 
mailbox.py:  list = map(long, list) 
mhlib.py:list = mh.listfolders() # names of top-level folders 
mhlib.py:list = mh.listallfolders() # names of all folders, including subfolders 
mhlib.py:list = mh.listsubfolders(name) # direct subfolders of given folder 
mhlib.py:list = mh.listallsubfolders(name) # all subfolders of given folder 
mhlib.py:list = f.listmessages() # list of messages in folder (as numbers) 
mhlib.py:list = f.parsesequence(seq)  # parse msgs syntax into list of messages 
mhlib.py:   list = [] 
mhlib.py:  list = map(int, stuff.split()) 
multifile.py:  list = [] 
nntplib.py:   list = [] 
nntplib.py:  resp, list = self.longcmd('LIST', file) 
nntplib.py:  resp, list = self.longcmd(line, file) 
pickle.py:  list = stack[-1] 
pickle.py:  list = stack[mark - 1] 
pipes.py: list = [] 
poplib.py:  list = []; octets = 0 
pstats.py:  width, list = self.get_print_list(amount) 
pstats.py:  width, list = self.get_print_list(amount) 
pstats.py:  width, list = self.get_print_list(amount) 
rexec.py:  list = [] 
rfc822.py: list = m.getaddrlist(name) 
shelve.py:  list = d.keys() # a list of all existing keys (slow!) 
socket.py:  list = [] 
telnetlib.py:  list = list[:] 
traceback.py: list = [] 
traceback.py: list = [] 
traceback.py:  list = ['Traceback (most recent call last):\n'] 
traceback.py:  list = list + format_tb(tb, limit) 
traceback.py:  list = [] 
traceback.py: list = list + format_exception_only(etype, value) 
traceback.py: list = [] 
xdrlib.py:  list = [] 
xdrlib.py:  list = [] 

はとfileあまりにも多いと、 dir投稿するには...

+0

'webbrowser'、' gzip'、 'imaplib'などのモジュールレベルとクラスレベルで適切にシャドーされた' open'を追加します。 –

+0

@Ned。これらの例を投稿していただきありがとうございます。私はショックを受けています。 std libの例の膨大な数から、私はこのタイプのものは実際にぶち壊されていないと仮定しなければなりません。これに私の視点を調整する時間。 – Gerrat

+1

これをあまり読みすぎてはいけません。可能であればシャドーイングを避けるあなたの本能は良いものです。標準ライブラリのコードは長年にわたって多くの人々によって寄贈されており、組み込み関数のリストは長年にわたり拡張されています。上記のいくつかの例は、ほとんどメンテナンスを見せていない古い成熟したモジュールからのものであり、それらを変更するコストがあります。チャンスは、引用されたシャドーイングの例の大部分が、コードレビューのコメントにpingされずに今日stdlibに入ることはないということです。 –

0
  • プラットフォームモジュールには変数名としてidがいくつか使用されています。
  • 多くの他のモジュールでは、変数名としてidが使用されています。
  • pickleは変数名としてlenを使用しています。
  • uuidは、変数名としてhexを使用しています。
  • dom.xmlbuilderには変数名としてfilterが使用されています。
  • など

助けることができ、スペースの間に内蔵された名前のディレクトリ検索。

関連する問題