01 call by object reference
- 함수에서 parameter를 전달하는 방식
- 값에 의한 호출 call by value
- 함수에 인자를 넘길 때 값이 복사되어 함수로 전달되는 방식
- → 함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음
def swap_value(x, y): temp = x # 값이 복사되어 함수로 전달됨 -> 호출자에게 영향을 주지 않음 x = y y = temp x = 4 y = 5 swap_value(x, y) print(x, y) # 4 5
- 참조에 의한 호출 call by reference
- 함수에 인자를 넘길 때 메모리 주소가 함수로 전달되는 방식
- → 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨
- 객체 참조에 의한 호출 call by object reference
- 파이썬의 함수에서 parameter을 전달하는 방식
- 함수에 인자를 넘길 때 객체의 주소가 함수로 전달되는 방식
- → 전달된 객체를 참조하여 변경이 이루어지는 경우 호출자에게 영향을 주지만, 새로운 객체를 생성하는 경우 호출자는 영향을 받지 않음
def spam(eggs): eggs.append(1) # 전달된 객체(eggs)를 참조한 변경이 이루어짐 -> 호출자에게 영향을 줌 eggs = [2, 3] # 새로운 객체를 생성 -> 호출자에게 영향을 주지 않음 ham = [0] spam(ham) print(ham) # [0, 1]
- 값에 의한 호출 call by value
02 Scoping Rule
- 변수가 사용되는 범위에 따른 변수의 구분
- 지역변수 (local variable): 함수 내에서만 사용
- 전역변수 (global variable): 프로그램 전체에서 사용
def f_1(): s = "I love spring" # s: 지역변수 print(s) def f_2(): global s # global을 통해 전역변수 s를 함수 내에서 사용 s = "I love spring" print(s) s = "I love summer" # s: 전역변수 f_1() # I love spring print(s) # I love summer f_2() # I love spring print(s) # I love spring
- 전역변수는 global 키워드를 사용하여 함수 내에서 사용할 수 있음
- 하지만, 함수 내에서 전역 변수와 같은 이름의 변수를 선언하면 그 변수는 새로운 지역 변수가 됨
03 Recursive Functions
- 재귀함수 (recursive function)
- 자기 자신을 호출하는 함수
- 점화식 등의 재귀적 수학 모형을 표현할 때 사용
- 재귀 종료 조건을 설정하여 종료 조건까지 함수가 반복적으로 호출되게 함
04 Function Type Hints
- 파이썬의 가장 큰 특징은 dynamic typed lauguage라는 점인데, 함수를 처음 사용하는 사용자는 이러한 특징으로 인하여 함수의 interface를 알기 어렵다는 단점을 가진다
- → 이에 따라 python 3.5 버전 이후로는 PEP 484에 기반하여 type hints 기능을 제공하고 있다
- type hints
- 코드 작성 시에 변수의 데이터 타입을 알려주는 것
def function_name(var_name: var_type) -> return_type: pass # var_type: parameter의 data type을 알려줌 # return_type: 반환값의 data type을 알려줌
- type hints의 장점
- 사용자에게 인터페이스를 명확하게 알려줄 수 있다
- 함수를 문서화할 때 parameter에 대한 정보를 명확하게 알 수 있다
- mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인할 수 있다
- 시스템의 전체적인 안정성을 확보할 수 있다
05 Docstring
- docstring
- 함수, 모듈, 클래스 또는 메소드 정의의 첫 번째 명령문으로 발생하는 문자열
- 함수, 모듈, 클래스 또는 메소드에 대한 상세한 정보를 제공함으로써 함수 사용자의 이행도를 높임
- docstring의 기본 형태
def calculate_rectangle_area(x, y):
"""_summary_ # 함수의 기능
Args: # 인자
x (_type_): _description_
y (_type_): _description_
Returns: # 반환값
_type_: _description_
"""
return x * y
- cf. vscode의 autoDocstring - Python Docstring Generator을 사용하면 더욱 편리하게 docstring을 작성할 수 있다 !
06 함수 개발 가이드라인
- 함수 작성 가이드라인
- 함수는 가능하면 짧게 작성할 것
- 함수 이름에 함수의 역할 및 의도를 명시할 것
- V(동사)_O(목적어) 형태로 작성
- ex. print_hello
- 하나의 함수에는 유사한 역할을 하는 코드만 포함
- 인자로 받은 값 자체를 바꾸지 말 것
- 인자로 받은 값을 활용하고자 할 때에는 값을 복사하여 새로운 변수에 할당하여 사용
- 함수는 언제 만드는가?
- 반복되어 사용되는 코드는 함수로 변환하여 사용
- 복잡한 수식 및 조건은 식별 가능한 이름의 함수로 변환하여 사용
07 How to write Good Code
- 코딩 컨벤션
- 명확한 규칙은 없기 때문에 팀 및 프로젝트마다 다른 컨벤션을 사용하기도 함
- 어떤 컨벤션을 사용하든 ‘일관성’을 지키는 것이 가장 중요
- 코딩 컨벤션의 예시
- 들여쓰기는 공백 4칸으로 사용
- 한 줄에 최대 79자까지 작성
- 불필요한 공백은 피할 것
- 코드의 마지막에는 항상 한 줄의 빈 줄을 추가할 것
- 소문자 l, 대문자 O, 대문자 I 사용 금지
- 코딩 컨벤션 체크 및 수정 모듈
- flake8: 코딩 컨벤션 체크
- black: 파이썬 코딩 컨벤션의 기준으로 여겨지는 PEP8에 거의 부합하게 코드를 수정
'AI Basic > Python' 카테고리의 다른 글
[Python] 06 Pythonic Code (0) | 2023.03.07 |
---|---|
[Python] 05 Python Data Structure (0) | 2023.03.07 |
[Python] 03 Conditions and Loops (0) | 2023.03.07 |
[Python] 02 Functions & Console IO (0) | 2023.03.06 |
[Python] 01 Variables and Data Type (0) | 2023.03.06 |
댓글