yield 키워드를 포함한 함수는 제너레이터가 된다.
제너레이터는 next() 함수로 값을 순차적으로 꺼낼 수 있다.
일반 함수와 달리 yield를 만나면 함수를 종료한다.
StopIteration은 더 이상 반환할 값이 없을 때 발생한다.
정답: 3번
→ yield를 만나면 함수가 일시 중단되고, 다음 next() 호출 시 이어서 실행됨.
데코레이터는 함수(또는 메서드)에 다른 기능을 "입혀주는" 함수입니다.
✅ 2. 다음 코드 실행 결과는? (주관식)
def my_gen():
yield 1
yield 2
yield 3
g = my_gen()
print(next(g))
print(next(g))
g = my_gen()
👉 제너레이터 객체 g 생성됨 (아직 함수 본문 실행은 안 됨)
print(next(g))
👉 my_gen() 함수 시작 → 첫 번째 yield 1 실행
👉 1을 **반환(return 아님)**하고 함수는 멈춤
👉 1 출력됨
print(next(g))
👉 함수가 멈춘 바로 다음 줄부터 실행 재개 → yield 2
👉 2를 반환하고 함수 다시 멈춤
👉 2 출력됨
정답: 1 , 2
try → finally → except
try → except → else → finally
try → else → except → finally
except → try → else → finally
정답: 2번
try → finally → except
try → except → else → finally
try → else → except → finally
except → try → else → finally
정답: 2번
self._value
self.__value
self.value
__value__
정답: 2번
→ __value 형태는 프라이빗 변수로 간주됨 (접근 제한)
정답:
속성처럼 보이지만 실제로는 메서드를 호출하여 비공개 변수의 값을 읽어올 수 있게 해주는 데코레이터이다. → 게터(getter) 역할 수행.
@classmethod
@staticmethod
@property
@setter
정답: 1번
error
raise
try
except
정답: 2번
개발자가 전체 실행 흐름을 제어한다.
외부 라이브러리를 수동으로 호출해서 사용한다.
제어의 흐름이 사용자에서 프레임워크로 넘어간다.
단순한 기능만 제공한다.
정답: 3번
모듈은 .py 파일 하나로 구성된다.
패키지는 __init__.py 파일이 없어도 동작할 수 있다.
패키지는 모듈을 여러 개 모아놓은 디렉터리다.
모듈은 import 없이도 자동으로 사용된다.
정답: 4번
python
CopyEdit
class A:
def __init__(self, value):
self.__value = value
@property
def value(self):
return self.__value
__value는 클래스 외부에서 직접 접근 가능하다.
value 속성은 외부에서 값을 변경할 수 있다.
@property는 메서드를 속성처럼 사용할 수 있게 한다.
self.__value는 클래스 변수이다.
정답: 3번
자식 클래스는 부모 클래스의 속성과 메서드를 상속받는다.
isinstance()는 객체가 특정 클래스의 인스턴스인지 확인하는 함수이다.
자식 클래스는 부모 클래스보다 더 많은 기능을 가질 수 없다.
오버라이딩(overriding)을 통해 부모 메서드를 재정의할 수 있다.
정답: 3번
오히려 자식 클래스는 부모의 기능을 상속받고, 기능을 추가할 수도 있습니다.
즉, 부모보다 더 많은 기능을 가질 수 있습니다.
ZeroDivisionError
FileNotFoundError
SyntaxError
TypeError
정답: 3번
→ SyntaxError는 예외가 아니라 구문 오류임. 실행 전에 발생함.
python
CopyEdit
class Person:
def __init__(self, name):
self.__name = name
@_________
def name(self):
return self.__name
@name._________
def name(self, value):
self.__name = value
정답:
python
CopyEdit
@property
@name.setter
getter 가져옴 -> setter (함수 값 설정)
@property
@name.setter
@property
값을 읽는 getter 메서드
@name.setter
값을 바꾸는 setter 메서드
math
random
os
requests
정답: 4번
→ requests는 외부 모듈, pip로 설치해야 함.
개발자가 모든 흐름을 직접 통제하는 구조이다.
일반적인 함수 호출 구조와 동일하다.
프레임워크가 흐름을 제어하고, 개발자는 필요한 부분만 정의한다.
순차적 코드 실행 흐름과 같다.
정답: 3번
return 키워드를 사용한다.
내부 코드가 한 번에 모두 실행된다.
yield가 호출될 때마다 중단되고 상태를 기억한다.
메모리를 많이 사용한다.
정답: 3번
return은 일반 함수에서만 사용하고,
제너레이터는 yield를 사용해서 값을 하나씩 반환함.
return을 쓰면 제너레이터는 끝남 (StopIteration 예외 발생)
return은 일반 함수에서만 사용하고,
제너레이터는 yield를 사용해서 값을 하나씩 반환함.
return을 쓰면 제너레이터는 끝남 (StopIteration 예외 발생)
👉 제너레이터 함수에서는 yield를 써야 함.
일반 함수는 내부 코드를 한 번에 실행하지만,
제너레이터는 yield를 만날 때마다 중단됨.
다시 next()로 이어서 실행함.
👉 그래서 제너레이터는 "하나씩 꺼낼 수 있는 함수"임
이게 제너레이터의 핵심입니다!!
yield를 만나면 값을 내보내고 함수는 멈춤.
다시 next() 하면 이전 위치부터 이어서 실행
아니요! 제너레이터는 메모리를 "적게" 사용합니다.
데이터를 한꺼번에 메모리에 저장하지 않고, 하나씩 생성하기 때문이에요.
👉 무한 반복, 대량 데이터 처리 시 매우 효율적임
예시 답안:
클래스는 객체를 만들기 위한 설계도이고, 객체는 그 설계도로부터 생성된 실제 인스턴스이다. 클래스는 정의이고, 객체는 실체이다.
colab -> 네트워크 -> 가상 환경
c 언어란?
a언어, b언어 -> c언어에서 성공
Unix를 구현하기 위해 만들어졌습니다.
.py처럼 .c로 저장을 해야 저장이 됩니다.
include: 포함하다 -> include <> : 출처 ~한 겁니다.
stdio -> studio input output : 가장 기본적인 문법
#include <studio.h>: 이 라이브리를 내가 사용하겠다...
doctype html 같은 거네
main 함수: 이 코드는 어디서 부터 시작하는거임? 여기서 부터 시작한 다는 것을 알려주는 부분..
printf -> 파이썬에서 print 같은 거임.
; 으로 문장 마무리 하면 됩니다..
return 0: 유언 같은 거임. 죽기 전에
변수에 . , 불가능 _ 가능
변수의 첫이름 대,소,언더스코어만 가능 변수 이름에 공백,숫자 불가능..
그래서 개발자들이 HI_HELLO 언더바로 띄어쓰기 함.
AGE, WEIGHT, LETTER_GRADE
Integer(나이에는 소수점 안되기 때문에), 415.1(float), charcter(문자)
> int, float, char, double(더 긴 소수점 지원)
구글에다 데이터 타입 검색해보셈 굉장히 많음.
date type in c
램에 있는 메모리 공간에 이 타입의 데이터를 저장할 수 있는 조그만한 공간이 할당이 됩니다.
int age; -> 출생신고만 함.
int age = 5; 5살이라고 선언, 5살이라는 값을 가짐.
char letter_grade = 'a';
int age=5, month=12, day; 이런 식으로 할 수도 있음.
변수는 prinf 로 확인할 수도 있음.
어떤 타입으로 알려줘야 할지 prinf한테 알려줘야 함.
int = %d, float= %f, char = %c
printf("%d", age) -> 이런식으로도 가능
printf("I'm %d years old |n") -> 이런식으로도 가능
|n : new 라인을 만들어라~ 라는 뜻입니다.
|t: 탭으로 띄어다오~