본문 바로가기
파이썬 (Python)/이론

[ 파이썬 이론 ] 함수 (정의 함수 / 내장 함수) / 모듈 (라이브러리)

by Hwanii_ 2023. 10. 17.
728x90

1. 함수의 정의

(자바에서는 메서드 시그니쳐 라고 하지만, 파이썬에서는 해당 단어를 잘 사용 하지 않는다)

 

# 함수의 3요소 == 메서드 시그니쳐 (JAVA)

# 인자 == 인수 == input == 입력값 == 매개변수 == args == 파라미터
# 반환값 == 리턴값 == return == 출력값 == 결과값 == output
# 함수의 기능 == 함수명

# 함수는 보라색 이다.
# 함수명은 함수의 기능을 유추 할 수 있게 만든다.
"""
type()
print()
range()
"""

 

 

2. 사용자 정의 함수 << >> 내장 함수

 

# 사용자 정의 함수 (원래 파이썬에 존재하는 함수는 내장 함수 라고 한다)
# def 키워드를 사용해서 함수를 선언 == 정의
# 함수를 사용 하려면 함수를 호출 해야 한다.
def printApple():
    print('apple')


printApple()

 

 

3. 함수 사용의 장점

 

# 함수 사용의 장점
# 코드 재사용성 용이
# 유지보수 용이
# 오류의 파급효과 절감 (잘 만들어진 함수를 재사용 하기 때문에 오류가 날 가능성이 낮아진다)
# 개발 시간 및 비용 절감 (이미 만들어진 로그인 SNS API를 가져와서 사용 하는 개념)

 

4. 함수 정의 == 선언 방법

 

def 키워드를 사용 한다.

 

def funcA(a):
    print('a = ', a)


def funcB(b):
    print('b = ', b)
    return b


funcB()  # TypeError: funcB() missing 1 required positional argument: 'b' -> 필수적으로 인자 1개가 필요 !

funcB(-13)

banana = funcB(-13)

 

 

>> funcB(b) 정의 함수를 호출 할 때, 인자값을 주지 않으면 에러가 발생 한다.

 

def funcC():
    return 1234

 

def funcD():
	for i in range(10): # IndentationError: expected an indented block after 'for' statement on line 51

 

위와 같이 함수 내부에 for 문 등으로 무언가를 작성 하다가 완성을 하지 않으면 빨간색 밑줄이 뜨면서 에러가 발생 한다.

 

이렇게 아직 미완성인 함수 일 때, 얘를 무시 하고 일단 넘어 가고 싶으면 pass 키워드를 사용 한다.

 

def funcD():
    for i in range(10):
        pass  # 아직 미완성인 함수 일 때 pass 키워드를 명시 해서 에러가 발생 하지 않도록 할 수 있다.

 

5. 애스터리스크 란 ?

 

>> 별이 붙어 있는 매개변수를 애스터리스크 ( * ) 라고 하고 이것을 가변 매개 변수 라고 한다.

 

def funcE(*a):  # 애스터리스크 -> * => 별이 붙어 있는 매개변수를 가변 매개 변수 라고 한다.
    print(a)
    print(type(a))  # 가변 매개 변수는 tuple == 튜플 타입으로 넘어 오게 된다.

    for data in a:
        print(data)


funcE(1, 2, 3, 4)
funcE('apple', 1234, 3.14)

 

>> 가변 매개 변수는 튜플 == tuple 타입 이다.

 

 

 

6. 디폴트 매개변수

 

>> 매개변수의 값을 디폴트로 설정 해줄 수 있다.

 

>> 디폴트 매개변수 설정 개수는 무한대로 가능 하다.

 

def funcF(a, b, c=123):  # 디폴트 매개변수 (무한대로 설정이 가능 하다)
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)


funcF(-1, -2, -3)
print()

funcF(-1, -2)
print()

 

funcF() 함수를 정의 하고, 호출 할 때, 인자의 값으로 각각 -1, -2, -3 을 넣어주면 

 

 

위와 같이 콘솔창에 나오는 것을 확인 할 수 있다. (print() 은 띄어쓰기를 위해 작성 ..)

 

반면에,

 

-1, -2 는 넣어줬는데 세번째 인자 값을 넣어주지 않고 funcF() 함수를 호출 하면 어떻게 될까 ?

 

정답은 디폴트 값을 설정 해줘서 아래와 같이 print() 가 되게 된다.

 

 

만약에 매개변수의 값을 디폴트로 설정해 주지 않는다면 ?

 

 

 

 

이렇게 에러가 뜨게 된다.

 

7. 파이썬의 print() 함수

 

# 파이썬의 print() 함수는 디폴트로 자바의 println() 처럼 줄바꿈이 된다.
print('안녕하세요 !')
print('파이썬 2일차 입니다 ㅎ_ㅎ')
print('ㅎㅎ')

