오늘의 목차

함수와 내장함수 및 람다에 대해서 작성

함수

함수의 선언과 주석처리는 아래의 구조와 같다

# 인자는 명시적으로 타입을 적어줄 수 있으나 생략가능하다.
 # 기본 인자도 지정 가능
 # *로 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 

한줄 평

  • 파이썬 문법 좋다