0. 개요

오늘 계속 미루고 미뤄왔던 파이썬 4~5주차의 강의 내용을 정리해보려고 한다. (+문제 푼거 일부 정리)


1. 파이썬 4주차 강의 정리 (심지어 1번 다시 들었다.)

 1) 파이썬 함수

  내용
개념 함수 = 입력을 받아 원하는 처리를 출력하여 내보내는 일련의 작업을 수행하는 코드블록

특정한 기능을 수행하기 위해서 코드를 논리적으로 그룹화하여 재사용 가능한 형태로 정의합니다.
필요성 1. 코드 재사용 : 반복되는 코드를 함수로 정의해 여러 곳에 재사용
2. 모듈화 : 프로그램을 여러 개의 작은 모듈로 나눠 개발 및 관리 가능
3. 유지 보수 용이성 : 함수는 각가의 기능을 독립적으로 정의 ➡️ 수정이나 확장이 필요할 시, 해당 함수로만 수정하면 된다
4. 가독성 향상 : 코드의 의도를 명확하게 표현, 복잡한 작업을 함수로 분해해 이해하기 쉽게 만듬

함수를 쓰는 방법

def '함수이름'(매개변수 1, 매개변수 2, ...):
  #함수 내부에서 수행할 작업
  return 결과값  ## (선택적 함수의 결과를 반환) 어디로? 외부로
----------------------------------------
def --> 이 함수를 정의하겠다 라는 의미 '함수이름'(매개변수 1, 매개변수 2, ...):

 

함수 호출 방법

결과 = 함수이름(인수1, 인수2, ...)

예시로 들어보자면, 지난번 프로그래머스에 풀었던 알고리즘 문제로 한번 해보려고 한다.

def solution(num1, num2):
    answer = num1 - num2
    return answer
------------------------
num1 = 1, num = 2

def solution #함수명 (num1 #매개변수, num2 #매개변수)
  answer = num1 - num2 #함수 내부에서 수행할 작ㅇ버
  return answer  ##반환할 값
  
print(answer) ## 값은 3 출력

 2) 전역변수 와 지역변수

  내용
전역 변수 1. 정의 = 프로그램 전체에서 접근 가능한 변수(어디서나 사용 가능함)
2. 전역변수는 프로그램이 시작될 때 생성 / 프로그램이 종료될 때까지 메모리에 유지
3. 여러 함수의 공통적으로 사용되는 값을 저장할때 유용
4. 너무 많은 전역 변수는 코드의 가독성을 떨어뜨리고 ,디버깅을 어렵게함
지역 변수 1. 정의 = 특정한 범위(ex. 함수 내부) 에서만 접근 가능한 변수(해당 변수를 벗어나면 사용 불가능)
2. 지역 변수는 해당 범위에서만 생성, 벗어나면 메모리에서 제거
3. 함수 내에서 정의된 변수는 해당 함수 내에서만 사용 가능한 지역 변수
4  함수 내에서만 사용, 해당 함수에서만 유효하고 다른 함수나 코드 블록에서 사용 불가능
5. 함수가 실행될 때 생성되고, 함수가 종료되면 메모리에서 제거(메모리 관리에 효율적)
## 전역변수 코드 예시
전역변수 = 10

def 전역변수 찾기():
    print("전역변수 접근:",전역변수)

전역변수 찾기()  # 출력: 전역변수 접근: 10
## 지역변수 예시
def 지역변수 찾기():
    지역변수 = 20
    print("지역변수 접근:", 지역변수)

지역변수 찾기()  # 출력: 지역변수 접근: 20
# 함수 내에서 전역변수를 수정하는 예시
x = 10

def modify_global():
    global global_var ##global 을 사용해서 
    전역함수 = 30
    print("함수 내에서 수정된 전역변수:", global_var)

modify_global()  # 출력: 함수 내에서 수정된 전역변수: 30
print("수정된 전역변수 확인:", global_var)  # 출력: 수정된 전역변수 확인: 30

3) 인수와 매개변수

 
인수 1. 정의 = 함수를 정의할 때 함수가 받아들이는 값을 지정하는 변수
2. 함수의 헤더 부분에서 매개변수가 정의, 함수 내부에서 사용
3. 매개변수를 정의하고, 함수가 호출될 때 매개변수에 해당하는 값을 전달
매개변수
(= 전달인자)
1. 정의 = 함수를 호출할 때 함수에 전달되는 값
2. 함수를 호출할 때 전달되는 실제 값으로, 함수를 호출할 때마다 다를 수 있다
3. 매개 변수에 전달 되는 값, 해당 값은 함수 내부에서 매개변수로 사용
# 매개변수(parameter) 예시
def 사용할 함수(매개변수) 
   print(1,매개변수,2)

