ÆÄÀ̽ã´Ù¿î °ü¿ë±¸

¼£¶óºê »þÅͺ£µð(Shalabh Chaturvedi)ÀÇ Àǰ߰ú ³íÆò
ÇÑ±ÛÆÇ johnsonj 2008.04.11


ÀÌ ±ÛÀº http://cafepy.com/article/59/·Î À̻縦 °¬À¸¸ç °Å±â¿¡ °¡¸é ³íÆòµµ °Ô½ÃÇÒ ¼ö ÀÖ´Ù.


ÇÑ ¾ð¾î¿¡¼­ ´Ù¸¥ ¾ð¾î·Î ÀÌÁÖÇϸé, ¹è¿î °ÍµéÁß¿¡ ¾î¶² °ÍµéÀº ÀØÀ» Çʿ䰡 ÀÖ´Ù (¹è¿òÀÇ ÀÌÀü ÂüÁ¶). ÀÌ ±Û¿¡¼­´Â ƯÈ÷ ³»°¡ ÁÁ¾ÆÇÏ´Â ÆÄÀ̽㿡¼­ »ç¿ëµÇ´Â °ü¿ë±¸µéÀ» ´ã¾Ò´Ù. ÆÄÀ̽ã´Ù¿òÀ» Ãß±¸ÇÏ´Â ´Ù¸¥ »ç¶÷µé¿¡°Ôµµ ¾µ¸ð°¡ Àֱ⸦ ¹Ù¶õ´Ù.

1. °è¼ö±â´Â °ÅÀÇ »ç¿ëÇÒ Çʿ䰡 ¾øÀ¸¸ç, °¡²û¾¿ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖÀ» »ÓÀÌ´Ù

À߸ø:

i = 0
while i<10:
     do_something(i)
     i += 1

ÆÄÀ̽ã´Ù¿ò:

for i in xrange(10):
    do_something(i)

À߸ø:

i = 0
while i<len(L):
    do_something(L[i])
    i += 1

ÆÄÀ̽ã´Ù¿ò:

for item in L:
    do_something(item)

¹Ýº¹ÀÚ º¯¼ö´Â ȸµ¹ÀÌ »óŸ¦ µÎ°³ÀÇ '½ÇÇà' »óÅ »çÀÌ¿¡ À¯ÁöÇÏ°í ½ÍÀ» ¶§ À¯¿ëÇÏ´Ù:

itrL = iter(L)

for item in itrL:
    do_something(item)
    if is_some_condition(item):
        break

for item in itrL:    # ¾ÕÀÇ È¸µ¹À̰¡ ³¡³µ´ø °÷¿¡¼­ºÎÅÍ °è¼Ó ½ÇÇàµÈ´Ù
    do_something_else(item)

2. for ȸµ¹ÀÌ´Â Çʿ䰡 ¾øÀ» ¼öµµ ÀÖ´Ù

ÆÄÀ̽ãÀº ¿¬¼Ó¿­ 󸮿¡ ³ôÀº ¼öÁØÀÇ ÆíÀÇÇÔ¼öµéÀ» ¸¹ÀÌ Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î zip(), max(), min(), ¸®½ºÆ® ÅëÇÕ µîµîÀÌ ÀÖ´Ù. µ¥ÀÌÅ͸¦ ÅÍÇðú ¸®½ºÆ® ±×¸®°í »çÀü ¾È¿¡ º¸°üÇϰí, ÆÄÀ̽ã´ä°Ô ´À±ßÇÑ ±âºÐÀ¸·Î Àü Áý´ÜÀ» ó¸®ÇÏÀÚ. ¿¹¸¦ µé¾î, ´ÙÀ½ ÄÚµå´Â CSV ÆÄÀÏÀ» Àо (ù ÁÙÀ» Çʵå À̸§À¸·Î ÇÏ¿©), °¢ ÁÙÀ» »çÀü recordÀ¸·Î º¯È¯Çϰí, ±× Çհ踦 °è»êÇÏ¿© 'quantity'Ä÷³¿¡ ÀúÀåÇÑ´Ù:

lines = open('filename.csv').readlines()
field_names = lines[0].split(',')
records = [dict(zip(field_names, line.split(',')))  for line in lines[1:]]
print sum([int(record['quantity'])  for record in records])

