Pythonの方法 エラー処理


すべての人に良い一日を! 年末年始は遅れており、みんな休んでいた。 それにもかかわらず、休日でも仕事が現れることがあります。 たとえば、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
#  "way"


! :

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 
#  [1, 3, 5, 6, 7, 8, 9]


? , . , . , :

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)
#  [6, 7, 8, 9]
[i for i in a if i>=5]
#  [6, 7, 8, 9],    .
print a
#  a  

. c lambda-.
Python . : , .


Source: https://habr.com/ru/post/J111588/


All Articles