24-01-12~13 제로베이스 데이터 분석 스쿨 9~10일차

Hanna Kim·2024년 1월 13일

zerobase-data-analytics

목록 보기
8/10

함수

함수: 특정 기능을 재사용하기 위해서 사용. (보다 효율적인 코딩)

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

  • 내장함수: 파이썬에서 기본으로 제공
  • 사용자 함수: 사용자가 직접 선언
def 함수이름(x, y):  #함수 선언
    return x + y   #실행부: 들여쓰기
# ⬆️ 함수 선언부 (* 선언만 하면 print 되지 않음)

# ⬇️ 함수 호출부
print(함수이름(100, 50)) #결과: 150
함수이름()   # 함수 호출: 반드시 함수명+소괄호 형태
  • 첫 글자는 소문자로 사용
  • 통상 함수명은 동사로 사용하는 경우 多 (변수: 명사로 사용)
  • 변수 실행부: 코드 블럭을 위한 들여쓰기
  • 선언만 하면 함수가 실행되지 않으므로, 반드시 호출부 필요!
  • pass 키워드로 실행부 생략 가능

함수 내 또 다른 함수 호출

함수 내 또 다른 함수를 호출.
함수 분기에 따라 호출 순서 유의.

def fun1():
    print('fun1 호출!')
    fun2()
    print('fun2 호출 후에 실행!')

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

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

fun1()

↓

fun1 호출!
fun3 호출!
fun3 호출!
fun2 호출 후에 실행!

return 함수

함수 실행 결과를 실행부에서 호출부로 반환

  • 함수가 return을 만나면 실행 종료, 결과 반환 (return 이후 구문 실행 X)
def getOddRandomNum ():

    while True:
        rNum = random.randint(1, 100)
        if rNum % 2 != 0:
            break

    return rNum

print(f'홀수인 난수: {getOddRandomNum()}')#홀수인 난수: 17

변수

호출부 내 매개변수 활용 가능
인수와 매개변수 개수 매칭 필수

def greet(customer, grade, greetText):
    print(f'{customer} {grade}{greetText}.')

name = input('이름 입력: ')
grade = input('직위 입력: ')
greetText = input('인삿말 입력: ')

greet(name, grade, greetText)

↓

이름 입력: ***홍길동***
직위 입력: ***선임***
인삿말 입력: ***감사합니다***
홍길동 선임님 감사합니다.

매개변수 개수가 정해지지 않았을 때,
매개변수 앞에 *(별표) 처리

def printNumber(*numbers):
    for i in numbers:
        print(i, end="")
    print()

printNumber()
printNumber(10)
printNumber(10, 20)
printNumber(10, 20, 30)10
1020
102030

지역변수와 전역변수

  1. 전역변수: 함수 밖에서 선언된 변수
    1) 함수 내/외부 사용 가능
    2) 함수 내에서 수정 불가능
  2. 지역변수: 함수 내에서 선언된 변수
    1) 함수 내부에서만 사용 가능
    2) 함수 내에서 수정 가능
  3. global (스콥)
    1) 함수 내에서 전역변수 값 수정
    2) ex. global 변수명
  • 전역변수명 == 지역변수명이어도 별개 변수로 취급
totalVisit = 0    # 전역변수
def countTotalVisit():
    global totalVisit   # global
    totalVisit += 1
    print(f'누적 방문객: {totalVisit}')
    
countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()

▼

누적 방문객: 1
누적 방문객: 2
누적 방문객: 3
누적 방문객: 4
누적 방문객: 5

중첩함수

함수 내 함수가 중첩되어 있는 형태

  • 중첩 함수는 외부에서 사용 불가

lambda 함수

함수 선언을 보다 간단하게 가능

def calculator (n1, n2):
	return n1 + n2

calculator = lambda n1, n2: n1+n2

모듈

모듈: 함수가 선언되어 있는 파이썬 파일 (특정 기능을 가지고 있는 파이썬 파일)

  1. 내부 모듈: 파이썬 설치 시 기본적으로 사용 가능
  2. 외부 모듈: 별도 설치 후 사용할 수 있는 모듈
    1. ex. pandas 등
  3. 사용자 모듈: 사용자가 직접 만든 모듈

random 모듈

  • random.randint(A, B)
    : 정수 A와 B 사이 임의 난수 1건
  • random.sample(range(C), D)
    : 0 이상, 정수 C 이하의 랜덤 난수 D개
    - type: list

모듈 제작

파이썬 파일로 저장

  • import 파이썬파일명(.py 제외)로 불러오기
  • 모듈명.함수 형태로 사용

모듈 사용 방법

import (모듈명)

import 키워드로 모듈 임포트

import (모듈명) as (약칭)

