[데이터분석]파이썬 4일차 스터디노트

bin·2023년 2월 6일
0

파이썬

목록 보기
4/12
post-thumbnail

함수

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

  • 함수 내에서 또 다른 함수 호출
def fun1():
    print('fun1 호출!')
    fun2()
    print('fun2 호출 후에 실행!!')

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

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

fun1()

->
fun1 호출!
fun2 호출!
fun3 호출!
fun2 호출 후에 실행!!
  • 연습문제: 구구단 출력 함수가 연쇄적으로 호출되도록 함수 선언
def guguDan2():
    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))

guguDan2()

인수와 매개변수 함수 호출시 함수에 데이터 전달 가능

주의) 매개변수와 인수는 쌍이다 = 개수 일치해야 함

  • 매개변수 개수가 정해지지 않은 경우 ‘*’를 이용
def printNumber(*numbers):
    print(type(numbers))

printNumber()
<class 'tuple'>
def printNumber(*numbers):
    for number in numbers:
        print(number, end='')

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

->
101020102030

Return 함수 실행 종료 및 함수 실행 결과를 호출부로 반환

def divideNumber(n):
    if n % 2 == 0:
        return '짝수'
        print('짝수입니다.')
    else:
        return '홀수'
returnValue = divideNumber(5)
print(f'returnValue: {returnValue}')

return 이후 구문은 실행x (ex. print(‘짝수입니다.’)는 출력x)

*연습문제: 1부터 100까지의 정수 중 홀수인 난수를 반환하는 함수 선언
import random
def getOddRandomNumber():
while True:
rNum = random.randint(1, 100)
if rNum % 2 != 0:
break #rNum이 홀수이면 빠져나옴

return rNum

print(f'returnValue: {getOddRandomNumber()}')

전역 변수: 함수 밖에 선언된 변수,
어디에서나 사용 가능하지만 함수 안에서 수정할 수는 없음

num_out = 10  #함수 밖에 선언된 전역변수
def printNumbers():
    num_out = 20  #수정된 것이 아니라 아예 다른 것(like 동명이인..)
    print(f'num_out: {num_out}')  #함수 내부에서만 유효한 지역변수

printNumbers()
print(f'num_out: {num_out}')   #처음의 전역변수가 출력(=10)

지역변수 함수 안에 선언된 변수, 함수 안에서만 사용 가능

global 함수 안에서도 전역변수의 값 수정 가능하게 하는 키워드

num_out = 10
def printNumbers():
    global num_out
    num_out = 20
    print(f'num_out: {num_out}')

printNumbers()
print(f'num_out: {num_out}')
  • 연습문제: 방문객 수를 카운트하는 함수
totalVisit = 0
def countTotalVisit():
    global totalVisit
    totalVisit = totalVisit + 1
    print(f'누적 방문객: {totalVisit}')

countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()

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

중첩함수 함수 안에 또 다른 함수가 있는 형태, 함수 안에서만 사용 가능

  • 연습문제: calculator()함수를 선언하고 calculator()안에 덧셈, 뺄셈, 곱셈, 나눗셈 함수 선언
def calculator(n1, n2, operator):
    def addCal():
        print(f'덧셈 연산: {round(n1 + n2, 2)}')
    def subCal():
        print(f'뺄셈 연산: {round(n1 - n2, 2)}')
    def mulCal():
        print(f'곱셈 연산: {round(n1 * n2, 2)}')
    def divCal():
        print(f'나눗셈 연산: {round(n1 / n2, 2)}')

    if operator ==1:
        addCal()
    if operator ==2:
        subCal()
    if operator ==3:
        mulCal()
    if operator ==4:
        divCal()

while True:
    num1 = int(input('실수(n1) 입력: '))
    num2 = int(input('실수(n2) 입력: '))
    operatorNum = int(input('1. 덧셈 2. 뺄셈 3. 곱셈 4. 나눗셈 5. 종료'))

    if operatorNum == 5:
        print('Bye~')
        break

    calculator(num1, num2, operatorNum)

lambda 함수선언을 보다 간단하게 할 수 있다

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

returnValue = calculator(10, 20)
print(f'returnValue: {returnValue}')

calculator = lambda n1, n2: n1 + n2
returnValue = calculator(10, 20)
print(f'returnValue: {returnValue}')
  • 연습문제: 삼각형, 사각형, 원의 넓이 반환하는 lambda함수
getTriangleArea = lambda n1, n2: n1 * n2 / 2
getSquareArea = lambda n1, n2: n1 * n2
getCircleArea = lambda r: r * r * 3.14

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

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

print(f'삼각형 넓이: {triangleValue}')
print(f'사각형 넓이: {squareValue}')
print(f'원 넓이: {circleValue}')

📌2월 시작은 무리였나 싶지만 .. 중꺾마의 정신을 되새기자😂
3월아 어서와라 제발!

0개의 댓글