매일공부

[AI 기초 다지기] 파이썬 advanced function 본문

Programming/Python

[AI 기초 다지기] 파이썬 advanced function

aram 2022. 7. 29. 20:43

- 함수 호출 방식

  • Call by Value 값에 의한 호출
    • 기본 데이터 타입의 값이 전달될 때
    • 함수에 인자를 넘길 때 "값만 넘김"
    • 함수 내 인자 값 변경 시, 호출자에게 영향x
def f(x): ~~
a = 5
f(a) > a값이 복사되어 x에 들어감

def f(x): x = 7 ~~
a = 5
f(a) > x값이 7로 바뀌어도 a값에는 변화x
  • Call by Reference 참조에 의한 호출
    • 집합 데이터 타입인 경우
    • 함수에 인자를 넘길 때 "메모리 주소"를 넘김
    • 함수 내 인자 값 변경 시, 호출자의 값도 변경
  • Call by Object Reference 객체 참조에 의한 호출
    • 파이썬 함수 호출 방식 > 객체의 주소(위치)가 함수로 전달
    • 전달된 객체를 참조하여 변경시 호출자에게 영향o
      but, 새로운 객체를 만들 경우 호출자 영향x

<출처> 인공지능(AI) 기초 다지기 / 부스트코스

 

- 교환 swap

  • 함수를 통해 변수 간의 값을 교환하는 함수
def swap_value (x, y):
    temp = x
    x = y
    y = temp
def swap_offset (offset_x, offset_y):
    temp = a[offset_x]
    a[offset_x] = a[offset_y]
    a[offset_y] = temp
def swap_reference (list, offset_x, offset_y):
    # temp_list = list_a[:]
    temp = list[offset_x] 
    list[offset_x] = list[offset_y]
    list[offset_y] = temp
변경x a 리스트의 전역 변수 값을 직접 변경 a 리스트의 객체 주소 값을 받아 값 변경
> 리스트 값을 직접적으로 변경하는 것은 위험
> 호출된 값 변경 위험 UP
> #처럼 복사하는 과정이 있으면 좋음
a = [1,2,3,4,5] 
swap_value(a[1], a[2]) 
print (a) #[1,2,3,4,5] 

swap_offset(1,2) 
print (a) #[1,3,2,4,5] 

swap_reference(a, 1, 2) 
print (a) #[1,2,3,4,5]

 

- 변수의 범위 Scoping Rule >> 스코핑 룰(scoping rule)

  • 변수가 사용되는 범위(함수 or 메인 프로그램)
  • 지역변수 local variable : 함수 내에서만 사용
  • 전역변수 global variable : 프로그램 전체에서 사용
  • 이름 검색 규칙(LGB 규칙)
     : 변수가 호출 및 실행되는 우선순위
     : Local(지역) > Global(전역) > Built-in(내장) 
     : 함수 호출 시 LGB 규 이루어짐
     : 네임스페이스(namespace, 이름공간)의 영역과 LGB 규칙은 역순
def test(t):
	print(x) #이 x값은 변화가 없음
	t = 20 #지역변수
	print ("In Function :", t)
x = 10
test(x) 
print(t) #전역변수 > 위 t는 지역변수이기 때문에 밖의 t(전역변수)는 정의x
  • 함수 내에 전역변수와 같은 이름의 새로운 지역변수 생성 가능
def f():
    s = 'I love London!' #지역변수
    print(s)
s = 'I love Paris!' #전역변수
f()
print(s)
#I love London!
#I love Paris!  > 서로 다른 변수이기에 다르게 나옴
  • 함수 내에서 전역변수 사용 시, global 키워드 사용
def g():
    global s 
    s = "I love London!"
    print(s)
s = "I love Paris!"
g() 
print(s)
#I love London! 
#I love London! > 전역변수로 s를 선언했기에 값 변경

 

- 재귀함수 recursive Function

  • 자기자신을 호출하는 함수
  • 점화식과 같은 재귀적 수학 모형을 표현할 때 사용(팩토리얼 계산 등)
  • 재귀 종료 조건 존재, 종료 조건까지 함수 호출 반복
# n == 1이 아닐때 까지 자신의 함수를 계속 호출
def factorial(n):
	if n == 1:
		return 1 
    else:
    	return n + factorial(n-1) 
print (factorial(int(input("Input Number for Factorial Calculation: "))))
#5! = 5(4)(3)(2)(1) = 120

 

- function type hints

  • 파이썬의 가장 큰 특징 : dynamic typing
  • 처음 함수를 사용하는 사용자가 interface를 알기 어렵다는 단점
  • python 3.5 버전 이후로는 PEP 484에 기반하여 type hints 기능 제공
  • Type hints의 장점
    • 사용자에게 인터페이스 명확히 명시 가능
    • 함수의 문서화시 parameter에 대한 정보 명확히 알 수 있음
    • mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인
    • 시스템 전체적인 안정성 확보

 

- function docstring

  • 함수에 대한 상세스펙을 사전에 작성 > 함수 사용자의 이해도 UP
  • 함수명 아래, 세개의 따옴표로 docsing 영역 표시

 

728x90
Comments