파이썬 21, 22, 23, 24, 25

윤선민·2023년 12월 5일

파이썬

목록 보기
8/14

01_함수란?

함수란

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

내장함수, 사용자함수

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

  • 대부분의 함수는 내장함수 -> print로 출력 가능
  • 내장함수외 필요한 함수를 만들어서 사용하는게 사용자함수

함수를 사용하는 이요

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

함수 = 기능

02_함수 선언과 호출

함수선언

def 키워드 함수명 : 들여쓰기를 이용해서 선언한다.

함수 호출

함수명() 를 이용해서 함수호출

날씨정보출력

def printWeatherInfo():
    print('오늘 날씨는 맑습니다. 기온은 25도입니다.')

printWeatherInfo()
printWeatherInfo()
printWeatherInfo()
==================================================
오늘 날씨는 맑습니다. 기온은 25도입니다.
오늘 날씨는 맑습니다. 기온은 25도입니다.
오늘 날씨는 맑습니다. 기온은 25도입니다.
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()
===================================================
n1 입력 : 10
n2 입력 : 20
n1 * n2 = 200
n1 / n2 = 0.5

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

함수 내에서 또 다른 함수를 호출할 수 있다.

pass 사용

pass를 이용해서 실행문을 생략할 수 있다.

def gugudna2():
    for i in range(1, 10):
        print('2 * {} = {}'.format(i, 2 * i))

    gugudan3()

def gugudan3():
    for i in range(1, 10):
        print('3 * {} = {}'.format(i, 3 * i))

    gugudan4()


def gugudan4():
    for i in range(1, 10):
        print('4 * {} = {}'.format(i, 4 * i))

    gugudan5()


def gugudan5():
    for i in range(1, 10):
        print('5 * {} = {}'.format(i, 5 * i))

gugudna2()
====================================================
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

04_인수와 매개변수

함수 호출 사 험수에 데이터를 전달할 수 있다.
인수와 매개변수 개수는 일치해야 한다.
매개변수 개수가 정해지지 않은 경우 '*'를 이용한다.

def printScore(kor, eng, mat):
    sum = kor + eng + mat
    avg = sum / 3

    print(f'총점: {sum}')
    print(f'평균: {round(avg, 2)}')

korScore = int(input('국어 점수 입력: '))
engScore = int(input('영어 점수 입력: '))
matScore = int(input('수학 점수 입력: '))

printScore(korScore, engScore, matScore)
==============================================
국어 점수 입력: 85
영어 점수 입력: 92
수학 점수 입력: 79
총점: 256
평균: 85.33

05_데이터 반환

함수 살행 결과 반환

return 키워드를 이용하면 함수 실행 결과를 호출부로 반환할 수 있다.
함수가 return을 만나면 실행을 종료한다.

import random

def getOddRandomNumber():

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

    return rNum

print(f'returnValue: {getOddRandomNumber()}')
=======================================================
returnValue: 17
def cmToMm(cm):
    result = cm * 10

    return result

length = float(input('길이(cm)입력 : '))
returnValue = cmToMm(length)
print(f'returnValue: {returnValue}mm')
============================================
길이(cm)입력 : 10.5
returnValue: 105.0mm

06_지역변수와 전역변수

전역변수

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

지역변수

함수 안에 선언된 변수로 함수 안에서만 사용가 능하다.

global키워드

전역변수의 값을 수정할 수 있다.

def printArea():
    triangleArea = width * height / 2
    squareArea = width * height

    print(f'삼각형의 넓이: {triangleArea}') #전역변수
    print(f'사각형의 넓이: {squareArea}')

width = int(input('가로 길이 입력: '))
height = int(input('세로 길이 입력: '))
printArea()
=======================================================
가로 길이 입력: 10
세로 길이 입력: 20
삼각형의 넓이: 100.0
사각형의 넓이: 200
totalVisit = 0
def countTotalVisit():
    global totalVisit

    totalVisit = totalVisit +1
    print(f'누적방문객: {totalVisit}')

countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
==============================================
누적방문객: 1
누적방문객: 2
누적방문객: 3
누적방문객: 4
누적방문객: 5

07_중첩함수

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

08_lambda 함수

lambda키워드를 이용하면 함수 선언을 보다 간단하게 할 수 있다.

