본문 바로가기

PYTHON-BACK

#파이썬 기초 4일차_1

728x90

1. 함수

  • 함수란 특정 목적을 가진 코드의 집합
  • 독립적으로 호출될 수 있는 것을 의미함

  • 함수 선언 방법
def 함수이름(인자1, 인자2, ...):
    코드들
    return 결과값

 

  • 함수 선언의 예
  • 기본형태
def add_number(n1, n2):
      result = n1 + n2
      return result
answer = add_number(5, 10)
print(answer)

15

 

def add_text(t1, t2):
    print(t1 + t2)
text1 = '안녕하세요~'
text2 = '만나서 반갑습니다.'
add_text(text1, text2)

안녕하세요~만나서 반갑습니다.

 

  • 함수 호출 시 인자의 전달 순서 및 전달 인자 지정방법으로, 파이썬 같은 경우는 사용되는 이름을 지정해서 전달이 가능하다
add_text(text2, text1)

만나서 반갑습니다.안녕하세요~

add_text(t2=text2, t1=text1)

안녕하세요~만나서 반갑습니다.

  • 함수 선언 시 인자의 기본값 설정
def add_number(n1=100, n2=200):
    result = n1 + n2
    return result
result = add_number(20, 30)
print(result)

50

result = add_number()
print(result)

300

 

  • 함수 선언 시 인자의 기본값 설정할 때, 기본값이 설정된 인자는 뒤쪽에 위치해야 한다.
def add_number(n1=100, n2): # 이런식으 SyntaxError 발생 (n1, n2=100) 이렇게는 가능

 

  • 함수의 결과값 다중 반환 ( 다중 리턴 )
  • 처음부터 여러개의 값을 리턴해줄 수 있는데, 이름 한개만 하면 튜플형태, 이름 여러개면 제각각의 자리에 들어감

# 한개로 묶으면 튜플 형태

def reverse(x, y, z):
    return z, y, x
result = reverse(1, 2, 3)
print(result)
print(type(result))

(3, 2, 1)

<class 'tuple'>

print(result[2])

1

 

# 이름 여러개

r1, r2, r3 = reverse(1, 2, 3)
print(r1)
print(r2)
print(r3)

3

2

1

print(type(r2))

<class 'int'>

 

2. 모듈

  • 모듈, 패키지, 라이브러리 등 다양한 표현을 사용
  • 모듈 : 특정 기능을 한개의 파일 안에 넣어 구현해 놓은것
  • 패키지 : 이렇게 만들어진 파일들을 탐색기처럼 특정 폴더 구조를 만들어 폴더 구조속에 정렬해서 나눠 놓은것(계층화)
  • 라이브러리 : 이러한 폴더들을 많이 모아서 이와 관련된 패키지(특정 기능을 위한)를 다 모아 놓은 것

코랩 - content 안에 작업하는 파일 저장됨, 여기에 새 파일을 만들어서 여기에 여러가지 기능을 추가해서 그 파일에 구현해놓으면((예) a.py) 이렇게 만들면, 코랩에서 import a 이런식으로 불러올 수 있다.

import time # time이라는 모듈을 들고옴

print('2초간 프로그램을 정지합니다.')
print(time.localtime()) # 타임이라는 모듈 안에 것을 불러올때는 .(온점)을 사용함
start = time.time()

time.sleep(2)

end = time .time()
print(time.localtime())
print('2초가 지났습니다.')

print("총 소요시간: " , end-start)

2초간 프로그램을 정지합니다.
time.struct_time(tm_year=2024, tm_mon=7, tm_mday=2, tm_hour=0, tm_min=48, tm_sec=31, tm_wday=1, tm_yday=184, tm_isdst=0)
time.struct_time(tm_year=2024, tm_mon=7, tm_mday=2, tm_hour=0, tm_min=48, tm_sec=33, tm_wday=1, tm_yday=184, tm_isdst=0)
2초가 지났습니다.
총 소요시간:  2.001476526260376

# 현재 구글 코랩서버가 위치한 곳 시각을 가져온것

 

import time

print('5초간 프로그램을 정지합니다.')
now = time.localtime()
print('%04d/%02d/%02d %02d:%02d:%02d' % (now.tm_year, now.tm_mon, now.tm_mday,
                                         now.tm_hour, now.tm_min, now.tm_sec))

time.sleep(5)

now = time.localtime()
print('{}/{}/{} {}:{}:{}'.format(now.tm_year, now.tm_mon, now.tm_mday,
                                 now.tm_hour, now.tm_min, now.tm_sec))
print('5초가 지났습니다.')

