[Python] TIL 함수, 클래스, 유용한 문법들

Sophie·2024년 10월 17일

[TIL] Python 2024-10-17

Python 함수

  • 함수
    • 머신러닝, 딥러닝도 하나의 거대한 함수

    • 데이터 처리 흐름을 하나의 함수로 묶어서 가능

    • 개념

      • 입력을 받아 원하는 처리를 한 후 출력을 내보내는 일련의 작업을 수행하는 코드 블록
    • 장점

      • 코드 재사용, 모듈화, 유지 보수 용이성, 가독성 향상
    • 기본 정의

      def 함수이름(매개변수1, 매개변수2 ...):
      	### 함수 기능 수행 코드 ###
      	return 결과값
    • 함수 호출

      result = 함수이름(인수1, 인수2 ...)
      # 인수 : 함수에 들어가는 입력 값
    • 예시)

      def char_frequency(string):
          freq_dict = {}
          for char in string:
              if char in freq_dict:
                  freq_dict[char] += 1
              else:
                  freq_dict[char] = 1
          return freq_dict
      
      char_frequency("It's the morning of the 4th day !")
      
      ### 아래처럼 출력됨 -> ###
      {'I': 1,
       't': 4,
       "'": 1,
       's': 1,
       ' ': 7,
       'h': 3,
       'e': 2,
       'm': 1,
       'o': 2,
       'r': 1,
       'n': 2,
       'i': 1,
       'g': 1,
       'f': 1,
       '4': 1,
       'd': 1,
       'a': 1,
       'y': 1,
       '!': 1}
  • 함수 심화
    • 전역변수 / 지역변수
      • 전역변수 (Global variables)
        • 프로그램 전체에서 접근 가능한 변수
      • 지역변수 (Local variables)
        • 특정한 범위 (예. 함수 내부) 에서만 접근 가능한 변수

          → 해당 범위를 벗어나면 메모리에서 사라짐

          *메모리 낭비를 줄임.

      • 연예인 (전역변수) ↔ 우리 (지역변수)
        • 우리는 연예인을 알지만, 연예인은 우리를 알지 못한다 ㅋㅋ 웃긴 비유여서 기록 🤭
    • 예시) image.png
      • 함수 내 에서 글로벌 변수 수정하려면, → global 글로벌변수명 = 수정할 값
  • ❗헷갈리는 용어 구분
    • 매개변수 vs 인수
      • 매개변수 (parameter)
        • 함수에 입력으로 전달된 값을 받는 변수
      • 인수 (arguments)
        • 함수를 호출할 때 전달하는 입력값
    • 예시)
      def greet(name): # -> name 이 매개변수
      	print("hello " + name + " -!")
      	
      greet("Alice") # -> Alice 가 인수
  • 위치인수 (Positional arguments)
    • 인자의 값이 함수의 매개변수에 순서대로 매핑됨
    • 예를 들어,
      • def greet(name, age) : … 이었으면
        호출할 때 greet(”영희”, 30) ← 와 같이 입력한 순서대로 매핑
  • 키워드 인수
    • 호출 시 매개변수를 직접 찝어서 입력할 수도 있음
    • 예를 들어,
      • def greet(name, age) : … 이었으면
        호출할 때 greet(age=30, name=”영희”)
        → 매개변수 많을 때는, 이렇게 하면 순서 상관이 없으므로 직접 키워드를 입력해서 인수를 넣기도 함.
  • 기본값 설정
    • 특정 매개변수에 기본으로 고정된 인수 값을 미리 적어둘 수도 있음
    • 예를 들어,
      • def greet(name=’Guest’, age=25): … → 이렇게 해두면 greet() → 하면, 기본으로 설정해둔 값이 나옴.
  • 가변인자
    • *args
      • '*' + arguments
      • 인자의 개수를 미리 정할 수 없을 때 사용
      • 여러 개의 인자를 하나의 튜플로 묶어서 함수에 전달함
      • 예시)
        def sum_numbers(*args):
        	total = sum(args)
        	print(f"들어온 인자들: {args}\n 총합: {total}")
        	return total
        	
        sum_numbers(1,2,3)
        
        ### 실제 출력 ->
        # print 찍은 것들이 먼저 두 줄 출력, 
        # 원래 함수 리턴값 마지막에 6 출력
        
        들어온 인자들: (1, 2, 3)
        총합: 6
        
        6
    • **kwargs
      • ** + keyword + arguments

      • 임의의 개수의 키워드 인자를 받음

      • 입력된 인자를 하나의 딕셔너리로 묶어 함수에 전달함

      • 예시)

        def print_info(**kwargs):
        	for key, value in kwargs.items():
        			print(f"{key}: {value}")
        
        print_info(name="Alice", age=30, country="Korea")
  • 함수 예시
    • 데이터 정규화 함수 만들기

      import pandas as pd
      import numpy as np
      
      # 예제 데이터 생성 (국어, 수학, 영어 점수)
      np.random.seed(42) # 난수 생성 고정되게 하기 위함. 아무 숫자나 들어가도 됨
      data = pd.DataFrame({
          'Korean': np.random.randint(50, 100, size=10),
          'Math': np.random.randint(40, 100, size=10),
          'English': np.random.randint(30, 100, size=10)
      })
      
      print("원본 데이터: ")
      print(data)
      
      # 함수
      def standardization(data):
          scaled_data = (data - data.mean()) / data.std()  # 표준화 수식 수정
          return scaled_data
      
      # 함수 호출 및 출력
      scaled_data = standardization(data)
      print("\n표준화된 데이터: ")
      print(scaled_data)
      