as 키워드로 모듈 이름 단축

import calculator as cal

cal.add(10, 20)
cal.sub(10, 20)

from (모듈명) import (사용 함수)

모듈의 특정 기능만 사용

  • 모듈 내 모듈명. 을 생략하고 내장 함수처럼 사용
  • import 뒤 *(별표) 삽입 시 전체 함수 사용
from calculator import add, sub

add(1, 5)
sub(500, 800)
from calculator import *

add(1, 5)
sub(500, 800)
mul(11, 52)
div(830, 90)

  • .append(요소)
    : 리스트에 해당 요소를 추가해주는 함수
  • len(리스트)
    : len 함수를 리스트에 적용할 경우, 해당 리스트의 요소 숫자를 반환

자주 사용하는 모듈

math (수학 관련 모듈)

#수학 관련 함수

#합 = sum
listVar = [2, 85, 3.55, 99]
print(f'{sum(listVar)}') # == 189.55

#최대값 = max
listVar = [2, 85, 3.55, 99]
print(f'{max(listVar)}') # == 99

#최소값 = min
listVar = [2, 85, 3.55, 99]
print(f'{min(listVar)}') # == 2

#거듭제곱 = pow
print(f'{pow(13, 2)}') # == 169
print(f'{pow(2, 3)}') # == 8
print(f'{pow(4, 4)}') # == 256

#반올림 = round
print(f'{round(3.141592, 1)}') # == 3.1
print(f'{round(3.141592, 2)}') # == 3.14
print(f'{round(3.141592, 3)}') # == 3.142
print(f'{round(3.141592, 4)}') # == 3.1416

import math
# 절댓값 = math.fabs
print(f'{math.fabs(-55)}') # == 55

# 올림 = math.ceil
print(f'{math.ceil(1.691)}') # == 2
print(f'{math.ceil(-1.691)}') # == -1

# 내림 = math.floor
print(f'{math.floor(1.691)}') # == 1
print(f'{math.floor(-1.691)}') # == -2

# 버림 = math.trunc
print(f'{math.trunc(1.691)}') # == 1
print(f'{math.trunc(-1.691)}') # == -1

# 최대공약수 = math.gcd
print(f'{math.gcd(98, 12)}') # == 2

# 팩토리얼 = math.factorial
print(f'{math.factorial(5)}') # == 120

# 제곱근 = math.sqrt
print(f'{math.sqrt(9)}') # == 3

random (랜덤 관련 모듈)

import random

# 임의의 난수 1건 출력
print(random.randint(1, 5))

# 임의의 난수 리스트 N개 출력
print(random.sample(range(2), 2))
# 이 경우 [1, 0] 출력

time (시간 관련 모듈)

import time

# 현재 시간
print(time.localtime())

# 현재 시간에서 year 출력
print(time.localtime().tm_year) # 연도
print(time.localtime().tm_mon)  # 월
print(time.localtime().tm_mday) # 일
print(time.localtime().tm_hour) # 시간
print(time.localtime().tm_min)  # 분
print(time.localtime().tm_sec)  # 초
print(time.localtime().tm_wday) # 요일 (0 월요일 ~ 6 일요일)
print(time.localtime().tm_yday) # 1월 1일 이후 날짜 수


실행(메인) 파일

전역변수 name을 사용한 전역변수 지정

  • name에는 모듈 이름이 저장되거나, ‘name’이 저장된다.
    • 파이썬 파일의 이름
      • ex. addModule.py일 경우 name = addModule
    • 해당 모듈을 실행하는 실행파일일 경우, (즉, 해당 모듈을 import 하여 실행하는 파일일 경우)
      name = name

전역변수 name을 사용한 실행파일 지정

  • if name == ‘main’ 지정 시, 해당 파일이 실행파일일 때만 실행
  • 해당 파일이 모듈로 사용되었을 경우, 하단 print 출력문 미실행


패키지

패키지를 이용하면 관련있는 모듈을 그룹으로 관리 가능

  • from (디렉토리명) import (모듈명)으로 불러오기

사이트 패키지

site-packages에 있는 모듈은 어디서나 사용 가능

sys 모듈

  • sys.path:
    : 현재 파이썬 파일이 실행되기 위해 참조되는 파일 경로를 출력
    import sys

    for path in sys.path:
        print(path)
  • 파일 경로 중 venv - lib(library) 폴더 내 site-packages
    • venv: verture enviorment (가상환경)
    • 파이썬 버전, 라이브러리, 프로젝트 등 각 가상환경마다 모듈 배치 (서로 충돌 발생 X)
      • venv - lib - site-package로 모듈 이동 시, 해당 모듈은 어떤 디렉토리에서 실행해도 사용 가능

0개의 댓글