5초간 프로그램을 정지합니다.
2024/07/02 00:49:21
2024/7/2 0:49:26
5초가 지났습니다.

 

  • format 이용해서 적절하게 정리
print('{5}/{2}/{0} {1}:{3}:{4}'.format(now.tm_year, now.tm_mon, now.tm_mday,
                                 now.tm_hour, now.tm_min, now.tm_sec))

26/2/2024 7:0:49

  • 모듈 임포트
  • 이처럼 모듈에 별명을 붙여서 사용 가능하다
import time as

now = t.localtime()
print('%04d/%02d/%02d %02d:%02d:%02d' % (now.tm_year, now.tm_mon, now.tm_mday,
                                         now.tm_hour, now.tm_min, now.tm_sec))
 
  • time 이라는 것부터 sleep을 임포트 해온다
from time import sleep
print("start")
sleep(5)
print("end")

 

 
from time import sleep as s
print("start")
s(5)
print("end")

 

 

3. 클래스

  • 클래스
    • 객체를 선언하기 위한 자료구조로서의 틀
    • 파이썬에서는 Name Space라고 표현
    • 클래스는 객체를 선언하기 위한 틀이므로 그 자체로는 사용할 수 없음. 인스턴스 객체를 생성하여 사용
  • 멤버(멤버변수, 클래스멤버, 클래스 변수) - 클래스 내부의 전역변수 역할
    • 클래스의 내부에서 변수의 역할을 담당하는 것으로 메소드의 밖에서 정의
  • 메소드 - 메소드 안에서 만들어 놓은 변수는 지역변수 역할(벗어나면 사라짐)
    • 클래스의 내부에서 함수의 역할을 담당하는 것을 말한다

# 파이썬에서는 다른언어들 처럼 파라미터를 클래스이름 뒤에 붙이지 않고 __init__에 넣게됨

클래스이름() -괄호는 상속을 할때 이용, 상속 안할때는 사용하지 않는다.

class MyClass: # 클래스 클래스이름
    var = '안녕하세요'

    def sayHello(self): # 메소드 함수, self는 클래스 자체를 의미(여기서는 MyClass), 외부에서 호출시 사용안함
        print(self.var)
obj = MyClass()  # obj라는 인스턴스 객체를 만들어서 사용
print(obj.var)
obj.sayHello()

안녕하세요

안녕하세요

 

일반적인 클래스에는 초기화를 할때 사용하는 __init__이 사용됨

 

  • 생성자

__ 는 외부에서 접근 못하게하는 맹글링 기법을 사용하는 것

완전하게 막혀있는 것은 아님

class MyClass2:
    def __init__(self): # 파이썬은 __init__ 뒤()부분에 파라미터가 들어감
        self.var = "안녕하세요"
        print("MyClass2 인스턴스 객체가 생성되었습니다.")
obj = MyClass2()

MyClass2 인스턴스 객체가 생성되었습니다.

print(obj.var)

안녕하세요

  • 소멸자 - 파이썬 개발자들은 잘 쓰지 않음
class MyClass3:
    def __init__(self):
        self.var = "안녕하세요"
        print("MyClass3 인스턴스 객체가 생성되었습니다.")

    def __del__(self):
        print("MyClass3 인스턴스 객체가 메모리에서 제거됩니다.")
obj = MyClass3()

MyClass3 인스턴스 객체가 생성되었습니다.

del obj

MyClass3 인스턴스 객체가 메모리에서 제거됩니다.

  • 상속
  • 파이썬에서는 여러개 다중 상속도 간단하게 해결 가능함
class Add:
    def add(self, n1, n2):
        return n1 + n2
class Calculator(Add): # 상속 받으면 Add 클래스의 모든 내용을 사용가능해짐
    def sub(self, n1, n2):
        return n1 - n2
obj = Calculator()
print(obj.sub(10,5))

5

print(obj.add(1, 2))
print(obj.sub(1, 2))

3

-1

 

  • 다중 상속
class Add:
    def add(self, n1, n2):
        return n1 + n2

class Multiply:
    def multiply(self, n1, n2):
        return n1 * n2

class Calculator(Add, Multiply):
    def sub(self, n1, n2):
        return n1 - n2
obj = Calculator()
print(obj.add(1, 2))
print(obj.multiply(3, 2))
print(obj.sub(1, 2))

3

6

-1

 

클래스는 독립적인것 이므로 해당 클래스 안 함수에서는 같은 변수이름을 많이 사용해도 가능하다.

 

 

4. 표준 라이브러리

  • 파이썬 자체에서 내장된 라이브러리

