학습날짜: 2025.07.28 ~ 2025.07.29
🟩 Python Utility
1. Zip function
- 더 작은 인덱스를 가진 변수 기준에 맞춰 같은 인덱스를 가진 값들을 튜플로 묶음
- 인덱스를 기준으로 묶음으로 인덱싱할 수 있는 거라면(리스트, 문자열 등) 모두 packing 가능

2. Deep Copy vs Shallow Copy
- Shallow Copy
- 얕은 복사.
- immutable한 변수에서는 값이 수정되지 않기 때문에 복사 id 주소가 복사되는 것임.
- a = 10; a = b → a, b의 id 값이 같음
- b= 20 → b의 id 값이 a와 달라짐.
- mutable한 변수에서 문제가 생김.


- Deep Copy
- 깊은 복사.
- 객체 자체를 copy하는 것이 아닌 값만 복사해서 새 변수에 넣는 방식
- 따라서, 복사본을 수정해도 원본이 수정되지 않음
- import copy 필요

출력 값: ['a', 'b', 'c', 'd'] ['a', 'b', 'X', 'd']
3. List Comprehension
- 연속된 수 또는 문자열을 만들기 위해서 리스트 내부에서 loop를 돌리는 방식
- 패턴1. list = [ A for i in range(num) ]

- 패턴2. list = [ A for i in range(num) if 조건 ]

- 패턴3. list = [ A if 조건 else B for i in range(n) ]

4. Lambda Expressons : 이름이 없는 function
- 간단한 함수의 경우, Lambda를 사용하면 간편하고 간결하게 코드를 작성할 수 있음
def add(x, y):
return x + y
print(add(10, 20))
#위 함수를 lambda function 으로 수정해보기
f=lambda x,y: x+y
print(f(10,20))
#위 코드에서 특정 변수에 lambda함수를 넣지 않고 사용하는 방법
print((lambda x,y: x+y)(10,20))
#map 함수와 lambda 연계하기
#map(function, *iter)
#위의 x, y를 사용할 수 없으므로, 하나의 변수 x로 받은 후, index를 이용해서
#위 함수와 동일한 효과를 내게 만듬
# clone
x = ["1", "2", "3"]
list_x = list(map(int, x))
print(list_x)
# -------------------------
x = [1,2,3]
y = [4,5,6]
result = list(map(lambda v:v[0]+v[1], zip(x, y)))
print(result)
# -------------------------
test = [100, 200, 300]
# result: [101,201,301] | using lambda fn, list comprehension
t_result = [(lambda t: t+1)(t) for t in test]
print(t_result)
# ver2
f = lambda x: [i+1 for i in x]
print(f(test))
5. Generators
- return 대신 yield statment가 있는 function.
- yield statement로 그 function의 state를 save한 후, return.
- generator가 다시(next())call되면 sate는 복구됨(그 전 data value들을 모두 기억함.)
- yield의 다음 statement에서 resume됨
- 종류 중 하나로 list generator가 있음. 대표적으로 range() 함수
- iter, next 함수를 구현하고 있음.
- iter: 반복 구조를 만듦
- next: 다음으로 넘어가게 하는 기능
- 사용시 for문과 함게 사용해야 함
def gen_fib(n):
"""generate a Fibonacci series up to n. """
a, b = 0, 1
while (a < n):
yield a # yield를 탑재하고 있는 변수를 generator라고 부름
# 위 행에서 바로 a 값을 전송(출력), 잠시 pause되고, 아래 행부터 다시 실행
# gen_fib()가 두번째이상 call되면 yield a 부터 다시 시작
a, b = b, a+b
# 이를 통해 8byte만 있어도 피보나치 수열 생성 가능
gen_fib(2000)
#사용방법
for fib in gen_fib(100000):
print(fib, end=",")
#print 값:
# 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,
# 17711,28657,46368,75025,
6. Catching and handlign exceptions
- 발생한 exception을 catch해서 처리할 수 있음
- 대부분의 에러 상황을 모두 외워서 처리하기는 어렵기 때문에, 모든 예외를 포괄적으로 처리할 수 있는 '최상위 예외 클래스(Mother Exception)'가 존재
# 활용 예시1
while True:
try:
x = int(input("Please enter a number: ")) #abc와 같이 문자열을 입력하면, int()과정에서 ValueError가 발생.
except ValueError: #exception이 ValueError 종류라면 이 구문이으로 catch됨
print("Oops! That was no valid number. Try again...")
else: #No Exception occurs
print(x)
break
# 활용 예시2
def divide(x ,y):
try:
result = x / y
# except ZeroDivisionError:
# print("division by zero!")
except Exception as e: # Error 이름 모를 때, 부모가 되는 Exception을 사용해줌.
# 그러면 Name, Value 등 모든 오류가 걸림
print(e)
else:
print("result is", result)
'LG U+ Why Not SW Camp 8기 > 학습 로그' 카테고리의 다른 글
| 공부 일지 #12 | tkinter로 계산기 만들기 (2) | 2025.07.30 |
|---|---|
| 공부 일지 #11 | Python Files (3) | 2025.07.30 |
| 공부 일지 #9 | Python Class 기초 정리 (3) | 2025.07.25 |
| 공부 일지 #8 | Python Level Test (4) | 2025.07.23 |
| 공부 일지 #7 | mini-project; 가계부 만들기 (1) | 2025.07.22 |