데이터 취업 스쿨 스터디 노트 -(6) 함수, return, 모듈

테리·2024년 6월 7일
0

파이썬의 함수는 수학의 함수와 동일하다.

ex)
def addFun(x, y):
	return x+y
print(addFun(3,5))   #결과: 8

함수는 파이썬에서 기본으로 제공하는 내장함수와 사용자가 직접 선언하는 사용자 함수가 있다.

내장함수

ex)
print(),
input()
.sort(): 데이터 정렬
.reverse(): 데이터를 뒤집어서 거꾸로
.clear(): 데이터 삭제

사용자함수

ex)
def printName(name):
	print(f'{name}고객님 안녕하세요')

함수는 특정 기능을 재사용하기 위해서 사용한다.

함수 선언

ex) 덧셈, 곱셈 함수 선언 연습

def calFun():
    n1 = int(input('n1 입력: '))
    n2 = int(input('n2 입력: '))

    print(f'n1*n2 = {n1*n2}')
    print(f'n1/n2 = {round(n1/n2,2)}')

calFun()
round(A,2) #A를 소수 2번째 자리에 맞춰 반올림

함수 내에서 또다른 함수 호출

def fun1():
	print('fun1 호출!')
    fun2()

def fun2():
	print('fun2 호출!')
    fun3()

def fun3():
	print('fun3 호출!')

fun1()

# ---결과---
fun1 호출!
fun2 호출!
fun3 호출!
-----------
만약 def fun1():
		print('fun1 호출!')
    	fun2()
    	실행문A
이런 형태라면 fun2()가 실행된 후 '실행문A'가 실행됨.         

*Pass 키워드를 활용해 실행문을 생략할 수 있다.

ex) def printToday():
		pass

인수와 매개변수

인수와 매개변수는 여러개로 설정할 수 있다.
단, 인수와 매개변수 개수는 일치해야 한다.

매개변수 개수가 정해지지 않은 경우 '*'를 이용한다.

ex)
def printNumber(*numbers):
    for number in numbers:
        print(number, end='')
    print()

printNumber(10)
printNumber(10,20)
printNumber(10,20,30)

데이터 반환 return

return 키워드를 이용하면 함수 실행 결과를 호출부로 반환할 수 있다.

def calculator(n1,n2):
    print(n1 + n2)
calculator(10,20)

위아래 둘다 같은거임.

def calculator(n1,n2):
    result = n1 + n2
	return result
returnValue = calculator(10,20) #호출부
print(returnValue)

return을 만나면 return 이후의 실행문은 실행되지 않는다.

def num(n):
    if n % 2 == 0:
        return '짝수'
    else:
        return '홀수'
    n = n * 3  #위에 return이 있으므로 실행되지 않음.

지역변수와 전역변수

전역변수

함수 밖에서 선언된 변수로 어디에서나 사용은 가능하지만 함수 안에서 수정할 수는 없다.

함수 밖에서 선언한 전역변수는 함수 내부에서도 쓰일 수 있고 함수 밖에서도 쓰일 수 있다.
함수 내부에 있는 지역변수는 함수 밖에서 선언한 변수에 영향을 끼칠 수 없다.

지역변수

함수 안에 선언된 변수로 함수 안에서만 사용 가능하다.
함수 안에서 선언된 변수를 함수 밖에서 호출할 수 없다.

global 키워드

global을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다.
global을 사용해 함수 안에서 변수명을 사용하면 해당 변수의 값이 변할 때 함수 밖에서 선언한 변수의 값도 바뀐다.

중첩함수

함수안에 또 다른 함수가 있는 형태
내부 함수를 함수 밖에서 호출할 수 없다.

def out_function():
    print('out_function called!!')

    def in_function():
        print('in_function called!!')

    in_function()

out_function()  #가능
in_function()   #불가능

lambda 함수

lambda 키워드를 이용하면 함수 선언을 보다 간단하게 할 수 있다.
lambda를 꼭 사용할 필요는 없지만 식이 간단하다면 lambda를 사용해도 좋다.

모듈

함수가 선언되어있는 파이썬 파일

  • 내부 모듈 -> 파이썬 설치 시 기본적으로 사용할 수 있는 모듈(ex random)
  • 외부 모듈 -> 별도 설치 후 사용할 수 있는 모듈(ex pandas, numpy)
  • 사용자 모듈 -> 사용자가 직접 만든 모듈

sample 함수
random 모듈을 이용해서 0부터 100사이의 난수 10개를 발생시켜보기

import random
rNums = random.sample(range(1,101), 10)   #smaple(범위, 난수로 발생시킬 개수)
print(f'rNums: {rNums}')

모듈 만들기

모듈은 특정 기능을 가지고 있는 파이썬 파일을 말한다.
모듈에서 정의한 함수를 불러온 모듈과 같이 사용하면 됨.

모듈 사용

