파이썬 및 Git

·2022년 9월 14일
0

TIL

목록 보기
7/46

Class 복습

  • 클래스 기본 구조
class CookieFrame(): # CookieFrame이라는 이름의 class 선언
    def set_cookie_name(self, name):
        self.name = name

cookie1 = CookieFrame()
cookie2 = CookieFrame()

cookie1.set_cookie_name("cookie1") # 메소드의 첫 번째 인자 self는 무시된다.
cookie2.set_cookie_name("cookie2")

print(cookie1.name) # cookie1
print(cookie2.name) # cookie2
  • 과제 복습
class Profile():
    def set_profile(self, set_profile):
        self.name = set_profile['name']
        self.gender = set_profile['gender']
        self.birthday = set_profile['birthday']
        self.age = set_profile['age']
        self.phone = set_profile['phone']
        self.email = set_profile['email']

    def get_name(self):
        return f"{self.name}"

    def get_gender(self):
        return f"{self.gender}"

    def get_birthday(self):
        return f"{self.birthday}"

    def get_age(self):
        return f"{self.age}"

    def get_phone(self):
        return f"{self.phone}"

    def get_email(self):
        return f"{self.email}"

profile = Profile()
profile.set_profile({
    "name": "lee",
    "gender": "man",
    "birthday": "01/01",
    "age": 32,
    "phone": "01012341234",
    "email": "python@sparta.com",
}
)

print(profile.get_name())
print(profile.get_gender())
print(profile.get_birthday())
print(profile.get_age())
print(profile.get_email())

mutable 자료형과 immutable 자료형

  • mutable: 값이 변한다 / immutable: 값이 변하지 않는다
  • immutable: int, float, str, tuple
  • mutable: list, dict
immutable = "String is immutable!!"
mutable = ["list is mutable!!"]
 
string = immutable
list_ = mutable

string += " immutable string!!"
list_.append("mutable list!!")

print(immutable)
print(mutable)
print(string)
print(list_)

# result print
"""
String is immutable!!
['list is mutable!!', 'mutable list!!']
String is immutable!! immutable string!!
['list is mutable!!', 'mutable list!!']
"""

Git 복습

Git은
1) 프로젝트의 버전 관리를 위한 도구: 버전 - 'commit' 할 때마다 변경되는 모습, 상태 등. history 등을 통해 변경 사항 확인
2) 작업 단위 나누기 가능
3) 협업해서 하나의 프로젝트를 만드는데 유용

Github는
Git 원격 저장소 + Git으로 할 수 있는 커뮤니티 기능 서비스
=> Git으로 된 프로젝트 저장 공간을 제공하고, Git을 편하게 사용하기 위한 부가기능

  • sourcetree는 Git 도구
  • 터미널에 명령어를 입력해 깃을 이용하는 경우" CLI

순서
1) 폴더 생성 - 파일 생성
2) 소스트리 - 로컬 저장소 추가하기

  • mac 숨김파일 보기: com + shift +.

프로젝트 없애기: 소스트리에서 '로컬' - 프로젝트 선택 후 우클릭 -'삭제'
휴지통 이동: 컴퓨터에서도 파일 삭제

  • 소스트리 창이 뜨지 않는다면
    상단 메뉴바 - 창 - 저장소 브라우저 보기 클릭

👉 add(staging) 를 사용하면, 컴퓨터에서 여러 파일을 수정했어도 '기능 A 수정' 에 관련된 파일만 골라서 commit 할 수 있다

  • 내가 기록할 작업 내역이 무엇인지 생각하고,
  • 관련된 파일만 add 해서
  • 작업내역을 나타내는 commit 메시지 적기

원격 repo

Git으로 관리되는 프로젝트' 를 Git 에서는 repo(리포, repository 리포지토리의 약자) 라고 부름

  • 내 컴퓨터에 저장되어있는 리포토지를 로컬 repo
  • Github 처럼 다른 곳에서 접속할 수 있는 공간에 저장되어있는 것을 원격 repo
  • 로컬 repo 가 원격 repo 를 연결하는 것을 추적(Tracking, 트랙킹 / branch tracking)
  • 로컬 repo 의 commit 들을 원격 repo 에 반영하는 것을 push(푸쉬)
  • 원격 repo 의 commit 들을 로컬 repo 에 반영하는 것을 pull(풀)
  • repo 지우기
    Github 로그인 후 repo 페이지 - setting - options - Danger Zone 'Delete this repository'

정리
1. 원격 repo 와 로컬 repo 의 상태를 똑같이 맞춰주기, 즉 로컬 repo 에 원격 repo 작업내역 가져오기 (pull)
2. 로컬 repo 의 작업 내용을 저장하고 (commit)
3. 원격 repo 에 로컬 repo 내용을 반영 (push)

clone
:원격 repo를 내 컴퓨터에 가져오기
1) 복제할 repo의 url 복사
2) 소스트리 - 새로 만들기 - url에서 복제
3) 목적지 경로: 연결 원하는 내 컴퓨터 폴더 선택
4) '클론'

작업 방식

1) 누가 이 작업을 할 것인지 - Issue
2) 각자 맡은 것을 작업한다 - Branch
3) 각자의 작업을 프로젝트에 합친다 - Merge

  • 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다 (PR 후 merge)

🔥 협업할 때는 pull 먼저 받고 push하기

오늘 수업에서 배운 것

  1. try / exception을 활용한 에러 처리
number = "num"

try: # try 구문 안에서 에러가 발생할 경우 except로 넘어감
    number = int(number) # "num"을 숫자로 바꾸는 과정에서 에러 발생
except: # 에러가 발생했을 때 처리
    print(f"{number}은(는) 숫자가 아닙니다.")
  • 에러 종류에 따라 다른 로직 처리
