
すべての人に良い一日を! 年末年始は遅れており、みんな休んでいた。 それにもかかわらず、休日でも仕事が現れることがあります。 たとえば、Pythonで他の誰かのコードを掘り下げる機会がありました。 コードは優れており、十分に文書化されていますが、読書中、著者がPythonでドックを読んでCのような言語からコードを移植しているという感覚は消えませんでした。 これにより、Cに似た言語からPythonに切り替えるときに必然的に発生するエラーを示す記事を書くことになりました。
この記事は、最近この言語で書いている人や、詳細を気にせずに小さなスクリプトを書いている人に役立ちます。
リストを反復処理する
for i in range(len(a)):
print " %d %s" % (i, a[i])
, : , a. xrange, . , enumerate.
for i, item in enumerate(a):
print " %d %s" % (i, item)
enumerate(a) , (<>, <>). .
, . . , , , bool(a). : , bool(a) True, list(a) .
«» : , , , JS (myobject.myelement), :
class mydict(dict):
def __getattr__(self, key):
return self[key]
def __setattr__(self, key, value)
self[key] = value
.
a = mydict(no = "way", bad = "code")
print a.no
! :
a.update({1:"one", 2:"two"})
a.1
, , , , , :
def __getattr__(self, key):
try:
return self.key
except:
return self[key]
, , : self.key self.__getattr__(key).
, .
.
.
def formatName(name):
if len(name)<40:
if " " in name:
if name[0]!="?":
return name.split(" ")
return False
def formatName(name):
if len(name)>=40:
return False
if " " not in name:
return False
if name[0]=="?"
return False
return name.split(" ")
, :
— . , .
— . .
a=range(10);
for item in a:
if item<5:
a.remove(item)
print a
? , . , . , :
i=0
while i<len(a):
if i<5:
del a[i]
else:
i += 1
filter(func, a). , func(item) .
filter(lambda x:x>=5, a)
[i for i in a if i>=5]
print a
. c lambda-.
Python . : , .