본문 바로가기
STUDY/PYTHON

[Python] 7. 함수

by 짤롱 2024. 11. 12.
728x90

함수(Function)

1. 함수 선언

- 입력을 받아 특정 기능을 수행한 후 그 결과를 반환

- 반복 사용되는 코드를 미리 정의하여 필요할 때 사용 및 수정이 용이할 수 있도록 모듈화

- 입력(Input) : 매개변수(기본 매개변수, 가변 매개변수, 키워드 매개변수)

- 출력(Output) : 입력값인 매개변수를 받아 코드 처리한 결과

 

1.1 기본 표현

- def(definition) : 함수를 선언하기 위한 키워드

- 함수명 : 내장 함수명과 동일하지 않은 함수명으로 선언

- 콜론(:) : 코드 블록의 시작을 의미하며 이후 실행문 입력

- 들여쓰기(indent) : 코드 블록 안에서 실행문 입력을 구분하기 위해 사용

- 실행문 : 함수 처리가 필요한 코드 입력

# 함수 선언 : 처리하는 함수
def greet():
    print("Hello!")
    print("Nice to meet you:)")

# 함수 사용
greet()  # Hello!
         # Nice to meet you:)
         
# 함수 선언 : 반환하는 함수
def greet():
    return "Hello!"

# 함수 사용
a = greet()
print(a)  # Hello!

 

1.2 입력

- 기본 매개변수 : 기본값으로 사용되는 매개변수

- 가변 매개변수 : 원하는 만큼 정하여 사용할 수 있는 매개변수, '*가변 매개변수'

- 키워드 매개변수 : 이름을 지정하여 사용하는 매개변수, '키워드 매개변수 = 값'

# 함수 선언 - 기본 매개변수
def greet(name):
    print(f"Hello, {name}!")

# 함수 사용
# greet()     # greet() missing 1 required positional argument: 'name'
greet("Lee")  # Hello, Lee!

# 함수 선언 - 가변 매개변수
def greet(*args):
    for i in args:
        print(f"Hello, {i}!", end = " ")
    
# 함수 사용
greet()                      # 
greet("Lee")                 # Hello, Lee! 
greet("Lee", "Kim", "Park")  # Hello, Lee! Hello, Kim! Hello, Park! 

# 함수 선언 - 키워드 매개변수
def greet(name = "Lee"):
    print(f"Hello, {name}!")
    
# 함수 사용
greet()       # Hello, Lee!
greet("Kim")  # Hello, Kim!

 

1.3 출력

- return : 함수 안에서 결과값을 반환하여 함수 실행했던 위치로 돌아감

- 여러개 결과값 반환 가능

- 반환값이 없는 함수의 결과값을 받으면 None 출력

# 함수 선언 - 반환값 있음
def calc(a, b):
    return  a + b

# 함수 사용
c = calc(5, 10)
print(c)          # 15
calc(5, 5)        # 10

# 함수 선언 - 여러개 변환값
def calc2(a, b):
    return  a + b, a * b
    
# 함수 사용
c, d = calc2(5, 10)
print(c)          # 15
print(d)          # 50
calc2(5, 5)       # (10, 25)

# 함수 선언 - 반환값 없음
def calc3(a, b):
    print(a + b)
    
# 함수 사용
c = calc3(5, 10)  # 15
print(c)          # None
calc3(5, 5)       # 10
    
# 함수 선언 - 반환값 없음
def calc4(a, b):
    return
    
# 함수 사용
c = calc4(5, 10)
print(c)          # None
calc4(5, 5)       #

 

2. 변수

2.1 매개변수

- 일반 매개 변수 뒤에 가변 매개변수 사용 가능

- 가변 매개변수 뒤에 일반 매개변수 사용 불가능

- 가변 매개변수는 하나만 사용 가능

- 가변 매개변수 뒤에 키워드 매개변수 사용 가능

# 함수 선언 - 일반 매개 변수 뒤에 가변 매개변수 사용 가능
def greet(n, *args):
    for a in args:
        print(f"Hello, {n}{a}!")
  
# 함수 사용
greet("Mr.", "Lee", "Kim", "Park")      # Hello, Mr.Lee!
                                        # Hello, Mr.Kim!
                                        # Hello, Mr.Park!

# 함수 선언 - 가변 매개변수 뒤에 일반 매개변수 사용 불가능
def greet(*args, n):
    for a in args:
        print(f"Hello, {n}{a}!")
  
# 함수 사용
greet("Mr.", "Lee", "Kim", "Park")      # greet() missing 1 required keyword-only argument: 'n'

# 함수 선언 - 가변 매개변수는 하나만 사용 가능
def greet(n, *arg, *args):
    for a in args:
        print(f"Hello, {n}{a}!")
        