number = input()

try:
    int(number)
    10 / number

except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
    print(f"{number}은(는) 숫자가 아닙니다.")
    
except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
    print("0으로는 나눌수 없습니다.")
    
except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
    print(f"예상하지 못한 에러가 발생했습니다. error : {e}")
  1. stacktrace의 이해
    : 에러가 발생했을 때 에러가 발생 한 위치를 찾아내기 위해 호출 된 함수의 목록을 보여주고 개발자는 stacktrace를 따라가며 에러가 발생한 위치를 추적할 수 있다.
  • 에러 예제
def 집까지_걸어가기():
    print(error) # 선언되지 않은 변수를 호출했기 때문에 에러 발생

def 버스_탑승():
    집까지_걸어가기()

def 환승():
    버스_탑승()

def 지하철_탑승():
    환승()

def 퇴근하기():
    지하철_탑승()

퇴근하기()

"""
Traceback (most recent call last):
  File "sample.py", line 17, in <module>
    퇴근하기()
  File "sample.py", line 15, in 퇴근하기
    지하철_탑승()
  File "sample.py", line 12, in 지하철_탑승
    환승()
  File "sample.py", line 9, in 환승
    버스_탑승()
  File "sample.py", line 5, in 버스_탑승
    집까지_걸어가기()
  File "sample.py", line 2, in 집까지_걸어가기
    print(error)
NameError: name 'error' is not defined. Did you mean: 'OSError'?
"""
  1. 축약식
    : 긴 코드를 간략하게 줄일 수 있지만, 남용할 경우 가독성이 떨어지기 때문에 필요할 때만 사용. list, set, tuple, dict 자료형이 축약식을 지원.
  • list / tuple / set 축약식 활용법
# 기본적인 활용 방법
# [list에 담길 값 for 요소 in 리스트]
numbers = [x for x in range(5)] # [0, 1, 2, 3, 4]

# 조건문은 축약식 뒷부분에 작성하며, 축약식이 True인 경우 list에 값이 담긴다.
even_numbers = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]

# 아래와 같이 활용할 수도 있다.
people = [
    ("lee", 32),
    ("kim", 23),
    ("park", 27),
    ("hong", 29),
    ("kang", 26)
]

average_age = sum([x[1] for x in people]) / len(people)
print(average_age) # 27.4

#list 축약식의 []를 ()혹은 {}로 바꿔주면 tuple, set 축약식을 사용하실수 있습니다.
  • dictionary
# dictionary 축약식의 구조는 list와 동일하지만, key / value 형태로 지정해야 합니다.
people = [
    ("lee", 32, "man"),
    ("kim", 23, "man"),
    ("park", 27, "woman"),
    ("hong", 29, "man"),
    ("kang", 26, "woman")
]

people = {name: {"age": age, "gender": gender} for name, age, gender in people}
print(people)

# result print
"""
{
    'lee': {'age': 32,
             'gender': 'man'},
    'kim': {'age': 23,
             'gender': 'man'},
    'park': {'age': 27,
             'gender': 'woman'},
    'hong': {'age': 29,
             'gender': 'man'},
    'kang': {'age': 26,
             'gender': 'woman'}
 }
"""
  1. lambda / map / filter / sort 활용하기
  • map, lambda 예)
# map은 함수와 리스트를 인자로 받아 리스트의 요소들로 함수를 호출해줍니다.
string_numbers = ["1", "2", "3"]
integer_numbers = list(map(int, string_numbers))
print(integer_numbers) # [1, 2, 3]

# map 함수를 사용하지 않는 경우 아래와 같이 구현할 수 있습니다.
string_numbers = ["1", "2", "3"]
integer_numbers = []

for i in string_numbers:
    integer_numbers.append(int(i))

print(integer_numbers) # [1, 2, 3]

# list 축약식으로도 동일한 기능을 구현할 수 있습니다.
# map과 list 축약식 중 어떤걸 써야 할지 고민된다면 이 글을 읽어보시는것을 추천합니다.
string_numbers = ["1", "2", "3"]
integer_numbers = [int(x) for x in string_numbers]
print(integer_numbers) # [1, 2, 3]


# map 함수와 lambda 함수를 함께 사용하면 더 다채로운 기능을 구현할 수 있습니다.
numbers = [1, 2, 3, 4]
double_numbers = list(map(lambda x: x*2, numbers))
print(double_numbers) # [2, 4, 6, 8]
  • filter 함수 사용
# filter 함수는 map과 유사한 구조를 가지고 있으며, 조건이 참인 경우 저장합니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]

even_numbers = list(filter(lambda x: x%2 == 0, numbers))
print(even_numbers) # [2, 4, 6, 8]

# filter 함수 또한 list 축약식으로 동일한 기능을 구현할 수 있습니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]

even_numbers = [x for x in numbers if x%2 == 0]
print(even_numbers) # [2, 4, 6, 8]
  • sort: 순서대로 정렬
# sort 함수를 사용하면 list를 순서대로 정렬할 수 있습니다.
numbers = [5, 3, 2, 4, 6, 1]
numbers.sort()
print(numbers) # [1, 2, 3, 4, 5, 6]

# sort와 lambda 함수를 같이 사용하면 복잡한 구조의 list도 정렬할 수 있습니다.
people = [
    ("lee", 32),
    ("kim", 23),
    ("park", 27),
    ("hong", 29),
    ("kang", 26)
]

# 나이 순으로 정렬하기
people.sort(key=lambda x: x[1])
print(people)

# result print
"""
[
    ("kim", 23),
    ("kang", 26),
    ("park", 27),
    ("hong", 29),
    ("lee", 32)
]
"""

0개의 댓글