욤미의 개발일지
[DAY 2] Python: Lecture 4 - Lecture 6 본문
728x90
반응형
[Lecture 4] Contition & Loop
조건문
- 특정 조건이 만족될 경우 문장을 실행
- 들여쓰기와 :으로 구분한다.
- 들여쓰기의 convention은 스페이스 4칸(tab)
- if 조건 : 조건을 검사하여 블록 실행
- elif 조건 : 이전 조건과 맞지 않을 경우 조건을 다시 검사하고 실행
- else 조건 : 모든 조건이 맞지 않을 경우 실행
- “”, 0, None은 False와 동일하게 취급
삼항 연산자
value1 if condition else value2
- condition이 참이면 value1
- condition이 거짓이면 value2
- 연산자이기 때문에 블록으로 구분되는 문법요소가 아니다.
반복문
for Element in Iterable
- 주어진 객체(집합)을 순환 - 딕셔너리, 문자열 등
- 조건을 만족하는 동안 반복해서 구문을 수행
- range(start, end, step) 내장함수로 숫자 반복 생성 가능(Generator 반환)
- end는 미포함
break
: 가장 바깥의 반복문을 나가는 것이 가능continue
: 가장 바깥의 반복문의 처음으로 되돌아가기 기능
for-else : 반복문을 완전히 돌았을 경우 실행되는 블록 지정 가능하며 break로 중간에 나오게 되면 else문 실행X
[Lecture 5] Function
함수
- 명령을 수행하는 일종의 기능 단위
- 코드를 논리적으로 분리, 캡슐화
- 필요한 경우 반복적으로 호출 가능
- Return 명령어가 없으면
None
반환 - 인자로 받은 값을 바로 수정하는 것은 권장하지 않음
def func(seq):
seq = list(seq) # 복사
seq += [1] # 원래 값을 수정하지 X
variable scope
- 상위에 정의된 변수는 언제나 참조 가능
- 함수내에 정의된 변수 이름은 그 함수 내에서만 유효
var1, var2 = 10, 20
def func(var2): # var2를 함수 내에서 재정의
var2 += 1 # 위에 있는 var2와 다름
print(var1 + var2) # 상위 변수 var1 읽기 가능
- Global
- 최상위에서 선언
- 다른 파일에서 접근 가능
- Local
- 함수 안에 선언
- 상위 함수에서는 접근 불가
상위 변수 사용 선언
- 함수 맨 앞에 선언
- global: 최상위 변수
- nonlocal: 직상위 변수 사용 선언
- 스파게티 코드의 주원인이므로 사용하지 않는 것을 권장함
Variable Capture
var = 1
def func():
print(var)
var += 1
func()
- 상위 값이 바뀌면 하위 값이 바뀜
- 순수함수가 아님
- 순수 함수: 인자 값이 같다면 반환 값도 같음
- 환경을 포함하지 않기 때문에 closure라 볼 수 없음
스파게티 코드 주원인
- 상위 객체엔 가능하면 접근하지 않기
- 모두 파라미터로 받기
- 최상위 선언도 가급적 지양
Closure 함수
Decorator
- 함수 하나를 인자로 받아 같은 형태의 함수를 반환하는 함수
- @를 사용해서 함수를 꾸미는데 사용 가능
- 함수를 wrapping하기 때문에 기존 함수에 접근 불가능
- docstring, 함수 이름 등 기존 함수의 특성을 가져와햐하기 때문에 from functools import wraps 를 사용한다.
재귀함수
- 자기자신을 호출하여 반복적으로 수행
- 수학 점화식과 동일
- 반복문과 수학적으로 동치
함수 파라미터
- 인자를 명시적으로 대입 가능
func(var1 = 10, var2 = 20)
- 인자 기본값을 설정 가능
def func(var1, var2 = 20)
- 기본값이 설정된 인자는 맨 뒤에 붙여서 써야한다.
def func(var1 = 10, var2)
→ 에러 발생
Variable Length Parameter
- 인자 개수가 정해져 있지 않다면 *(Asterisk)를 사용해서 남은 인자 packing가능
- 가변인자는 맨 만지막에 단 한개만 위치 가능
def func(a, b, *args)
Keyword Variable Length Parameter
- 명시적으로 지정된 파라미터가 남는다면 키워드 가변인자 ** (Double asterisk)를 사용하여 남는 키워드 변수를 packing
def func(a, b, *args, **kwargs)
- 딕셔너리 형태로 반환
파라미터 순서: 일반 인자 → 기본값 → 인자 → 가변인자 → 키워드 가변 인자
Parameter Unpacking
- Sequence(리스트, 튜플)에 *을 붙이면 unpacking 가능
- Dictionary에 **를 붙이면 keyword unpacking
Type Hint
- 파이썬은 동적 타이핑 → interface를 알기 어려움, 가독성이 떨어짐
- 함수에 파라미터와 반환 값 타입 힌트 제공 가능
function(var: type) -> str
- 타입을 안 맞춰서 에러는 안 남
[Lecture 6] Pythonic Programming
Comprehension
- list, dictionary 등을 빠르게 만드는 기법
- for + append보다 속도가 빠르다
result = []
for i in range(10):
result.append(i*2)
result = [i*2 for i in range(10)]
result = {}
for i in range(10):
result[str(i)] = i
result = {str(i):i for i in range(10)}
result = set()
for i in range(10):
result.add(str(i))
result = {str(i) for i in range(10)}
- if문으로 원하는 요소만 추가 가능
result = [i*2 for i in range(10) if i%2 == 0]
- 이중 for문 사용 가능
result = [(i, j) for i in range(10) for j in range(i)]
'''
[(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), (4, 2), (4, 3), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (8, 0), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (9, 0), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8)]
'''
- 다차원 배열 만들기
result = [[int(i == j) for j in range(10)] for i in range(5)]
'''
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]]
'''
Generator
range함수의 경우 숫자를 한씩 생성하여 반환
- 이러한 요소를 하나씩 생성해서 반환하는 객체를 Generator라고 함
- function에 yield를 사용할 시 generator가 됨
- 다시 값을 요청 받으면 yield 다음 줄부터 실행
- return되면 반복을 멈춤(stopiteration error 발생)
- sequence 전체를 생성하는 것이 아니므로 메모리 효율적(큰 데이터 셋 처리에는 generator 사용 권장)
def my_range(stop):
number = 0
while number < stop:
yield number
number += 1
for i in my_range(5):
print(i)
'''
0
1
2
3
4
'''
- 괄호로 generator comprehension 형태로 선언 가능
even_generator = (i*2 for i in range(10))
Built-in Functions
sum(iterable)
: 합all(iterable)
: 모두 True이면 True 반환any(iterable)
: 하나라도 True이면 True 반환max(iterable)
: 최댓값min(iterable)
: 최솟값
zip
- 2개 이상의 순호나 가능한 객체를 앞에서 부터 한번에 접근
- 길이가 안 맞을 경우 남는 건 버림
for val1, val2, val3 for zip(seq1, seq2, seq3):
print(val1, val2, val3)
- unpacking으로 2차원 리스트의 열 단위 접근 역시 가능
for row in arr:
print(row) # 행 단위 접근
for col in zip(*arr):
print(col) # 열 단위 접근
seq2 = zip(*seq1)의 역 연산은 seq1 = zip(*seq2) 이다.
enumerate
- for문이 sequence를 돌 때 그 index가 필요할 때 사용
for idx, word in enumerate(seq):
print(idx, word)
- enumerate와 zip 동시에 사용 가능
- generator는 list 형태로 출력하기 위해서는 list()로 변환 필요
list(enumerate(['this', 'is', 'sentence']))
# [(0, 'this'), (1, 'is'), (2, 'sentence')]
lambda 익명함수
- 함수의 이름 없이 빠르게 만들어 쓸 수 있는 익명 함수
- 여러 줄을 쓸 수 없음
- 공식적으로는 lambda 사용을 권장하지 X
map(function, iterable)
: 각 요소에 function 함수를 적용하여 반환
filter(function, iterable)
: 각 요소에 function 함수를 적용하여 참이 나오는 것만 반환
728x90
반응형
'NLP > STUDY' 카테고리의 다른 글
[DAY 4] Python: Lecture 10. String (0) | 2022.11.02 |
---|---|
[DAY 4] Python: Lecture 9. Advanced Data Structure (0) | 2022.10.21 |
[DAY 3] Python: Lecture 8. Module & Package (0) | 2022.10.18 |
[DAY 3] Python: Lecture 7. Object-Oriented Programming (1) | 2022.10.18 |
[DAY 1] Python: Lecture 0 - Lecture 3 (0) | 2022.10.13 |
Comments