# 함수 사용
greet("Mr.", "Lee", "Kim", "Park")      # * argument may appear only once

# 함수 선언 - 가변 매개변수 뒤에 키워드 매개변수 사용 가능
def greet(*args, n):
    for a in args:
        print(f"Hello, {n}{a}!")
  
# 함수 사용
greet("Lee", "Kim", "Park", n = "Mr.")  # Hello, Mr.Lee!
                                        # Hello, Mr.Kim!
                                        # Hello, Mr.Park!

 

추가)

# *은 낱개씩 처리하라는 의미
print("ABCDEFG")                          # ABCDEFG

print(*"ABCDEFG")                         # A B C D E F G
print("A", "B", "C", "D", "E", "F", "G")  # A B C D E F G

a = [1, 2, 3, 4, 5]
print(*a)                                 # 1 2 3 4 5
print(a[0], a[1], a[2], a[3], a[4])       # 1 2 3 4 5

 

2.2 지역변수 & 전역변수

- 변수 우선 순위 : L→E→G

- L(Local variable) : 함수 안에서 선언되고 유효 지역변수

- E(Enclosing varibale) : 안쪽 함수 입장에서 바깥 함수가 선언한 변수

- G(Global variable) : 함수 안과 밖에서 모두 사용 가능한 전역변수, global 키워드 사용

# L(Local variable)
# 함수 선언
def fun():
    lv = 10    # Local variable
    print(lv)

# 함수 확인
fun()          # 10

# E(Enclosing variable)
# 함수 선언
def outer_fun():
    ev = 10    # Enclosing variable

    def inner_fun():
        print(ev)

    inner_fun()

# 함수 확인
outer_fun()    # 10

# G(Global variable)
# 함수 선언
gv = 10

def fun():
    global gv  # Global variable
    print(gv)
    gv = 15
    print(gv)

# 함수 확인
fun()          # 10
               # 15

 

추가)

x = 10            # Global variable

def outer_fun():
    x = 20        # Enclosing variable

    def inner_fun():
        x = 30    # Local variable
        print(x)  # Local variable is used
        
    inner_fun()
    print(x)      # Enclosing variable is used

outer_fun()       # 30  # Local variable
                  # 20  # Enclosing variable
print(x)          # 10  # Global variable

 

3. 내장 함수

3.1 숫자형 관련 함수

- int(x) : 정수로 변환한 x 값 반환

- abs(x) : 절대값 x 반환

- min(x) : x 값 중 최소값 반환

- max(x) : x 값 중 최대값 반환

- sum(x) : x 값을 모두 더한 결과값 반환

- pow(x, y) : x를 y번 제곱한 결과값 반환

- divmod(x, y) : x를 y로 나눈 몫과 나머지를 튜플 형태로 반환

# int(x)
x = 123.45
int(x)        # 123

# abs(x)
x = -123.45
abs(x)        # 123.45

# min(x)
x = [1, 2, 3, 4, 5]
min(x)        # 1

# max(x)
x = [1, 2, 3, 4, 5]
max(x)        # 5

# sum(x)
x = [1, 2, 3, 4, 5]
sum(x)        # 15

# pow(x, y)
x = 5
y = 3
pow(x, y)     # 125 = 5 * 5 * 5

# divmod(x, y)
x = 17
y = 5
divmod(x, y)  # (3, 2)

 

3.2 논리형 관련 함수

- all(x) : 매개변수 x 모두가 참일 경우 True 반환

- any(x) : 매개변수 x 중 하나라도 참일 경우 True 반환

# all(x)
x = [1, 2, 3, 4, 5]
all(x)  # True

x = [0, 1, 2, 3, 4]  
all(x)  # False

# any(x)
x = [0, 1, 2, 3, 4]  
any(x)  # True

 

참고) 숫자0, 숫자 0.0, 빈 문자열, 빈 리스트, 빈 튜플, 빈 딕셔너리, None은 False로 변환

 

3.3 문자형 관련 함수

- str(x) : x를 문자열로 변환

- chr(x) : 아스키코드(ASCII) 값 x에 대응하는 문자 반환

- ord(x) : 문자 x의 아스키코드(ASCII) 값 반환

# str(x) : x를 문자열로 변환하여 반환
x = 123.45
y = "Number : " + str(x)
print(y)        # Number : 123.45
print(type(y))  # <class 'str'>

# chr(x)
x = 65
chr(x)          # 'A'

# ord(x)
x = "A"
ord(x)          # 65

 

3.4 리스트&튜플&집합 관련 함수

- list(x) : x를 리스트로 변환

- tuple(x) : x를 튜플로 변환

- set(x) : x를 집합으로 변환

- len(x) : 매개변수 개수를 반환

