[6일차] 파이썬 중급2

하은·2023년 10월 20일
0

06. 지역변수와 전역변수

함수 내에서만 사용할 수 있는 변수가 있다.

- 전역변수

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

- 전반적으로 쓸 수 있는 변수. 함수 밖, 안 전부 다 쓸 수 있다.

- 단, 함수안에서 수정은 x. 만약 수정하고자 한다면 새로운 변수가 만들어지는 것.

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

printNumbers()
print(f'num_out: {num_out}')

-->
num_out: 10
num_out: 10

--

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

printNumbers()
print(f'num_out: {num_out}')

-->
num_out: 20
num_out: 10
  • 함수 안 변수 'num_out'
    형태는 똑같지만 아예 다른 것. 동명이인느낌
    = 새로운 변수를 새로 만든거고, 함수 안에서만 유효한 지역변수

- 지역변수

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

def printNumbers():
    num_in = 20
    print(f'num_in : {num_in}')

print(f'num_in : {num_in}')

-->
NameError: name 'num_in' is not defined

함수 밖에서 num_in을 호출하면 지역변수이기 떄문에 뜨지 않는다.

- Global 키워드

- 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}')

-->

= 함수 내부에서 전역변수를 수정할 때 사용하는 키워드

실습) 사용자가 가로, 세로 길이를 입력하면 삼각형과 사각형의 넓이를 출력하는 함수를 만들어보자

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
  • 전역변수를 함수 안에서 수정할 수 있도록 global 사용
    불러오는만큼 증가

07. 중첩함수

함수 안에 또 다른 함수

- 중첩함수

- 함수 안에 또 다른 함수가 있는 형태이다.

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

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

    * in_function()
    
out_function()

- 내부 함수를 함수 밖에서 호출할 수는 없다.

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

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

    in_function()
out_function()

* in_function()

-->
NameError: name 'in_function' is not defined. 

실습) calculator() 함수를 선언하고 calculator()안에 덧셈, 뺄셈, 곱셈, 나눗셈 함수를 선언하자

def calculator(n1, n2, operator):

    def addCal():
        print(f'덧셈연산: {n1 + n2}')

    def subCal():
        print(f'뺼셈연산: {n1 - n2}')

    def mulCal():
        print(f'곱셈연산: {n1 * n2}')

    def divCal():
        print(f'나눗셈연산: {n1 / n2}')

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

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

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

    calculator(num1, num2, operatorNum)

lambda 함수

함수 선언을 보다 간단하게 하자

- lambda

- 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}')

-->
가로 길이 입력: 20
세로 길이 입력: 30
반지름 길이 입력: 6
삼각형 넓이: 300.0
사각형 넓이: 600
원 넓이: 113.04

09. 모듈

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

- 모듈이란?

- 모듈이란, 이미 만들어진 훌륭한 기능으로 사용자는 쉽게 사용할 수 있다.

  • 계산모듈
  • 난수모듈
  • 날짜/시간모듈
    -> 사용자는 마치 내 것 처럼 사용할 수 있다.

- 파이썬 모듈은 내부모듈, 외부모듈, 사용자모듈로 구분할 수 있다.

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

실습) random모듈을 이용해서 1부터 10까지의 정수 중 난수 1개를 발생시켜보자

import random 

rNum = random.randint(1, 10) 
print(f'rNum : {rNum}')
  • random = 모듈 불러오는 키워드
  • randint = 1부터 10까지 중에서 난수 발생시키는 코드
  • random.randint(1, 10) = 모듈명 / . / 모듈이 갖고 있는 기능, 함수, 클래스등 명시

실습) random모듈을 이용해서 0부터 100사이의 난수 10개를 발생시켜보자

import random

rNums = random.sample(range(0, 101), 10)
print(f'rNums: {rNums}')
  • sample이라는 함수: 매개변수 4개를 받음. 범위, 어디서 부터, 어디까지, 리스트로 반환

010. 모듈제작

모듈은 파이썬 파일이다

- 모듈 만들기

- 모듈은 특정 기능을 갖고있는 파이썬 파일을 말한다.


1 = 모듈

# calculator.py

def add(n1, n2):
    print(f'덧셈 결과: {n1 + n2}')

def sub(n1, n2):
    print(f'뺼셈 결과: {n1 - n2}')

def mul(n1, n2):
    print(f'곱셈 결과: {n1 * n2}')

def div(n1, n2):
    print(f'나눗셈 결과: {n1 / n2}')

--
2 = 모듈 사용

# module.py

import calculator

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

-->
덧셈 결과: 30
뺼셈 결과: -10
곱셈 결과: 200
나눗셈 결과: 0.5

모듈명 / . / 그 안에 있는 기능

실습) 로또번호(6개)를 출력하는 모듈을 만들어보자(난수)

# work.py

import random

def getLottoNumbers():
    result = random.sample(range(1, 45), 6) 

    return result
  • . sample = 여러개
import work

result= work.getLottoNumbers()
print(f'LottoNumbers: {result}')

실습) 문자열을 거꾸로 반환하는 모듈을 만들어보자

# work2.py

def reverseStr(str):
    reversedString = ''
    for c in str:
        reversedString = c + reversedString

    return reversedString
  • ?
    reversedString = ''
    이게 뒤집는다는 뜻인가?
# work2.module.py

import work2

userInputStr = input('문자열 입력: ')
reversedString = work2.reverseStr(userInputStr)
print(f'reversedString: {reversedString}')

-->
문자열 입력: asdfg
reversedString: gfdsa

0개의 댓글