as 키워드를 이용해서 모듈 이름을 단축 시킬 수 있다.
ex) import calculator as cal

from ~ import 키워드를 이용해서 모듈의 특정 기능만 사용할 수 있다.

from calculator import add
from calculator import sub

는 아래와 같이 사용할수도 있음.

from calculator import add, sub

모듈에 있는 모든 기능을 가져오는 방법

from calculator import *

실습 insight
모듈을 import로 불러온 순간 모듈에 정의된 모든 함수는 사용할 수 있게 된다. 그래서 input으로 넣은 값을 addScore로 모두 넣은 순간 모듈안에 정의된 각각의 함수들은 결과들을 가질 수 있게되어 다른 함수들도 사용 가능해진다.
addScore로 값을 넣지 않으면 모듈에 있는 scores에 아무 값도 없기 때문에 함수를 실행할 수 없다.

__name__ 전역변수


파이썬 파일의 이름이 __name__ 이라는 전역변수에 저장이 됨.
하지만 실행파일의 __name__에는 실행파일의 이름이 저장되는것이 아니라 __main__이라는 문자열이 저장된다.

다른 모듈들은 각 파일명이 저장되지만 실행파일은 __main__이라는 문자가 저장되므로 이걸 통해서 실행파일을 구분할 수 있다.

프로젝트를 하다보면 여러개의 파이썬 파일을 만드는 경우가 있다. 이런 경우에 파이썬을 처음 실행하면 파이썬이 어떤 파일을 처음 실행파일로 실행하는지 알기위해 이것을 사용함.


이미지를 참조하면 module.py에 정의된 mod(n1,n2)를 사용하고 싶어 다른 파일에서 해당 파일을 import해서 사용하면 하단에 있는
print(addModule.add(10,20))
print(subModule.sub(10,20))
print(mulModule.mul(10,20))
print(divModule.div(10,20))
이것들도 실행됨.
하지만 다른 실행파일에서는 위의 4가지를 원하지 않으므로 실행되지 않았으면 하는 경우에 위의 이미지처럼 if 조건문을 사용해 실행되지 않게 할 수 있다.
다른 실행 파일에서 해당 모듈을 사용하는 것이므로 해당 모듈의 __name__에 저장되어 있는 것은 __main__이 아니라 파일 이름이므로 실행되지 않음.
오직 해당 모듈 파일에서 직접 실행할때만 조건문에 있는 내용이 실행됨.

패키지

모듈이 많아지면 관련있는 모듈을 모아서 패키지로 만듬

site-packages

site-packages에 있는 모듈은 어디서나 사용할 수 있다.

패키지 방식은 실행파일과 모듈이 같은 패키지 즉, 같은 폴더 안에 있어야 실행가능 한 방식이다.
그러나 모듈을 어디서나 범용적으로 사용하고 싶을 때 이를 위해 site-packages를 사용한다.

파이썬을 보면 venv라는 가상환경을 담당하는 폴더가 있다. 이 폴더 안에 site-packages라는 폴더(디렉토리)가 있는데 이 폴더안에 있는 것들은 모든 프로젝트에서 범용적으로 다 사용할 수 있다. 그렇기에 내가 범용적으로 사용하고 싶은 모듈이 있으면 해당 모듈은 site-packages 안으로 옮겨주면 된다.

실습

자주 사용하는 외부 모듈

  • math 모듈: 수학 관련 모듈
  • random 모듈: 난수 관련 모듈
  • time 모듈: 시간 관련 모듈

수학관련 함수

listVar = [2, 5, 3.14, 58]
#합
print(f'합: {sum(listVar)}')
#최댓값
print(f'최댓값: {max(listVar)}')
#최솟값
print(f'최댓값: {min(listVar)}')
#거듭제곱
print(f'거듭제곱: {pow(4,3)}') #4의 3제곱
#반올림
print(f'{round(3.14592, 2)}') #반올림해서 소수점 2번째 자리까지 표현

import math

#절대값
print(math.fabs(-10))
#올림
print(math.ceil(5.21))   #결과: 6
#내림
print(math.floor(5.21))   #결과: 5
print(math.floor(-5.21))   #결과: -6
#버림
print(math.trunc(5.21))   #결과: 5
print(math.trunc(-5.21))   #결과: -5
#최대공약수
print(math.gcd(14,21))
#팩토리얼
print(math.factorial(10))
#제곱근
print(math.sqrt(12))

import time

#현재 시스템의 시간
lt = time.localtime()
print(lt)
print(f'년도: {lt.tm_year}')
print(f'월: {lt.tm_mon}')
print(f'날짜: {lt.tm_mday}')
print(f'시간: {lt.tm_hour}')
print(f'분: {lt.tm_min}')
print(f'초: {lt.tm_sec}')
print(f'요일: {lt.tm_wday}') #숫자로 표현됨

0개의 댓글