4-1 math 모듈

  • 정밀한 계산을 위한 복잡한 수학 연산 라이브러리
  • 삼각함수, 제곱근 등
  • numpy 모듈이 더 성능이 잘 나옴(일반적으로 효율이 더 좋음)
import math

print(math.sin(math.radians(45))) #45도(라디안 이용)
print(math.sqrt(2)) # 루트 2
print(math.factorial(5)) # 5 팩토리얼

0.7071067811865475
1.4142135623730951
120

 

4-2 random 모듈

  • 난수 생성 기능, 어떤 수가 나올지 예측할 수 없는 무작위 동작 구현
  • 컴퓨터는 랜덤값을 못만드니, 유사적으로 랜덤가 비슷한 값을 만들어 내는것임
  • 랜덤을 이용하면 재현을 못하지만 유사 랜덤을 이용해서 시드값을 고정해서 다시 재현 가능하게 만들 수 있다.
  • 이를 활용해서 머신러닝 분야에서 많이 사용가능함 (seed값 이용)
import random

for i in range(5):
  print(random.random())

0.9376348239911239
0.7440464120306061
0.24369023142056156
0.6186899098443004
0.024043274640657475

import random

for i in range(5):
  print(random.randint(1, 10)) # 정수값을 가져오는 랜덤 randint

6

5

7

5

8

import random

# randrange()를 사용해서 0~100 사이의 숫자 생성하기
print ("Random number from 0~100 is : ",end="")
print (random.randrange(100))

Random number from 0~100 is : 10

# randrange()를 사용해서 50~100 사이의 숫자 생성하기
print ("Random number from 50~100 is : ",end="")
print (random.randrange(50,100))

Random number from 50~100 is : 59

# randrange()를 사용해서 50~100 사이의 숫자를 5 간격을 기준으로 생성하기
print ("Random number from 50~100 skip 5 is : ",end="")
print (random.randrange(50,100,5))

Random number from 50~100 skip 5 is : 90

 

리스트에서 랜덤 값 가져오기

# 리스트에서 랜덤으로 값 가져오기
list1 = [1, 2, 3, 4, 5, 6]
print(random.choice(list1))

1

 

문자열에서 랜덤 값 가져오기

# 문자열에서 랜덤으로 값 가져오기
string = "striver"
print(random.choice(string))

 

셔플

  • AI 모델 적용시 학습용 데이터를 가지고 분류할때  데이터를 크기만큼 자르는것이 좋다,
  • 이때 정렬되어있음 학습용은 작은데이터들만 사용되고 검증 데이터는 큰것만 사용되므로 셔플을 이용해서
  • 데이터를 섞어준 다음 데이터를 잘라서 사용해서 검증 데이터 성능을 올리는 용으로 사용
  • 정보의 편중을 피할때 많이 사용된다.
# 리스트 정의
sample_list = ['A', 'B', 'C', 'D', 'E']
print("Original list : ")
print(sample_list)

Original list :

['A', 'B', 'C', 'D', 'E']

# 첫 번째 셔플(섞기)
random.shuffle(sample_list)
print("\nAfter the first shuffle : ")
print(sample_list)

After the first shuffle :

['E', 'B', 'D', 'C', 'A']

# 두 번째 셔플(섞기)
random.shuffle(sample_list)
print("\nAfter the second shuffle : ")
print(sample_list)

After the second shuffle :

['D', 'A', 'C', 'B', 'E']

 

리스트 샘플링

# 리스트로부터 길이 3의 랜덤 아이템으로 구성된 리스트를 샘플링하여 출력
list1 = [1, 2, 3, 4, 5, 6]
print("With list:", random.sample(list1, 3))

With list: [5, 4, 3]

# 문자열로부터 길이 4의 랜덤 아이템으로 구성된 리스트를 샘플링하여 출력
string = "GeeksforGeeks"
print("With string:", random.sample(string, 4))

With string: ['k', 'G', 'e', 's']

# 튜플로부터 길이 4의 랜덤 아이템으로 구성된 리스트를 샘플링하여 출력
tuple1 = ("ankit", "geeks", "computer", "science",
                   "portal", "scientist", "btech")
print("With tuple:", random.sample(tuple1, 4))

h tuple: ['geeks', 'btech', 'portal', 'ankit']

 

집합 Set

# set(집합)으로부터 길이 3의 랜덤 아이템으로 구성된 리스트를 샘플링하여 출력
set1 = {"a", "b", "c", "d", "e"}
print("With set:", random.sample(set1, 3))