calculator = lambda n1, n2 : n1 + n2
returnValue = calculator(10, 20)
print(f'returnValue: {returnValue}')
==========================================
returnValue: 30
getTriangleArea = lambda n1, n2: n1 * n2 / 2
getSquareArea = lambda n1, n2: n1 * n2
getCircleArea = lambda r: radius * radius * 3.14

width = int(input('가로 길이 입력: '))
height = int(input('세로 길이 입력: '))
radius = int(input('반지름 길이 입력: '))

triangleValue = getTriangleArea(width, height)
squareValue = getSquareArea(width, height)
raidusValue = getCircleArea(radius)

print(f'삼각형 넓이: {triangleValue}')
print(f'사각형 넓이: {squareValue}')
print(f'원 넓이: {raidusValue}')
=============================================
가로 길이 입력: 20
세로 길이 입력: 30
반지름 길이 입력: 6
삼각형 넓이: 300.0
사각형 넓이: 600
원 넓이: 113.04

09_모듈

모듈이란 이미 만들어진 휼륭한 기능으로 사용자는 쉽게 사용할 수 있다.
파이썬 모듈은 내부 모듈, 외부 모듈 그리고 사용자 모듈로 구분할 수 있다.

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

import random

rNums = random.sample(range(1, 101), 10)
print(f'rNums: {rNums}')
===========================================
rNums: [78, 59, 83, 63, 85, 14, 79, 22, 93, 56]

10_모듈 제작

파일명을 제대로 저장하자!😭

11_모듈 사용

import 키워드를 이용해서 모듈을 임포트한다.
as 키워드를 이용해서 모듈 이름을 단축 시킬 수 있다.

from calculator import *  #calculator안에 있는거 다 가져오기

add(10, 20)
sub(10, 20)
mul(10, 20)
div(10, 20)

----------------------------------------------------------------

from calculator import add, sub

add(10, 20)
sub(10, 20)
파일명: scores
scores = []

def addScore(s):
    scores.append(s)

def getScore():
    return scores

def getTotalScore():
    total = 0
    for s in scores:
        total += s

    return total
-----------------------------------------------------
 import scores as sc

korScore = int(input('국어 점수 입력: '))
engScore = int(input('영어 점수 입력: '))
matScore = int(input('수학 점수 입력: '))

sc.addScore(korScore)
sc.addScore(engScore)
sc.addScore(matScore)

print(sc.getScore())
print(sc.getTotalScore())
print(sc.getAvgScores())

=========================================================
국어 점수 입력: 90
영어 점수 입력: 85
수학 점수 입력: 73
[90, 85, 73]
248
82.66666666666667
 

12,13_실행(메인) 파일 (01-02)

name전역변수

name에는 모듈 이름이 저장되거나 'main'이 저장된다.

모듈파일
def cmToMm(n):
    return  round(n * 10, 3)

def cmToInch(n):
    return round(n * 0.393, 3)

def cmToM(n):
    return round(n * 0.1, 3)

def cmToFt(n):
    return round(n * 0.032, 3)

if __name__ == '__main__':    #모듈파일이라 나오면 안돼서
    print(f'10cm: {cmToMm(10)}mm')
    print(f'10cm: {cmToInch(10)}inch')
    print(f'10cm: {cmToM(10)}m')
    print(f'10cm: {cmToFt(10)}ft')
--------------------------------------------
실행파일
import unitconversion as uc

if __name__ == '__main__':
    inputNumber = int(input('길이(cm) 입력: '))

    returnValue = uc.cmToMm(inputNumber)
    print(f'{inputNumber}cm : {returnValue}mm')

    returnValue = uc.cmToInch(inputNumber)
    print(f'{inputNumber}cm : {returnValue}inch')

    returnValue = uc.cmToM(inputNumber)
    print(f'{inputNumber}cm : {returnValue}m')

    returnValue = uc.cmToFt(inputNumber)
    print(f'{inputNumber}cm : {returnValue}ft')
==========================================================
길이(cm) 입력: 15
15cm : 150mm
15cm : 5.895inch
15cm : 1.5m
15cm : 0.48ft

14_패키지

패키지

패키지를 이용하면 관련 있는 모듈을 그룹으로 관리할 수 있다.