사용할 함수(매개변수 --> 인수)

4) 위치 인수와 키워드 함수

  내용
위치인수 1. 위치 전달 인수 = 함수 정의에서 매개변수(parameter)의 위치에 따라 전달되는 인수
2. 함수의 매개변수에 순서대로 매핑
3. 함수 호출 시 위치 전달이수는 매개변수의 위치에 따라 전달'

순서에 따라서 값이 정해진 곳에 옮겨지는 것
키워드 인수 1. 함수를 호출할 때, 인수 순서대로 전달하는 대신 특정 매개변수에 값을 할당해 전달하는 함수
 ## 기본값 세팅 def 함수(매개변수 = '값') 을 넣으면 해당 값이 기본 변수

5) 가변 인수

  내용
가변인수 여러개들의 인수를 받을 수 있는 함수를 사용하기 위해서 사용하는 인수
*args  / **kwargs 를 사용한다.
*args 함수를 호출할 때, 임의의 개수와 위치인수를 전달
**kwargs 함수를 호출할 때, 임의의 개수의 키워드 인수를 전달

1) 파일 확장자

  내용
CSV CSV 파일 (Comma Separated Values) 데이터를 , 로 구분하여 저장하는 형식의 파일
엑셀파일 MicroSoft Excel 형식의 파일
JSON JavaScript Object Notation 약자, 데이터를 저장하는 간단한 형식
TXT 파일 일반 텍스트로 된 데이터를 저장하는 파

2) pandas

pandas 란 파이썬 데이터 분석에 사용하는 라이브러리 함수입니다.

import pandas as pd
df - pd.read_csv('file.csv')

import pandas as pd
df - pd.read_excel('file.xlsx')

import pandas as pd
df = pd.read_json('file.json')

import pandas as pd
df = pd.read_csv('file.txt', delimiter='\t')
# 만약 탭으로 구분되어 있다면 delimiter='\t'를 사용합니다.

3) 패키지

   
pandas 데이터 조작과 분석을 위한 라이브러리, 데이터를 효과적으로 분석하고 조작할 수 있게 한다.
numpy 과학적 계산을 위한 라이브러리, 다차원 배열과 행렬 연산 지원
matplotib 데이터 시각화를 위한 라이브러리, 다양한 그래프와 플롯을 생성
seaborn 통계용 데이터 시각화 라이브러리, 보다 간편하고 아름다운 시각화 제공
scikit-learn 머신 러닝 알고리즘라이브러리 - 분류, 회구, 군집화, 차원,축소 등 다양한 머신 러닝 기법 제공
statsmodels 통계분석을 위한 라이브러리, 회귀분석 / 시계열 분석 / 비모수 통계 등 다양한 통계기법 제공
scipy 과학기술 및 수학적인 연산을 위한 라이브러리 - 다양한 과학 및 공학 분야에서 활용
(선형대수, 최적화, 신호 처리, 통계 분석 등) 다양하게 사용
tensorflow 딥러닝 및 기계학습을 위한 오픈소스 라이브러리
- 그래프 기반의 계산을 통하 수치를 계산 하고 수행(신경망 구축 및 학습)
pytorch 딥러닝을 위한 오픈소스 라이브러리 - 동적 계산 그래프를 사용해 신경망을 구축하고 학습

4) 포맷

 - f-string 포맷팅 = 직관적으로 하나의 줄로 얘기할 수 있게 해주는 함수

x = 10
print(f"변수 x의 값은 {x}입니다.") ##f-string
print("변수 x의 값은 {}입니다.".format(x))
print("변수 x의 값은 %d입니다."% (x))

5) 리스트 컴프리헨션

리스트를 간결하게 생성하는 방법
반복문과 조건문을 사용하여 리스트를 생성할 때 사용한다. ➡️ 간결하고 가독성 있는 코드
데이터 처리 및 변환에 유용하게 활용할 수 있는 기능

#형식
[표현식 ㄹfor 항목 in iterable if 조건문]

# 예시: 1부터 10까지의 숫자를 제곱한 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares)  # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 예시: 리스트에서 짝수만 선택하여 제곱한 리스트 생성
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # 출력: [4, 16, 36, 64, 100]

# 예시: 문자열 리스트에서 각 문자열의 길이를 저장한 리스트 생성
words = ["apple", "banana", "grape", "orange"]
word_lengths = [len(word) for word in words]
print(word_lengths)  # 출력: [5, 6, 5, 6]

# 예시: 리스트 컴프리헨션을 중첩하여 2차원 리스트 생성
matrix = [[i for i in range(1, 4)] for j in range(3)]
print(matrix)  # 출력: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

6) lambda