With set: ['b', 'd', 'a']
<ipython-input-53-ddc19f7482a1>:3: DeprecationWarning: Sampling from a set deprecated
since Python 3.9 and will be removed in a subsequent version.
  print("With set:", random.sample(set1, 3))

# Deprecation은 얼마 지나지 않아서 없어질 것이다라는것, 다른것을 이용하라는것

 

Seed : seed값을 고정한 것에 대해서 랜덤값이 동일하게 나옴

import random

for i in range(5):
    random.seed(9999)
    print(random.randint(1, 1000))

855

855

855

855

855

 

5. sys 모듈

  • 파이썬 해석기가 실행되는 환경과 해석기의 여러 기능 조회 및 관리
  • 시스템의 환경정보 출력 가능
import sys

print("버전:", sys.version)
print("플랫폼:", sys.platform)

버전: 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]

플랫폼: linux

if sys.platform == "win32":
  print(sys.getwindowsversion())
print("바이트 순서:", sys.byteorder)
print("모듈 경로:", sys.path)

바이트 순서: little

모듈 경로: ['/content', '/env/python', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages', '/usr/local/lib/python3.10/dist-packages/IPython/extensions', '/root/.ipython']

!pwd  # 리눅스 명령어 : 현재경로 위치

/content

%cd sample_data # 위치 이동

/content/sample_data

 

6. os 모듈

  • 운영체제와 관련된 기능을 가진 모듈
  • 새로운 폴더 만들거나 폴더 내부 파일 목록을 보는 등의 기능을 제공
import os

# 기본 정보 출력
print("현재 운영체제:", os.name)
print("현재 폴더:", os.getcwd())
print("현재 폴더의 내부 요소:", os.listdir())

현재 운영체제: posix
현재 폴더: /content/sample_data
현재 폴더의 내부 요소: ['anscombe.json', 'README.md', 'mnist_train_small.csv', 'california_housing_train.csv', 'california_housing_test.csv', 'mnist_test.csv']

# 폴더 생성
os.mkdir("hello")
# 폴더 삭제
os.rmdir("hello")

 

  • "w" 쓰기 모드

with블럭 안에서만 참조를 함, with를 통해서 파일을 열었을 경우 따로 파일 닫지 않아도 스스로 닫아줌

# 파일 생성
with open("original.txt", "w") as file:
  file.write("hello")

# 파일명 변경
os.rename("original.txt", "new.txt")

  • 시스템 명령어 실행
    • Unix/Linux 계열은 Windows 계열과 명령어에 대한 결과가 다름
    • Unix에서 반환 값은 두 개의 서로 다른 정보를 포함하는 16비트 숫자이며, 여기에서의 결과 0은 오류가 없음을 의미함
      • 여기에서는 16비트 숫자로, 로우 바이트가 프로세스를 종료한 신호 번호이고 하이 바이트가 종료 상태(신호 번호가 0인 경우)를 의미함
# 시스템 명령어 실행
os.system("dir")

0  # 오류없이 동작했다

 

7. time 모듈

  • 날짜와 시간 관련 기능 제공
    • 기본적으로 유닉스 시간을 기준으로 함
import time
print(time.time())

1719894549.139058

# 일상 시간 문자열로 변환 가능
t = time.time()
print(time.ctime(t))

Tue Jul 2 04:30:06 2024

# 실행 시간 측정
start = time.time()

for a in range(100):
  print(a)

end = time.time()
print(end - start)

0~99 까지 출력하고

0.0519256591796875 

 

8. urllib 모듈

  • URL을 다루는 라이브러리
  • urlopen() 함수 : URL 주소의 페이지 열기
  • 웹페이지 소스코드 활용할 때 이용
from urllib import request

target = request.urlopen("https://google.com")
output = target.read()

print(output)

구글 소스코드 출력

 

10. calendar 모듈

  • 달력 기능
  • 인수로 받은 연도의 달력 객체 반환
  • month 함수
    • 연도와 달을 인수로 받아 해당 월 달력 객체 반환
  • weekday 함수
    • 특정 날짜가 어떤 요일인지 조사
  • 우리가 일반적으로 사용하는 달력은 그레고리안을 사용함
import calendar

print(calendar.calendar(2024)) # 2024년 전체
print(calendar.month(2024, 7)) # 7월 달력만

 

 

728x90

'PYTHON-BACK' 카테고리의 다른 글

#파이썬 기초 5일차_1  (1) 2024.07.03
#파이썬 기초 4일차_2  (1) 2024.07.02
#파이썬 기초 3일차  (1) 2024.07.01
#파이썬 기초 2일차  (0) 2024.06.28
#파이썬 기초 1일차  (0) 2024.06.27