¾à°£ À¯Ä¡ÇÏÁö¸¸ (¾î·µç csv ¸ðµâÀ» »ç¿ëÇß¾î¾ß Çϰí, ±× ¸ðµâÀº ÆÄÀ̽ã Ç¥ÁØ ¶óÀ̺귯¸®¿¡ ÀÖ´Ù), ÀÌ ¿¹Á¦´Â ¸î°¡Áö À¯¿ëÇÑ Æ¯Â¡µéÀ» º¸¿©ÁØ´Ù. zip()À» dict()¿¡ »ç¿ëÇϸé Çʵå À̸§À¸·Î ±¸¼ºµÈ ÇÑ ÅÍÇÃÀ» °ªµé·Î ±¸¼ºµÈ ÇÑ ÅÍÇÿ¡ Á¶ÇÕÇØ¼­ »çÀüÀ» ¸¸µé ¼ö ÀÖ´Ù - ¸®½ºÆ® ÅëÇÕµµ µ¿¿øÇÏ¸é ´Ü Çѹ濡 Àüü ¸®½ºÆ®¿¡ ´ëÇÏ¿© ÀÌ·¸°Ô ÇÒ ¼ö ÀÖ´Ù.

3. ÅÍÇÃÀº Àбâ-Àü¿ë ¸®½ºÆ®°¡ ¾Æ´Ï´Ù

ÅÍÇÃÀº º¸Åë ÀÌÁúÀûÀÎ Áý´ÜÀ» ³ªÅ¸³½´Ù. ¿¹¸¦ µé¾î (first_name, last_name) ¶Ç´Â (ip_address, port)¿Í °°ÀÌ ¸»ÀÌ´Ù. (first_name°ú last_name´Â µÑ ´Ù ¹®ÀÚ¿­À̵íÀÌ), À¯Çü(type)Àº °°À» ¼ö ÀÖÁö¸¸ ½ÇÁ¦ ¼¼°èÀÇ Àǹ̴ º¸Åë ´Ù¸£´Ù. °¡²û¾¿ ³ª´Â ÅÍÇÃÀ» °ü°èÇü µ¥ÀÌÅͺ£À̽º¿¡¼­ÀÇ ÇÑ ÇàÀ¸·Î »ý°¢Çϱ⸦ ÁÁ¾ÆÇÑ´Ù - ½ÇÁ¦·Î °ü°èÇü µ¥ÀÌÅͺ£À̽º¿¡¼­ ÇÑ Ç൵ °ü°èÇü ¸ðµ¨ÀÇ °ø½ÄÀû ±â¼ú¿¡ ÀÇÇÏ¸é ¿ª½Ã ÅÍÇÃÀ̶ó°í ºÒ¸®¿î´Ù! ¹Ý¸é¿¡, À̸§ ¸®½ºÆ®´Â ¾ðÁ¦³ª ¸®½ºÆ®ÀÌ´Ù. ºñ·Ï ƯÁ¤ ÇÔ¼ö°¡ ±× ¸®½ºÆ®¸¦ ¼öÁ¤ÇÏÁö ¾ÊÀ»Áö¶óµµ, ±×·¸´Ù°í ÇÏ´õ¶óµµ ÅÍÇÃÀÌ µÇÁö´Â ¾Ê´Â´Ù.

ÅÍÇà Ǯ±â´Â °ªÀ» ÅÍÇ÷κÎÅÍ ÃßÃâÇÏ´Â À¯¿ëÇÑ Å×Å©´ÐÀÌ´Ù. ¿¹¸¦ µé¾î:

for (ip_address, port) in all_connections:
    if port<2000:
        print 'Connected to %s on %s' % (ip_address, port)

´ÙÀ½ Äڵ带 ÀÐ¾î º¸¸é all_connectionsÀº ¸®½ºÆ®·Î¼­ (Áï ¹Ýº¹°¡´ÉÇÔ) (ip_address, port)ÀÇ ÇüÅ·ΠÅÍÇÃÀÌ ´ã±â¾î ÀÖ´Ù. for item in all_connectionsÀ» »ç¿ëÇϰí item[0]ÀÇ ÇüÅ·Π¾È¿¡¼­ Ç׸ñ(item)À» ²¨³»´Â ·ùÀÇ Å×Å©´Ð¿¡ ºñÇØ À̰ÍÀÌ ÈξÀ ´õ ¸í·áÇÏ´Ù.