# 줄바꿈을 원치 않으면 아래와 같이 하면 된다. 즉, print() 함수의 매개변수 로는 end 라는 인자값이 있다.
# end는 디폴트 매개변수 값으로 '\n' 을 갖고 있었다는 것을 알 수 있다.
print('안녕하세요 ! ', end='')
print('파이썬 2일차 입니다 ㅎ_ㅎ')
print('ㅎㅎ')

 

 

파이썬의 print() 함수는 디폴트로 자바의 println() 함수 처럼 줄바꿈 기능을 내장 하고 있다.

 

만약에 줄바꿈을 원치 않으면 어떻게 해야 할까 ?

 

print() 함수의 매개변수로는 end 라는 인자값이 존재 한다.

 

이 end 라는 인자값의 디폴트 값은 '\n' 으로 되어 있다.

 

그래서 줄바꿈을 원치 않으면 print() 함수의 인자값에 end = '' 으로 설정해주면 줄바꿈이 적용 되지 않게 된다.

 

8. 모듈 == module 이란 ?

 

# 모듈 module == 라이브러리 => 자바의 클래스 역할
# .py 파이썬 파일
# 모듈 module 이라는 표현을 사용 할 때는 아래와 같다.
# 누군가 기능을 바로 사용 할 수 있도록 미리 구현해놓은 .py 파일을 모듈 이라고 하고, 라이브러리 라고도 볼 수 있다.

# import 키워드를 사용 해서 math (모듈) 안에 있는 것들을 사용 하기.
# 별도의 라이브러리 설치 필요 없이 사용 할 수 있는 모듈을 '표준 모듈' 이라고 한다.
# 설치 해야 사용 가능한 모듈을 '외부 모듈' == '패키지' == 'package' 라고 한다.

 

파이썬의 확장자명은 .py 이다.

 

 

모듈이란 개념은 자바의 라이브러리와 같다고 볼 수 있는데, 자바의 라이브러리는 .java 파일 이다.

 

즉, 클래스 파일인데, 마찬가지로 파이썬도 .py로 끝나는 파일 (클래스 == 라이브러리 == 모듈) 을 사용 할 수 있다.

 

자바와 마찬가지로 import 키워드를 통해 사용 가능 하다.

 

이렇게 별도의 라이브러리 설치 필요 없이 바로 사용 할 수 있는 모듈을 '표준 모듈' 이라 한다.

 

별도의 설치를 통해 사용 해야 하는 모듈은 '외부 모듈' == '패키지' == 'package' 라고 한다.

 

import math

print('============================')
print(math.pi)
print(math.pow(2, 5))

 

import math 를 작성 하여 math.py 모듈을 불러와 사용 할 수 있다.

 

그러면 해당 모듈 내부에 있는 모든 함수 == 메서드 를 사용 할 수 있게 된다.

 

 

 

 

 

pow(2, 5) 함수는 2 라는 숫자를 5번 거듭 제곱 하겠다는 기능을 가진 함수 이다.

 

2*2*2*2*2 = 32 가 된다.

 

9. 모듈 내부에 특정 함수 (객체) 만 가져 오기

 

# 가져올 모듈의 크기가 너무 크다고 가정해보자.
# 그 안에 몇가지 함수만 사용할 예정 인데 모두 가져오는것은 비효율적이지 않겠는가 ?
# 이런 경우에는 from '모듈명' import '사용할 함수명'
# 으로 작성 하면 된다.

from random import randrange

print('============================')
print(randrange(10))  # 0 ~ 9 범위에서 랜덤한 숫자 1개
print(randrange(1, 10))  # 1 ~ 9 범위에서 랜덤한 숫자 1개

# 사용할 함수명을 여러개 작성 할 수도 있다.
from random import randrange, choice

print('============================')
print(randrange(10))
print(randrange(1, 10))
print(choice([10, 11, 13, 15, 23]))

# 모듈명이 너무 길거나 또는 가독성을 위해 모듈명에 별칭을 부여 할 수도 있다. (alias == 별칭 == 별명)
import random as r

print('============================')
r = r.randrange(10)
print(r)

# 모듈 안에 사용할 함수명에도 별칭을 부여 할 수도 있다. (alias == 별칭 == 별명)
from random import randrange as rr

print('============================')
rr = rr(1, 10)
print(rr)

 

 

>> 사용할 함수 (객체) 가 여러개 이면, 여러개 지정도 가능 하다.

 

>> 모듈명이 너무 길다 ? 가독성 또는 사용자 편의성을 위해 모듈에 별칭을 부여 할 수도 있다.

as 키워드

 

>> 모듈 안에 사용할 함수명에 별칭을 부여 할 수도 있다.

반응형