파이썬 문법 사전 - if, for, 함수

파이썬 문법 사전 - if, for, 함수

if문


if 후에 여러개의 elif가 있을 수 있고 else는 선택적으로 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
... x = 0
... print('Negative changed to zero')
... elif x == 0:
... print('Zero')
... elif x == 1:
... print('Single')
... else:
... print('More')
...
More

for문


파이썬에서 for문은 임의의 시퀀스(리스트나 문자열)의 항목들을 순서대로 이터레이션 할 수 있다.

1
2
3
4
5
6
7
8
>>> # Measure some strings:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
... print(w, len(w))
...
cat 3
window 6
defenestrate 12

시퀀스를 이터레이트 하는 동안 시퀀스를 수정하는 것은 원래의 의도대로 동작하지 않을 수도 있다.
이 경우 보통 복사본을 만드는 방법을 사용한다.

1
2
3
4
5
6
7
8
9
10
# Strategy:  Iterate over a copy
for user, status in users.copy().items():
if status == 'inactive':
del users[user]

# Strategy: Create a new collection
active_users = {}
for user, status in users.items():
if status == 'active':
active_users[user] = status

range() 함수


숫자들의 시퀀스로 이터레이트 해야 할 때 range()를 사용하면 편리하다. range()는 수열을 만든다.

1
2
3
4
5
6
7
8
9
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb

주의해야 할 점은 range()는 리스트 처럼 동작하지만 리스트가 아니라는 점이다.

1
2
>>> print(range(10))
range(0, 10)

이처럼 리스트를 출력하지 않는다.
이터레이트할 때 원하는 시퀀스 항목들을 순서대로 돌려주는 객체이지만, 실제로 리스트를 만들지 않아서 공간을 절약한다.

1
2
3
4
>>> sum(range(4))  # 0 + 1 + 2 + 3
6
>>> list(range(4))
[0, 1, 2, 3]

이런것도 가능하다.


break, continue, for-else문


break문은 가장 가까이 둘러싸는 반복문을 빠져나가게 만든다.

특이하게 파이썬에서 루프문은 else를 가질 수 있다.
루프가 이터러블 소진이나 조건이 거짓이 돼서 종료할 때 실행된다. 단, 루프가 break문으로 종료될 때는 실행되지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

continue는 루프의 다음 이터레이션에서 계속 실행하도록 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> for num in range(2, 10):
... if num % 2 == 0:
... print("Found an even number", num)
... continue
... print("Found a number", num)
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9

pass문


아무것도 하지 않는다.
문법적으로 문장이 필요하지만 특별히 할 일이 없을 때 사용한다.
ex) 최소한의 클래스를 만들 때

함수 정의


def를 이용해서 함수를 정의한다.
함수 이름과 괄호로 싸인 매개변수들의 목록이 뒤따른다.
함수 내부 문장들은 반드시 들여쓰기 해야 한다.
“””독스트링””” 은 함수 바디의 첫번째 문장으로 사용해 함수에 대한 설명으로 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
>>> def fib(n):    # write Fibonacci series up to n
... """Print a Fibonacci series up to n."""
... a, b = 0, 1
... while a < n:
... print(a, end=' ')
... a, b = b, a+b
... print()
...
>>> # Now call the function we just defined:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

기본 인자 값

하나 이상의 인자들에 기본값을 지정하여 정의된 것보다 더 적은 개수의 인자들로 호출될 수 있는 함수를 만든다.

1
2
3
4
5
6
7
8
9
10
11
def ask_ok(prompt, retries=4, reminder='Please try again!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise ValueError('invalid user response')
print(reminder)

Reference
python.org

이 게시물은 파이썬 문법을 까먹었을 때 검색하려고 작성됨.