15_site-packages

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

16_자주 사용하는 외부 모듈

#수학과 관련된 모듈

listVar = [2, 5, 3.14]
합 : print(f'sum(listVar): {sum(listVar)}')
---------------------------------------------
최댓값: print(f'max(listVar): {max(listVar)}')
--------------------------------------------------
최솟값: print(f'min(listVar): {min(listVar)}')
--------------------------------------------------
거듭제곱: print(f'pow(13, 2): {pow(13, 2)}')
----------------------------------------------------
반올림: print(f'{round(3.141592, 1)}')
import math
#절댓값
print(f'math.fabs(-10): {math.fabs(-10)}')
print(f'math.fabs(-0.12389): {math.fabs(-0.12389)}')

#올림
print(f'math.ceil(5.21): {math.ceil(5.21)}')
print(f'math.ceil(-5.21): {math.ceil(-5.21)}')

#내림
print(f'math.floor(5.21): {math.floor(5.21)}')
print(f'math.floor(-5.21): {math.floor(-5.21)}')

#버림
print(f'math.trunc(5.21): {math.trunc(5.21)}')
print(f'math.trunc(-5.21): {math.trunc(-5.21)}')

#최대공약수
print(f'math.gcd(14, 21): {math.gcd(14, 21)}')


#팩토리얼
print(f'math.factorial(10): {math.factorial(10)}')

#제곱근
print(f'math.sqrt(4): {math.sqrt(4)}')
print(f'math.sqrt(12): {math.sqrt(12)}')
=============================================================
math.fabs(-10): 10.0
math.fabs(-0.12389): 0.12389
math.ceil(5.21): 6
math.ceil(-5.21): -5
math.floor(5.21): 5
math.floor(-5.21): -6
math.trunc(5.21): 5
math.trunc(-5.21): -5
math.gcd(14, 21): 7
math.factorial(10): 3628800
math.sqrt(4): 2.0
math.sqrt(12): 3.4641016151377544

시간과 관련된 모듈

import time

lt = time.localtime()
print(f'time.localtime(): {lt}')
print(f'lt.tm_year(): {lt.tm_year}')
print(f'lt.tm_year(): {lt.tm_mon}')
print(f'lt.tm_mday(): {lt.tm_mday}')
print(f'lt.tm_hour(): {lt.tm_hour}')
print(f'lt.tm_min(): {lt.tm_min}')
print(f'lt.tm_sec(): {lt.tm_sec}')
print(f'lt.tm_wday(): {lt.tm_wday}')
===========================================
time.localtime(): time.struct_time(tm_year=2023, tm_mon=12, tm_mday=6, tm_hour=1, tm_min=25, tm_sec=16, tm_wday=2, tm_yday=340, tm_isdst=0)
lt.tm_year(): 2023
lt.tm_year(): 12
lt.tm_mday(): 6
lt.tm_hour(): 1
lt.tm_min(): 25
lt.tm_sec(): 16
lt.tm_wday(): 2

17_객체지향 프로그래밍

  • 객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
  • 객체 = 속성 + 기능
    예) 계산기 = 속성(숫자) + 기능(덧셈, 뺄셈,,,)
    자동차 = 속성(색상, 길이, 가격) + 기능(전진, 후진, 정지,,,,)
  • 객체는 클래스에서 생성된다.(클래스는 1개일지라도 여러개의 객체를 만들 수 있음)

객체 사용의 장점

  • 코드 재사용, 모듈화에 좋다.

18_클래스와 객체 생성

클래스 만들기

클래스는 키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만든다.

객체 생성

객체는 클래스의 생성자를 호출한다.

class Car:

    def __init__(self, col, len):
        self.color = col
        self.length = len

    def doStop(self): #self는 Car라는 클래스안에 있는 기능
        print('Stop!')

    def doSart(self):
        print('Start!')

    def printCarInfo(self):
        print(f'self.color : {self.color}')
        print(f'self.length : {self.length}')



car1 = Car('red', 200)
car2 = Car('blue', 300)

car1.printCarInfo()
car2.printCarInfo()
=================================================
self.color : red
self.length : 200
self.color : blue
self.length : 300

이 글은 제로베이스 데이터 분석 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

0개의 댓글