[python]기초문법9

2 minute read

혼자 공부하는 파이썬 40강 - 제너레이터(Generator)

간단하게, “iterator를 직접 만들 때 사용하는 구문”
함수 내부에 yield 라는 키워드가 포함되면 해당 함수는 제너레이터가 된다.

def 함수():
 print("출력A")
print("출력A")
yield # yield가 있으면 아무것도 출력되지않는다


#next() 함수로 제너레이터를 실행 할 수 있다.   
제너레이터 = 함수()

next(제너레이터) #출력A
#출력B


next() 예)

def 함수():
        print("출력A")
        print("출력A")
        yield 100
제너레이터 = 함수()
value = next(제너레이터)
print(value)
#결과 :
#출력A
#출력B
#100


yield는 함수내부에 여러개가 올 수 있다.
함수가 위에서부터 실행되면서 yield를 만나면 이후의 코드는 실행되지 않고 종료한다.
yield의 갯수만큼 next() 를 호출하면 제너레이터에서 멈춘 부분 이후 부터 시작할 수 있다.


예)

def 함수():
        print("출력A")
        yield 100
        print("출력B")
        yield 200
        print("출력C")
        yield 300
        print("출력D")
        yield 400

제너레이터 = 함수()
next(제너레이터) 
#출력A
#100
next(제너레이터) 
#출력B
#200
next(제너레이터) 
#출력C
#300
next(제너레이터)   
#출력D
#400 

제너레이터는 iterator에 포함되는 개념이므로 일회용 함수이다.
따라서 메모리를 절약할 수 있다.

def 함수():
        print("출력A")
        yield 100
        print("출력B")
        yield 200
        print("출력C")
        yield 300
        print("출력D")
        yield 400

제너레이터 = 함수()
for i in 제너레이터:
        print(i) #출력됨
for i in 제너레이터:
        print(i) #출력안됨


연습문제)1

#1::2::3::4::5::6 출력하기
numbers = [1, 2, 3, 4, 5, 6]

print("::".join(
        map(str, numbers)
))


연습문제)2

numbers = list(range(1, 10 +1))

print("홀수만 추출하기")
print(list(filter(lambda x: x % 2 == 1, numbers)))
print()

print("3 이상, 7 미만 추출하기")
print(list(filter(lambda x: 3 <= x < 7, numbers)))
print()

print("제곱해서 50 미만 추출하기")
print(list(filter(lambda x: (x ** 2) < 50, numbers)))
print()


혼자 공부하는 파이썬 41강 - 구문 오류와 예외

구문 오류(SyntaxError)
코드에 문제가 있어서 실행이 되지않는 오류 ##EOL이 뜸
print("실행되었습니다")
print("asd)
예외(런타임 오류, Exception)
코드 자체 문법적인 오류가 아닌, 실행과 관련된 문제
실행은 되지만 오류가 발행해서 바로 죽음
print("실행되었습니다")
 list_a = [1, 2, 3]
 print(list_a[100])
 #"실행되었습니다" 출력후 IndexError 발생

기본 예외 처리

기본 예외처리는 if문으로 예외의 조건들을 걸러 주는 것

예 )

while True:
         string_input = input("정수 입력>")
                string_input = input("정수 입력>")
                if string_input.isdigit():
                        number_input_a = int(string_input)
                        print("원의 반지름: ", number_input_a)
                        print("원의 둘레: ", 2 * 3.14 * number_input_a)
                        print("원의 넓이: ", 3.14 * number_input_a * number_input_a)
                        break
                else:
                        print("정수를 입력해주세요!")


혼자 공부하는 파이썬 42강 - try except 구문

try:
     #예외가 발생할 가능성이 있는 코드
except:
   #예외가 발생했을 때 실행할 코드


예제)

#변수 선언
list_input_a = ["52", "273", "32", "스파이", "103"]
#반복 적용
list_number = []
for item in list_input_a:
        #숫자로 변환해서 리스트에 추가

        try:
                float(item) # 예외가 발생하면 알아서 except로 넘어감
                list_number.append(item) #예외없이 통과했으면 리스트에 추가
        except:
                pass #예외가 발생해서 except로 넘어왔을때 pass처리

#출력
print("{} 내부에 있는 숫자는".format(list_input_a)) #["52", "273", "32", "스파이", "103"] 내부에 있는 숫자는
print("{} 입니다".format(list_number)) #["52", "273", "32", "103"]입니다

Leave a comment