Skip to content
daclouds edited this page Jul 8, 2013 · 7 revisions

if

if suffix == ".htm":
  content = "text/html"
elif suffix == ".jpg":
  content = "image/jpeg"
else:
  raise RuntimeError("Unknown content type")

김대근 comments:

그리고 if 문을 쓰면서 주의해야할 것은

x = ...
if x:
# blah blah

가 의미하는 바를 알아야할 것 같네요. ㅋㅋ

x is not None 으로 생각하고 썼다면 문제가 생기는 코드네요.

0, 0.0, (), [], {}, '', x.__len__() == 0 인 것 등등도 저 if x: 를 만족하지 못하네요. 쓰실 때 참고하세요.

while

f = open("foo.txt")
line = f.readline()
while line:
  print line,
  line = f.readline()
...
f.close

for

for line in open("foo.txt")
  print line,

itertools

python docs

Quiz

1. comma 추가하기

예)  
     입력 1000000
     출력 1,000,000
>>> a = "1000000"
>>> b = a[::-1]
>>>
>>> for i in range(len(b)):
...   if (i % 3 == 0 and i != 0): result += "," + b[i]
...   else: result += b[i]
...
>>> result
'000,000,1'
>>> result[::-1]
'1,000,000'

2. Look and say sequence

wikipedia

1
1 1
1 2
1 1 2 1
1 2 2 1 1 1
1 1 2 2 1 3
1 2 2 2 1 1 3 1
1 1 2 3 1 2 3 1 1 1
1 2 2 1 3 1 1 1 2 1 3 1 1 3
1 1 2 2 1 1 3 1 1 3 2 1 1 1 3 1 1 2 3 1
>>> import itertools
>>> seq = [1]
>>> for i in range(10):
...     print ' '.join(map(str, seq))
...     seq2 = []
...     for key, subgroup in itertools.groupby(seq):
...         seq2 += [key, len(list(subgroup))]
...     seq = seq2
...

ask.python.kr ( falsetru )

기타

김대근 comments:

오늘 실습하면서 is 라는 키워드가 많이 보였는데, 왠지 기분상으로 뭔가 애매한 느낌이 남아서 알아봤습니다. 일단은 사용할 때는 주의가 필요해 보입니다. 일단 "is" 동일한지를 검사하는거고 "==" 동등한 값인지를 검사하는 기능으로 보입니다.

또 중요한게 아래 처럼되네요. 257부터는 is 하면 True를 뱉지 않네요.

x = 1
(x is 1) is True
x = 100
(x is 100) is True
x = 256
(x is 256) is True
x = 257
(x is 257) is False

근데 pypy에서는 257넘어가더라도 동일하게 True를 뱉습니다. is None 이나 is not None 이나 singleton 객체 검사할 때 쓰면 되는 듯 보입니다. ㅋ

그리고 성능의 이점을 얻기는 힘들겠지만 ==is 보다는 느립니다. is는 동일한지를 검사하는거라 빠르고 ==__eq__ 매직메서드를 쓰면서 여러번 뭔가를 더 합니다.

x == y 는 결국 x.__eq__(y) and y.__eq__(x) 를 만족해야 하나 봅니다.

윤인성 comments:

인터넷을 보니 is 키워드를 사용하면 자료형 비교 또는 메모리 위치까지 검사한다고 하네요 'ㅁ'

256으로 차이가 나는 것은 256이하의 숫자와 이후의 숫자를 어떤 자료형으로 먹이는지가 컴파일러나 인터프리터에 따라서 다른 것 같군요...OTL....

또한 메모리 위치까지 검사해서

a = "a"
b = "a"
print(a is b)
print(a == b)

a = a * 100
b = b * 100
print(a is b)
print(a == b)

이 코드에서 아래의 isFalse가 뜨는군요 'ㅁ'

Clone this wiki locally