- enumerate(x) : 문자열, 리스트, 튜플, 집합, 딕셔너리를 입력받아 순번과 요소를 반환

- zip(x, y) : x와 y 매개변수를 쌍으로 묶어서 반환

# list(x)
x = "12345"
list(x)                # ['1', '2', '3', '4', '5']

# tuple(x)
x = "12345"
tuple(x)               # ('1', '2', '3', '4', '5')

# set(x)
x = "12345"
set(x)                 # {'1', '2', '3', '4', '5'}

# len(x)
x = [1, 2, 3, 4, 5]
len(x)                 # 5

# enumerate(x)
x = "ABCDE"
for i, a in enumerate(x):
    print(i, ":",  a)  # 0 : A
                       # 1 : B
                       # 2 : C
                       # 3 : D
                       # 4 : E

# zip(x, y)
x = [1, 2, 3, 4, 5]
y = "ABCDE"
list(zip(x, y))        # [(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E')]

 

3.5 함수와 함께 사용하는 함수

- filter(f, x) : 함수 f에 x를 매개변수로 전달하여 True인 결과를 리스트로 반환

- map(f, x) : 함수 f에 매개변수 x를 하나씩 전달해 얻은 결과를 리스트로 반환

- lambda x: y : 매개변수 x를 받아 y를 반환

# filter(f, x)
def func(s):
    return s == s.upper()
x = "Dream Comes True"
list(filter(func, x))              # ['D', ' ', 'C', ' ', 'T']

# map(f, x)
x = [1, 2, 3, 4, 5]
list(map(lambda li : li * li, x))  # [1, 4, 9, 16, 25]

# lambda x: y
add = lambda x, y: x + y
print(add(3, 5))                   # 8

 

3.6 실행관련 함수

- eval(x) : 실행 가능한 문자열을 받아 문자열을 실행한 결과를 반환

- input() : 사용자로부터 입력을 받음, 입력받은 값은 언제나 문자열

# eval(x)
x = "10 + 5"
eval(x)                 # 15

# input()
x = input().split(" ")  # 1 2 3 4 5
print(x)                # ['1', '2', '3', '4', '5']

 

3.7 객체 정보 및 메타 데이터 관련 함수

- id(x) : x의 고유 주소값을 반환

- isinstnace(x, y) : x가 y의 인스턴스인지 여부를 True, False로 반환

- dir(x) : x가 가지고 있는 변수나 메소드 목록 반환

# id(x)
x = [1, 2, 3, 4, 5]
id(x)                 # 3024298901248

# isinstnace(x, y)
x = [1, 2, 3, 4, 5]
isinstance(x, tuple)  # False
isinstance(x, list)   # True

# dir(x)
x = [1, 2, 3, 4, 5]
dir(x)                # ['__add__',
                      # '__class__',
                      # '__class_getitem__',
                      # '__contains__',
                      # '__delattr__',
                      # '__delitem__',
                      # '__dir__',
                      # '__doc__',
                      # '__eq__',
                      # '__format__',
                      # '__ge__',
                      # '__getattribute__',
                      # '__getitem__',
                      # '__getstate__',
                      # '__gt__',
                      # '__hash__',
                      # '__iadd__',
                      # '__imul__',
                      # '__init__',
                      # '__init_subclass__',
                      # '__iter__',
                      # '__le__',
                      # '__len__',
                      # '__lt__',
                      # '__mul__',
                      # '__ne__',
                      # '__new__',
                      # '__reduce__',
                      # '__reduce_ex__',
                      # '__repr__',
                      # '__reversed__',
                      # '__rmul__',
                      # '__setattr__',
                      # '__setitem__',
                      # '__sizeof__',
                      # '__str__',
                      # '__subclasshook__',
                      # 'append',
                      # 'clear',
                      # 'copy',
                      # 'count',
                      # 'extend',
                      # 'index',
                      # 'insert',
                      # 'pop',
                      # 'remove',
                      # 'reverse',
                      # 'sort']

 

3.8 기타

- range(x, y, z) : x부터 y-1까지 z씩 증가하는 객체를 반환

- sorted(x) : x 요소를 정렬하여 반환

# range(x, y, z)
a = range(1, 11, 2)
print(list(a))  # [1, 3, 5, 7, 9]

# sorted(x)
x = [3, 2, 5, 1, 4]
sorted(x)       # [1, 2, 3, 4, 5]

 

반응형

'STUDY > PYTHON' 카테고리의 다른 글

[Python] 6. 조건문 & 반복문  (3) 2024.11.11
[Python] 5. 딕셔너리  (0) 2024.11.10
[Python] 4. 튜플 & 집합  (3) 2024.11.09
[Python] 3. 리스트  (0) 2024.11.08
[Python] 2. 문자형  (0) 2024.09.21