ÅÍÇÃÇ®±â´Â ¶ÇÇÑ ÇÑ ÇÔ¼ö¿¡¼­ ¿©·¯ °ªµéÀ» µ¹·ÁÁÙ ¶§µµ À¯¿ëÇÏ´Ù:

name, ext = os.path.splitext(filename)    # ÆÄÀÏ À̸§À» ù ºÎºÐ°ú È®Àå ºÎºÐÀ¸·Î °¡¸¥´Ù

4. Ŭ·¡½º´Â À¯Æ¿¸®Æ¼ ÇÔ¼ö¸¦ ¸ð¾ÆµÎ´Â °÷ÀÌ ¾Æ´Ï´Ù

C#¿Í Java´Â Äڵ带 Ŭ·¡½º ¾È¿¡¸¸ µÑ ¼ö ÀÖÀ¸¸ç, ¸¹Àº À¯Æ¿¸®Æ¼ Ŭ·¡½ºµéÀº °á±¹ Á¤Àû ¸Þ½îµå¸¸ ´ã±â°Ô µÈ´Ù. ÀϹÝÀûÀÎ ¿¹´Â sin() °°Àº ¼öÇÐ ÇÔ¼öÀÌ´Ù. ÆÄÀ̽㿡¼­´Â ±×³É ¸ðµâÀ» ÃÖ»óÀ§ ÇÔ¼ö·Î »ç¿ëÇÏ¸é µÈ´Ù.

5. ¼³Á¤ÀÚ¿Í È¹µæÀÚ¸¦ °ÅºÎÇÏÀÚ

¹°·Ð, ĸ½¶È­(encapsulation)´Â Áß¿äÇÏ´Ù. ±×·¯³ª ȹµæÀÚ(getters)¿Í ¼³Á¤ÀÚ(setters) ¸¸ÀÌ Ä¸½¶È­¸¦ ±¸ÇöÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ¾Æ´Ï´Ù. (GetterEradicatorµµ ÂüÁ¶). ÆÄÀ̽㿡¼­´Â Ư¼ºÀ» »ç¿ëÇÒ ¼ö ÀÖ°í ¸â¹ö º¯¼ö¸¦ ±³Ã¼ÇÒ ¼ö ÀÖÀ¸¸ç È£Ãâ Äڵ带 ¼öÁ¤ÇÏÁö ¾Ê°í¼­µµ ±¸Çö ¸ÞÄ¿´ÏÁòÀ» ¿ÏÀüÈ÷ ¹Ù²Ü ¼ö ÀÖ´Ù.

³ëÃâ ½ÃŲ °ÍÀÌ Áß¿äÇÏ´Ù. (¸Þ½îµå È£ÃâÀ» ÅëÇÒ °ÍÀÎÁö Á÷Á¢ Á¢±ÙÇÒ °ÍÀÎÁö) ³ëÃâ ½ÃŰ´Â ¹æ¹ýÀÌ Áß¿äÇÑ °ÍÀÌ ¾Æ´Ï´Ù.

6. ÇÔ¼ö´Â °´Ã¼ÀÌ´Ù

ÇÔ¼ö´Â È£Ãâ°¡´É °´Ã¼ÀÌ´Ù. ÀÌ´Â ¾Æ·¡ ¿¹Á¦¿¡¼­ º¸µíÀÌ ¸¹Àº »óȲ¿¡¼­ ¾ÆÁÖ Æí¸®ÇÑ Æ¯Â¡ÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â »çÀüÀÇ 'price' Ű °ª¿¡ ±Ù°ÅÇÏ¿© »çÀüÀ¸·Î ±¸¼ºµÈ ¸®½ºÆ®¸¦ Á¤·ÄÇÑ´Ù:

#  a¿Í bÀÇ ºñ±³¸¦ a['price']¿Í b['price']ÀÇ ºñ±³·Î Á¤ÀÇÇÑ´Ù
def cmp_price(a, b):
    return cmp(a['price'], b['price'])

L.sort(cmp_price)   # ÃÖ±Ù¿¡ Á¤ÀÇµÈ ºñ±³ ÇÔ¼ö·Î ¸®½ºÆ®¸¦ Á¤·ÄÇÑ´Ù

Related Links


ÀÌ ±ÛÀÌ ¸¶À½¿¡ µç´Ù¸é, CafePy ±Ûµéµµ Àϵ¶À» ±ÇÇÑ´Ù