오늘의 목차
함수와 내장함수 및 람다에 대해서 작성
함수
함수의 선언과 주석처리는 아래의 구조와 같다
# 인자는 명시적으로 타입을 적어줄 수 있으나 생략가능하다.
# 기본 인자도 지정 가능
# *로 js와 동일하게 나머지 인자도 받아서 사용 가능 (tuple 타입)
# ** 의 경우 tuple 대신 dict 인자를 타입으로 받을 수 있음
def get_function (arg1: int, arg2: str = "인자", *args) -> int:
"""
이 주석은 함수에 관한걸 설명해둡니다.
에디터별 설정에 따라 자동완성 시 뜰 수도 있습니다.
"""
return #기본 리턴은 None을 출력
-
함수의 시작과 끝을 알려주는 대괄호 {} 대신 탭을 기준으로 함수의 끝을 정해준다. 헷갈리기 쉽기에 코드 가독성을 위해 맨 마지막에 명시적으로 return을 작성하는게 좋다.
-
기본적으로 *(asterisk) 기호를 통해 js와 같이 인자들을 한번에 받을 수 있다.(tuple) **를 통해서는 dictionary 형식으로 받을 수 있다.(key=value)
-
매개변수 및 리턴 값에 대해 타입을 지정해둘 수 있다
내장함수
구현된 내장함수는 대부분 js와 동일하고 Cpython를 참조해 내장함수 소스코드를 확인해볼 수 있다. (C언어로 파이썬을 구현한 라이브러리 )
-
map : js와 동일한 기능 함수를 순환하는 함수로 느긋한 연산에 의해 list로 형변환을 해야 계산이 된다.
-
zip : 동일한 인덱스 요소를 튜플 형태로 묶어주는 함수로 2차원 인덱스를 회전하는데 유용하게 사용된다.
scores1 = [ 1 , 2 , 25 , 40]
scores2 = [ 1, 22 , 30 , 45]
scores3 = [ 19, 43 , 21, 5]
for scores in zip(scores1, scores2, scores3):
print(scores)
# (1, 1, 19)
# (2, 22, 43)
# (25, 30, 21)
# (40, 45, 5)
lamda
익명함수를 만드는 규칙으로 기존 js랑은 느낌이 다르게 진행된다. lamda 매개변수 : 표현식
addition = lamda x, y: x+y
result = addition(7, 5)
print(result) # 12
Global Scope
Python 에서는 다른 문법과 마찬가지로 하나의 지역(함수)에 따라 변수들의 접근,수정 권한이 다르게 부여된다. 특히나 바깥의 변수를 수정하려는 경우 이를 global 을 통해 명시해 주어야 한다.
num = 0
def funtion0():
print(num) #0
#만약 참조 이후 global 명시가 있다면 에러가 발생한다
def funtion1():
global num
num += 10
print(num) #10
print(num) #10
한줄 평
- 파이썬 문법 좋다