람다 함수(lambda function) 익명함수, 이름없이 정의되는 간단한 함수
#lambda 를 사용해서 함수를 구성함

  def lambda
정의 명시적으로 함수를 정의 익명 함수를 간단하게 정의
구조 여러 줄의 코드 블록을 가질 수 있음 한 줄로 표현되는 간단한 표현식만을 포함
이름 함수의 이름을 지정하여 호출 가능 이름이 없기에 한 번만 사용
or
임시로 필요한 경우에 사용
사용 어떠한 경우에도 사용할 수 있음 매개변수로 받거나 함수를 반환하는 고차 함수
(함수형 프로그래밍)

 - 람다를 쓰면 좋은 이유
 (1) 간결성 : 간단한 연산이나 조작이 필요한 경우에 사용
 (2) 익명성 : 아름이 없기 때문에 임시로 필요한 경우에 사용 가능
 (3) 함수형 프로그래밍 : 함수를 값으로 취급하고 함수를 다루는 함수형 프로그래밍 패러다임에서 람다함수가 필요함
 (4) 가독성 : 간단한 표현식을 사용해 코드를 작성함 ➡️ 가독성이 향상
(예외 : 복잡한 기능이나 여러줄의 코드 는 람다 함수를 쓰는 것은 부적절함)


일단은 하기 전에 try excect 함수에 대해서 알아봤다. 

 

05-4 예외 처리

프로그램을 만들다 보면 수없이 많은 오류를 만나게 된다. 물론 오류가 발생하는 이유는 프로그램이 잘못 동작하는 것을 막기 위한 파이썬의 배려이다. 이번에는 파이썬에서 오류를 처리…

wikidocs.net

try: 
  ....
except [발생오류 [as 오류변수]]:
  ....

형식은 이건데 if 문이랑 사용해야하니까 좀 더 살펴보기로 했다.

여길 살펴보니 try: #if 함수 #elif except 요롷게 쓸수는 있었는데! 사실 그런거 모르겠다!

def simple_calculator(num1, num2, operator):
    # 여기에 코드를 작성하세요
    pass

# 테스트
print(simple_calculator(10, 5, '+'))  # 출력: 15
print(simple_calculator(10, 5, '-'))  # 출력: 5
print(simple_calculator(10, 5, '*'))  # 출력: 50
print(simple_calculator(10, 0, '/'))  # 출력: 'Cannot divide by zero'

이...게 기본 코드인데.. 일단 연산자 반환! 을 찾아보기로 했다.

def simple_calculator(num1, num2, operator):
 for i in operator:
      if i == '+':
        return num1 + num2
      elif i == '-':
        return num1 - num2
      elif i == '*':
        return num1 * num2
      elif i == '/':
        return num1 / num2
    pass

근데 이렇게 쓰면 갚은 나온다. 그런데.... num1/ num2 가 계산이 안되어질때가 있는데 그게 이렇게 나온다.

여튼 무조건 num1/ num2 가 계산이 안되는데, 이거 외에도 곱하기나 다른때에 또 divison vy zero 가 뜰수 있으니까. 좀... 다른 식을 참조했는데 그게 try except 구문이었다.

def simple_calculator(num1, num2, operator):
    try:
      if i == '+':
        return num1 + num2
      elif i == '-':
        return num1 - num2
      elif i == '*':
        return num1 * num2
      elif i == '/':
        return num1 / num2
    except:
       return 'Cannot divide by zero'
    pass

일단 이렇게 했는데.. 문제가 생겼따. + , = , * , / 가 들어갔을때 뭘 구분해야하는지 몰라서 걍 이렇게 뜬다.

뭐가 문젤까 하고 마크 튜터님과 대화하다가 그냥.. 처음 썼던거 포함해서 다시 넣었다.

def simple_calculator(num1, num2, operator):
  for i in operator:
    try:
      if i == '+':
        return num1 + num2
      elif i == '-':
        return num1 - num2
      elif i == '*':
        return num1 * num2
      elif i == '/':
        return num1 / num2
    except:
       return 'Cannot divide by zero'
    pass

반복문 for 변수 in operator 문구를 넣어주었다. 그제서야 num1 / num2 가 문제가 생길때 답이 생겼다.

저기 pass 를 어디다가 맞춰야할 지 몰라서 내내 오류 떠서 고생했다. 그래도 저기인거 보니까 다음번에 보려고 이렇게라도 기록해놔야지...


오늘은 영 컨디션이 안좋았다. 약먹고 잤는데 새벽 2시에 깨느라구... 그래서 더 컨디션이 나빠서 진도를 못나갔다... 언제 AdsP를 공부하지...? ㅜㅜ 곧 시험 접수던데... 아 빨리 최대한 파이썬도 해결해야겠다.

myo