유용한 파이썬 문법들

  • json, txt 파일 열고 저장
# write & save json
import json

data = {
	'Name': ['John', 'Emily', 'Michael'],
	'Age' : [30, 25, 20],
	'City' : ['New York', 'Los Angeles', 'Seoul']
	}

output_path = '/!@#$/data.json'

# 'w' writing 쓰기 모드로 열고 ->
# json.dump 로 data 를 file 에 덮어씀
with open(output_path, 'w') as file:
    json.dump(data, file, indent=4)

print("JSON 파일이 생성되었습니다.")

######################################

# write & save txt
file_path = '!@#$/SpartaClub'

data = {
	'Name': ['John', 'Emily', 'Michael'],
	'Age' : [30, 25, 20],
	'City' : ['New York', 'Los Angeles', 'Seoul']
	}

with open(file_path + '/sample.txt', 'w') as file:
    for key, item in data.items():
        file.write(str(key)+" : "+str(item)+'\n')
        
print("Saved txt file")
  • 리스트 컴프리헨션 (List comprehension)
    • 반복문, 조건문 사용하여 리스트를 생성할 때 사용됨
    • 기본 구조
      [표현식 for 항목 in iterable]
      [표현식 for 항목 in iterable if 조건문]
    • 예시)
      image.png
  • lamda
    • 기본 구조 : 주로 한 줄로 표현되는 간단한 표현식만을 포함함

    • 예시)

      add = lambda x,y :x + y
      print(add(3,5))
      
      # 출력 
      # 8
  • glob
    • 파일 시스템에서 파일 찾을 때 사용

    • 파일 검색, 일치하는 파일 리스트 반환해줌

    • 예시)

      import glob
      
      file_list1 = glob.glob('*')
      print(f"file_list1: {file_list1}")
      
      file_list2 = glob.glob('*.txt')
      print(f"file_list2: {file_list2}")
      
      # 출력 
      file_list1: ['sample.txt', '파이썬_종합반_연습.ipynb']
      file_list2: ['sample.txt']
  • os
    • os 모듈은 운영 체제와 상호작용 하기 위한 여러 함수를 제공함

      • 파일 및 디렉토리, 경로, 환경 변수, 실행 관리 등
    • 예시)

      import os
      
      cwd = os.getcwd()
      print(cwd)
      
      os.mkdir('new_directory')
      
      os.remove('/test.csv')
      
      files = os.listdir('/content')
      
      path = os.path.join('/content','sample_data','test.csv')
  • split
    • 문자열 나누기

    • split(’기준_구분자’)

    • rsplit(’기준_구분자’, 오른쪽부터구분자순번)

      • e.g. rsplit(’/’, 1)
    • 실제 활용 예시)

      image.png

클래스

  • 클래스
    • 객체 지향 프로그래밍 (OOP) 의 중요한 개념 중 하나

    • 객체 지향 프로그래밍은 현실 세계의 사물을 모델링하여 프로그래밍하는 방법
      → 재사용성, 유지보수성 향상

    • 기본 구조

      class ClassName:
      	def __init__(self, parameter1, parameter2):
      			self.attribute1 = parameter1
      			self.attribute2 = parameter2
      			
      	def method1(self, parameter1, parameter2):
      			# 메서드 내용 작성
      			pass
    • init메서드
      : 클래스의 생성자
      → 객체가 생성될 때 호출되어 초기화 작업을 수행
      - 첫 번째 매개변수 self 는 반드시 사용
      → 해당 메서드가 속한 객체를 가리킴.

    • 클래스 내부의 매서드들
      : 클래스의 동작을 정의하는 함수

    • 예시)

      class Person:
          def __init__(self, name, age):
              self.name = name
              self.age = age
      
      person1 = Person("Alice", 30)
      person2 = Person("Bob", 25)
      
      print(person1.age)
      print(person2.age)
      
      # 출력
      # 30
      # 25

0개의 댓글