Тёмный
No video :(

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

윤인성
Подписаться 32 тыс.
Просмотров 15 тыс.
50% 1

이전 판에서는 부록 하나를 차지할 정도로 긴 내용이었는데, 난이도가 너무 높은데 반해서 초급 단계에서 사용을 안 한다는 이유로 이번 책에서 편집이 좀 많이 된 부분입니다.
PS. 사실 이전 책에서도 너무 어렵다고, 이거 들어가면 난이도가 초급 책 아니라고 해서 온라인 부록으로 제공했었음....
그래서 강의에서는 그냥 간단하게 중간 정도 레벨로 설명합니다...!

Опубликовано:

 

28 авг 2019

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 114   
@user-kl1ef6cb4h
@user-kl1ef6cb4h 2 года назад
안녕하세요 강의를 듣고 코딩을 해보다가 질문드립니다. def 함수() : print("출력a") yield 100 print("출력b") yield 200 print("출력c") yield 300 print("출력d") yield 400 next(함수()) next(함수()) next(함수()) next(함수()) 제너레이터 = 함수() next(제너레이터) next(제너레이터) next(제너레이터) next(제너레이터) --------------------------------------- 위에서 제너레이터라고 지정하지 않고(?) 그냥 next(함수())를 연속해서 사용했을땐 그냥 출력a 출력a 출력a 출력a 이렇게 출력이 됐습니다. 제너레이터라고 지정하고 안하고의 차이점을 잘 모르겠습니다. 왜 그냥 next(함수())를 사용하면 제너레이터 = 함수() next(제너레이터) 과 다르게 값이 나오나요?
@user-kl1ef6cb4h
@user-kl1ef6cb4h 2 года назад
항상 친절하게 답해주셔서 감사드립니다!
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
코드가 다르면 결과가 다릅니다. 제너레이터 함수는 next로 제너레이터를 호출해서 활용하는 것이지, 그냥 함수만 호출해서 쓰지 않습니다!
@user-cp8nr9qq7x
@user-cp8nr9qq7x 5 лет назад
안녕하세요^^ 강의 감사합니다. 수고 하셨습니다. 좋은하루 되세요^^
@ilkimable
@ilkimable 2 года назад
yield 를 드뎌 제대로 설명해 주는 곳을 만났네요. 설명이 참 정확하고 이해하기 쉬워요. 감사합니다~~~~
@user-vl6sn5js5o
@user-vl6sn5js5o 3 года назад
오늘 강의도 감사합니다.
@user-oq9kk9rm3u
@user-oq9kk9rm3u 2 года назад
안녕하세요 ~ 우연히 알게되어 딸아이가 강의를 듣고 있습니다. 문의사항이 있고 도움요청하고자 댓글드립니다 딸아이는 현재 중 1이구요 . 파이썬을 공부하고자하는데 혼자는 역부족인듯 싶습니다. 혹시 줌으로나 1:1강의를 하시는지요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
주 업무가 강의가 아니다보니 따로 강의를 하고 있지는 않습니다!
@KyujinSim
@KyujinSim 4 года назад
강의 감사합니다. 즐거운 설 명절 보내세요~~
@kkukku1001
@kkukku1001 3 года назад
04:11 쯤에서 next가 1개 일때는 출력A와 100이 출력되었는데 next가 2개 이상이 되면 왜 yield의 숫자는 함께 출력되지않나요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
리턴된 값을 print()하는 코드가 없으므로 출력되지 않습니다!
@ymoon1847
@ymoon1847 3 года назад
하루에 1강씩 보자고 스스로 약속했는데 어느덧 40강이네요. 조금만 더 힘내서 완강하고 복습할 때 한 바퀴 더 돌려보겠습니다. 감사합니다!
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
화이팅입니다!
@zyllianas
@zyllianas 2 года назад
벌써 40강이라니...! 추석전까지 마무리하는걸 목표로 열심히 더 달려보겠습니다! 재밌어요 선생님! 어쨌거나 상콤하게 계속 달리겠습니다.
@user-sf8mp8qo7h
@user-sf8mp8qo7h 2 года назад
제너레이터부분이 잘 이해 되지 않지만 필요할때 다시보면 되겠지 라는 막연한 희망으로 가뿐하게 다음으로....ㅠㅠ 감사합니다.
@user-lg1dh8pg2q
@user-lg1dh8pg2q 2 года назад
1강부터 지금까지는 한번 보면 대부분 머리에 남는게 있어서 잘 따라왔다고 생각했는데 여기 40강에서는 generator부분에서 머리가 블랙홀에 온것처럼 빙빙도는데요...!!! 함수 안에 return 값은 함수가 실행되었을떄 순서대로 실행하다가 return이 실행될 시점이 되면 밑에 코드는 실행하지 말고 처음에 함수가 호출된 지점으로 return값을 가지고 돌아가라는 말인 듯한데 그래서 아무리 함수가 반복되어서 호출이 되어도 return 아래에 있는 코드는 실행이 안된다고 이해했습니다. 그에 반해 yield는 험수가 실행되고 yield가 실행될 차례가 오면 그값을 가지고 함수가 호출된 시점으로 가면서 return과 같이 함수를 거기서 멈춰라 한다고 생각됩니다.. 그렇지만 다시 이함수가 호출되면 함수의 yield code 아래에 나머지 코드 부분까지 모두 실행하는 것이라고 이해를 하면 될까요???
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
넵 맞습니다! 사실 제너레이터를 직접 만들 일은 거의 없어서 대충 느낌만 이해하고 넘어가셔도 괜찮습니다!
@authorpark6085
@authorpark6085 2 года назад
딱 일주일만에 여기까지 왔네요! 재밌어서 이거저거 혼자 따라하다보니 금방 왔습니다. 파이썬이 C나 C++보다 허용되는 구문이 많아서 재밌게 잘 따라왔습니다. 고맙습니다.
@SB03310
@SB03310 4 года назад
강의 잘 들었습니다. 그리고 질문이 한 가지 있는데요, 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
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
맥 등을 쓰실 경우에는 python 명령어가 아니라 python3 명령어로 실행해주세요![2019년을 기준으로 파이썬2에 대한 지원이 사라졌지만 맥에서는 내부적으로 파이썬2를 써서 파이썬3를 따로 지정해서 실행해야 합니다].
@SB03310
@SB03310 4 года назад
그리고 python3 명령어로 실행하는게 python [파일이름].py로 실행하던 걸 python3 [파일이름].py 로 실행하라는 말씀인가요? python3 [파일이름].py로 실행을 했는데 python3 filterandlambda.py python3 : 'python3' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검 증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + python3 filterandlambda.py + ~~~~~~~ + CategoryInfo : ObjectNotFound: (python3:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 라고 또 오류가 나서요.. 참고로 저는 윈도우를 사용합니다.
@user-gm8ch9vc3d
@user-gm8ch9vc3d 2 года назад
p.268 연습문제1번에 numbers안의 요소들이 Int이기 때문에 join앞의 문자열 "::"과 연결을 할 수 없으니 요소들을 문자열로 바꿔야 하는데요. map이라는 개념은 알기에 영상에서 설명해주신대로 하면 이해는 갑니다. 근데 제가 순간적을 떠올린게 str.numbers라고 쓰면안되나.. map을 꼭 써야하나? 라는 생각이 스쳐서요 제가 무슨 개념을 놓치고 있는걸까요?? 형변환을 이런식으로 했던거 같아서요. 형변환을 이렇게 하면 안되는건지와 map을 사용하지 않는 방법이 있는지 질문드립니다!
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
살짝 이해가 안 되서 그러는데, str.numbers라는 것이 어떤 의미인지 "그걸 사용했을 경우의 전체 코드"를 보여주실 수 있을까요!
@user-gm8ch9vc3d
@user-gm8ch9vc3d 2 года назад
@@user-rh1qt9zn7h 요거.. 제가 str(변수) 라는 형태로 변수를 문자형으로 형변환 한다는 말씀을 드리고 싶었던거 같아요. str.이란 형태로 사용 가능한줄 알고 질문드렸었네요..!ㅠ 죄송합니다!
@NoxPark
@NoxPark 2 года назад
윤인성 저자님, filter 함수를 쓸때 두가지 조건을 걸러면 예를 들어서 list안에 정수가 홀수이고 5보다 큰 수를 추출하고 싶다면 어떻게 쓰면 되는지요? numbers = [i for i in range(1, 10+1)] print(list(filter(lambda x: x % 2 ==1 , x > 5 , numbers))) 쉼표로 "and" 조건문을 구성할 수가 있는가요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
쉼표로는 구분되지 않습니다! 조건 연산자 and 또는 or를 넣어주시면 됩니다! "(x % 2 == 1) and (x > 5)"와 같은 형태로 쓰시면 홀수이면서 and 5보다 큰 것이 추출됩니다!
@hyekyunglee9927
@hyekyunglee9927 4 года назад
안녕하세요 오늘도 좋은 수업 감사합니다. 질문이 있습니다. -------------------------------------------------------------------- def 함수(): print("출력A") yield 100 # next 한 번 실행 시 멈춤 print("출력B") yield 200 # next 두 번 실행시 여기까지 print("출력C") yield 300 print("출력D") yield 400 제너레이터 = 함수() 값 = next(제너레이터) -------------------------------------------------------------------- -> 이 경우, 실행하면 출력 A 100 이렇게 첫 번째 yield 값도 같이 나오는데 -------------------------------------------------------------------- def 함수(): print("출력A") yield 100 # next 한 번 실행 시 멈춤 print("출력B") yield 200 # next 두 번 실행시 여기까지 print("출력C") yield 300 print("출력D") yield 400 제너레이터 = 함수() next(제너레이터) next(제너레이터) -------------------------------------------------------------------- -> 이 경우에는 100, 200 등이 안 나오고 출력 A 출력 B 이렇게 나오는 이유는 뭔가요??
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
앗 다시 한 번 실행해보실 수 있을까요?[저장이 안 되었다던지 등으로 출력이 안 될 수도 있으므로] 위의 것도 print(값)로 값을 출력하지 않는 이상, 값이 출력되어서는 안 됩니다. 주피터 노트북 등에서 실행하시는 경우에는 마지막 줄을 무조건 출력하므로, print() 함수를 사용하지 않아도 100, 200 등이 출력될 수 있지만, 이 경우에는 위의 코드와 아래 코드 모두 숫자를 출력하게 됩니다(마지막 줄만 출력하니 200을 마지막에 붙여서 출력합니다).
@hyekyunglee9927
@hyekyunglee9927 4 года назад
@@user-rh1qt9zn7h 아 그러면 위의 경우에도 출력 A만 나오고, 100은 안나온다는 말씀인가요 ??
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
Hyekyung Lee 넵!
@user-ve9zm1pe1x
@user-ve9zm1pe1x 3 года назад
선생님 질문이 있는데요 1::2::3::4::5::6 이 문제에서 저는 답을 print("::".join(map(lambda i:str(i), numbers))) 이렇게 했는데 이렇게 해도 답이 제대로 나오더라구요 그런데 선생님은 print("::".join(map(str, numbers))) 이렇게 하셨는데 굳이 람다 함수를 안쓰고 str만 적어도 저절로 형변환이 되는건가요? 만약 저절로 형변환이 된다면 그 원리가 무엇인가요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
map 함수의 첫 번째 매개변수에는 - 매개 변수 하나를 받고 - 리스트의 요소가 될 자료를 리턴하는 함수가 오면 됩니다! 지금 써주신 것도 큰 문제는 없는데 str 함수도 위의 조건을 충족하므로 그냥 바로 쓸 수 있습니다!
@fien2506
@fien2506 2 года назад
함수를 별도로 만들어서 함수 내부에서 reversed 이터레이터를 사용하여 리스트 값을 변경했는데요. 함수 외부로 나오니까 reversed 적용 전 상태로 나옵니다. 외부로 나올 때도 적용 후 상태로 나오는 방법은 없을까요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
넵 없습니다! 일회용이므로 한 번 더 만드셔야 합니다.
@adis7519
@adis7519 3 года назад
제너레이터 라고 한글로 써도 제너레이터 함수와 연관되는건가요? 제너레이터라고 한글로 코드를 쓰신 이유 알 수 있을까요??
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
식별자는 그냥 모든 나라 언어로 만들 수 있습니다! 제너레이터는 식별자 이름과는 아무 관련이 없습니다![영어로 써도 식별자 이름으로 제너레이터가 되는 것은 아닙니다]
@junu51211
@junu51211 2 года назад
제너레이너터나 reversed 함수의 반환 값은 메모리의 주소이기 때문에 메모리에 효율적인건가요? 뭔가 포인터 같은 느낌이..
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
리스트를 하나 더 만들어서 메모리를 차지하지 않고 + 단순하게 코드 흐름만으로 데이터를 만들어내서 → 메모리를 절약하게 해줍니다! C 언어 이후의 프로그래밍 언어는 대부분 기본 자료형을 제외한 모든 것을 내부적으로 포인터로 자동으로 처리해서 → 리스트 등등 모두 내부적으로는 포인터를 활용합니다!
@junu51211
@junu51211 2 года назад
@@user-rh1qt9zn7h 아니 왜 이 시간에..
@aaron-kim00
@aaron-kim00 3 года назад
감사합니다.
@nikanasap793
@nikanasap793 Год назад
왜 next로 꺼낼때는 yield 뒤의 값이 나오지 않고 print로 불렀을때는 yield 뒤의 값이 나오는 건가요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h Год назад
next()는 값을 꺼내는 함수이고 print()는 값을 눈에 보이게 출력하는 함수입니다.
@user-tt6ij8zh8b
@user-tt6ij8zh8b Год назад
map함수의미를 잘모르겠습니다 어떤의미인가요??
@user-rh1qt9zn7h
@user-rh1qt9zn7h Год назад
리스트의 각 요소에 "어떤 함수"를 적용해서 새로운 리스트를 만들어내는 것이 map 함수입니다!
@user-bz8nm6eb6g
@user-bz8nm6eb6g 3 года назад
감사합니다!
@user-xl1hd6qz3w
@user-xl1hd6qz3w 3 года назад
오랜만에 강의 듣습니다~~ 6장부터는 난이도가 떨어 진다고 하셨는데.. 6장 들어가기전에 복습하는 의미에서 1장~5장까지 한번더 연습을 해보고 가려고 하는데.. 특히 5장은;; 잘 모르지만 넘어간 부분도 좀 있어서.. 선생님 의견을 한번 들어보고 싶습니다~ 아니면 6장을 천천히 나가면서 다시한번 복습을 하는게 좋을까요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
개인적으로는 - 메인은 진행하면서: "뒤에 엄청 쉬워!!!"하면서 자신감을 기를 수 있습니다. → 일반적인 개발은 해당 문제들만큼의 난이도도 안 나옵니다. - 부가적으로 간단하게 복습: 못 풀겠어서 답지를 봤던 문제를 주기적으로 몇 번 다시 풀어보는 것을 추천합니다[그냥 하루에 한 문제 정도 간단하게]. → 근데 나중에 좀 일반적이지 않은 복잡한 것을 만들려면 필요하기는 해서 차근차근 오래 잡고 보시면 됩니다. 를 추천합니다!
@sophiakim1359
@sophiakim1359 2 года назад
비전공자 기초문법 완료! 동네학원에서 20만원에 10일만에 기초문법배웠지만 하나도 이해안가고 진도만 (무려 400페이지 이상의 코드만 침) 드디어 제대로 파이썬을 습득한 것 같습니다. 비전공자들은 무턱되고 학원비추합니다. 무료인강이 *1000000배 좋습니다.. Sincerely, 감사합니다.
@user-rh1qt9zn7h
@user-rh1qt9zn7h 2 года назад
감사합니다!
@user-uo9op2ok7v
@user-uo9op2ok7v 3 года назад
선생님 복습중에 한가지 햇갈리는게 있어서 질문드립니다 def test(): print("함수가 호출되었습니다") yield "hihi" print("a지점통과") test() print("b지점 통과") test() print(test()) next(test()) #제가직접 추가한코딩 266쪽 직접해보는손코딩과 똑같이 하고 마지막 next(test()) 만 추가했습니다. 제가 생각한결과는 next 함수를 사용하면 yield 키워드 뒤에 입력한값까지 리턴되는걸로 알고있어서 3번째 줄에있는 hihi 까지 출력되는걸로 알고있었는데 막상 실행해보면 hihi는 출력되지않는데 무슨이유인가요? 아래는 코딩을 출력한 결과입니다. a지점통과 b지점 통과 함수가 호출되었습니다
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
단순하게 test()하시면 제너레이터 객체가 나옵니다. 이녀석에게 next(test())를 먹여야 yield 지점까지 이동하므로 print(next(test()))하셔야 원하는 결과가 나올 것입니다!
@bbossam_jjudy
@bbossam_jjudy 3 года назад
감사합니다. ^^
@esther-ow1hz
@esther-ow1hz 4 года назад
교수님 :-) 강의 항상 감사하게 잘 보고 있습니다~! def 함수(): print("출력A") yield 1 print("출력B") yield 2 제너레이터 = 함수 () next(제너레이터) next(제너레이터) 로 실행시키면, 출력A 출력B 가 잘 나오는데요, def 함수(): print("출력A") yield 1 print("출력B") yield 2 next(함수()) next(함수()) 이렇게 실행시키면, 출력A 출력A 로 나오는 이유는 무엇인가요~? 'ㅁ'
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
1. 함수()를 호출하면 = 제너레이터가 나오며 2. 그 제너레이터에 곧바로 next()를 걸었으므로[next(함수()) 부분] 3. 첫 번째 yield까지만 실행되는 형태 위의 것을 2번 반복하셔서 그렇습니다.
@user-uo9op2ok7v
@user-uo9op2ok7v 3 года назад
@@user-rh1qt9zn7h 저도 이부분이 잘이해안되는데 설명봐도 햇갈려서 일단 외우겠습니다
@user-tl2ce4sy7w
@user-tl2ce4sy7w 4 года назад
next() 함수에 대해 궁금한 점이 있습니다 ! def test(): print("강의 감사합니다.") yield print("책도 알차고 좋아요.") yield next(test()) next(test()) 이 코드를 실행하면 강의 감사합니다. 강의 감사합니다. 위와 같이 출력되는데 def test(): print("강의 감사합니다.") yield print("책도 알차고 좋아요.") yield a = test() next(a) next(a) 이렇게 a = test() 라는 변수를 선언해주면 강의 감사합니다. 책도 알차고 좋아요. 라고 출력되는데 왜 굳이 새로운 변수를 선언해줘야 모두 출력이 되는 걸까요..ㅠㅠ
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
제너레이터라는 것의 구현 자체가 그렇게 되어있기 때문입니다. 일반적으로는 이후에 나오는 것처럼 for i in test(): 형태로 반복을 돌리는 형태로 사용되므로, 변수를 만드는 형태로 사용하는 것이 반복문과 조합해서 사용할 때 문법적으로 더 편합니다!
@AlvinMrLee
@AlvinMrLee 3 года назад
좋은 강의 감사합니다!! 질문 하나만 할게요! 확인문제 1번에서 아래와 같은 코드도 가능할까 해서 시도를 해봤는데 아래와 같은 실행결과가 나왔어요.... 코드: numbers = [1, 2, 3, 4, 5, 6] print("::".join(str(numbers))) 실행결과: [::1::,:: ::2::,:: ::3::,:: ::4::,:: ::5::,:: ::6::] 이거 왜 이렇게 나오는건가요??? 강의에서 보여주신 코드랑 같은 결과가 나와야 하는게 아닌가요??????
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
str(numbers)를 하면 [1, 2, 3, 4, 5, 6] → " [1, 2, 3, 4, 5, 6]"가 되고 여기에 join()을 먹이면 각각의 모든 글자들 양옆에 :가 붙어서(괄호, 공백, 숫자, 쉼표 모두), 위와 같은 결과가 나오게 됩니다!
@user-vg5yb9cy7l
@user-vg5yb9cy7l 4 года назад
p268 확인문제 1번에 답이 map(str, numbers)인데 왜 그냥 str(numbers) 하면 안되나요??
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
join() 함수는 매개 변수로 문자열로 구성된 리스트가 와야 합니다. str() 함수로 바꿔버리면, '[1, 2, 3, 4, 5, 6]'가 되는데, 이건 리스트가 아니라 문자열이라 오류가 발생합니다.
@user-vg5yb9cy7l
@user-vg5yb9cy7l 4 года назад
@@user-rh1qt9zn7h 아... 감사합니다!!
@min-yeongkang3162
@min-yeongkang3162 4 года назад
재미있게 따라가다 어느새 40강까지 왔네요. 감사인사드립니다. Visual studio code 에 관해 질문이 있습니다. 자동완성 기능이 한편으론 편리하면서도 아쉬운 점이 있는데 예를 들면, 큰 따옴표나 괄호를 입력하면 여는 괄호, 닫는 괄호가 함께 나옵니다. 이때 닫는 괄호를 굳이 입력하지 않고 빠져나오는 방법이 있을까요? [1,2,3,4 까지만 치고 이미 입력되어 있는 ] 는 굳이 안치고 괄호 밖으로 나올 수 있는가 해서요 간혹 그 라인의 마지막 부분이라면 end 키를 치고 나오면 되는데 그렇지 않은 경우라면, 예를 들면 print(func([1,2,3,4])) 라고 작성할 때 4까지 치고 대괄호를 나와서 소괄호 닫히기 전에 조금더 입력하고 싶은 경우가 있거든요 따옴표 경우에도 이런경우과 왕왕 있는데, 굳이 미리 완성된 기호들을 다시 치지 않아도 되는 방법이 있지 않을까 궁금합니다 :)
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
코드를 작성하는 분들의 성향에 따라서 크게 구분하면 1. 순서대로 작성한다형 print print( print(ㅇㅂㅇ print(ㅇㅂㅇ) # 그냥 순서대로 쭉 입력 형태로 작성하는 분들인데, 이런 타입 분들은 그냥 괄호까지 모두 입력하면서 나아가시는 편입니다. Visual Studio Code는 괄호를 자동으로 만들어주지만, 순서대로 입력하면 괄호가 중첩되는게 아니라, 그냥 그 위치에 들어가게 됩니다. 2. 호출 스택 순서대로 작성한다형 print print() # 괄호 넣고 왼쪽 키를 누르고 print(ㅇㅂㅇ) # 입력하고 END 눌러서 벗어남 print(ㅇㅂㅇ()) # 더 입력할 경우 괄호 누르고 왼쪽 print(ㅇㅂㅇ(ㅇㅂㅇ)) # 입력하고 END 눌러서 벗어남 형태로 괄호를 열고 닫은 뒤에 + 왼쪽 키를 눌러서 괄호 안으로 들어간 뒤 + 뭔가를 입력하고 END 키를 눌러서 빠져나오는 형태입니다. Visual Studio Code는 괄호는 자동으로 만들어줍니다. Visual Studio Code 기본적으로 위와 같이 사용하는 두 패턴에 맞춰서 설계된 편입니다. 아마 현재 1번처럼 입력하시는 것 같은데, 굳이 완성된 기호를 입력하지 않기 원하신다면, 언급하신 것처럼 END 키를 사용하는 것이 가장 일반적입니다...!
@min-yeongkang3162
@min-yeongkang3162 4 года назад
@@user-rh1qt9zn7h 와~! 친절하고 자세한 답변 감사드립니다. 더구나 빠르기까지! :D 두번째 패턴의 경우 자동완성이 더 유용해 보이네요. 한번 염두에 두고 작성해봐야겠습니다. 단순히 타이핑 만이 아니라 생각의 패턴도 조금 바꿔야 할 것 같은데, 그것도 재미있을 것 같아요. 감사합니다!
@user-qw1lk4br6q
@user-qw1lk4br6q 4 года назад
잘 보고 있습니다. 한걸음씩 따라 하다보니 막히는 곳이 있습니다. 연습문제 1번에서 print("::".join(str(numbers)))로 넣어주면 이상하게 나오는데 map (str. numbers)와 str(numbers)의 차이는 무엇인가요? 미리 감사드립니다.
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
아예 함수가 다르므로 실행 방식 자체가 다릅니다. map(str, numbers)는 numbers의 각 요소들이 문자열이됩니다. [1,2,3]이 있었다면, ["1","2","3"]으로 되며 최종 결과는 리스트입니다(map함수는 리스트를 리턴하기도하고) str(numbers)는 최종 결과가 문자열입니다. [1,2,3]이 그냥 "[1,2,3]"이 됩니다.
@ddingho00
@ddingho00 3 года назад
드디어 함수 끝!!!!!!!!!!!!!!!!!
@user-vi3ds4bz8c
@user-vi3ds4bz8c 4 года назад
안녕하세요 저자님! yield가 양보한다는 의미가 헷갈려서 질문 드립니다!! p. 267의 소스 코드 generator01.py에서 보면, def test(): print("A 지점 통과") yield 1 output = test() print("D 지점 통과") a = next(output) print(a) - ------> 의 결과로 "D 지점 통과" 다음에 "A 지점 통과" 그리고 1이 출력되는데요!! ************************** yield를 return 으로 바꾸었을 때 ****************************** def test(): print("A지점 통과") return 1 output = test() print("D지점 통과") print(output) --------> 의 결과는 위에 것과 다르게, "A지점 통과"가 "D지점 통과"보다 먼저 출력 되는 것은 output = test()가 print("D지점 통과")보다 먼저 작성되어서 그런건가요 ???ㅜㅜ 그렇다면 제너레이터 함수는 yield 때문에 output = test() 실행을 잠시 미루고?? print("D지점 통과")를 먼저 실행되게 한 건가요???
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
yield 키워드를 안 사용하면 아예 제너레이터 함수가 아니게 되므로, test()를 호출할 때 실행되어 버립니다. 따라서 위의 코드로 비교는 약간 애매할 것 같습니다.
@seonyoungyu9141
@seonyoungyu9141 3 года назад
리스트 선언할때 자체에서 int를 str로 변환하고 싶어서 아래와 같이 해봤는데요.. 1,2,3,4,5,6 각각 변환하는 것 말고 통째로 변환하는 방법은 없나요? (map 함수를 쓰는 것 외에..) numbers2 = [str(1),str(2),str(3),str(4),str(5),str(6)] print("::".join(numbers2))
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
넵 맵을 쓰셔야 합니다![이외에는 딱히 없습니다].
@user-zz6ew4eo1e
@user-zz6ew4eo1e 3 года назад
제너레이터를 for 반복문과 조합해서 쓸때(영상 4:37 부터) for문에 next를 쓰지 않았는데도 함수가 계속 진행되던데 원리를 잘 모르겠습니다. 영상을 보면 i 값에 next(제너레이터) 값이 들어는것 같던데 next를 쓰지 않았는데 어떻게 i에 그 값이 들어가게 되는 건가요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
for 반복문 내부에서 next를 호출하게 됩니다...![for 반복문과 조합해서 사용할 수 있게 설계되었습니다]
@junghun8345
@junghun8345 3 года назад
감사합니다. 궁금한 것이 있는데, print(map(str,numbers))를 실행하면 map object at 0x0000..이런식으로 뜨는데 join()함수에는 문자열형태뿐만 아니라 map object가 들어가도 적용되는건가요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
앗 질문의 의도를 살짝 모르겠는데, 조금 더 자세히 설명해주실 수 있을까요! map() 함수는 map 이라는 특별한 객체를 리턴할 뿐입니다!
@junghun8345
@junghun8345 3 года назад
@@user-rh1qt9zn7h 질문이 부정확했습니다 ㅠㅠ 268쪽 확인문제 빈칸에 들어가는 코드가 join(map(str,numbers))입니다. map함수가 map이라는 특수한 객체를 리턴한다고 하셨데 join함수의 매개변수가 리스트뿐만 아니라 map객체도 허용되는지가 궁금했습니다!
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
@@junghun8345 넵 가능합니다! join() 은 정확하게는 "문자열로 구성된 반복 가능한 녀석"을 매개변수로 받기 때문입니다. 그래서 [1, 2, 3]과 같은 리스트가 있을 때 ":".join(map(str, [1, 2, 3]))과 같은 코드를 많이 씁니다(그냥 [1,2,3]을 넣으면 숫자로 구성된 리스트라 오류).
@byungeunyun7397
@byungeunyun7397 4 года назад
안녕하세요~ㅎ 강의 잘 보고 있습니다. 질문이 있는데요~ 제너레이터를 사용하면 4분 4초처럼 next()에 따라 출력A, 출력A 출력B, 출력A출력B출력C 이렇게 나오는데 처음 사용하면 출력A 두번째 사용하면 출력B 세번째 사용하면 출력C 이렇게 하나씩 출력되는 경우도 제너레이터로 사용할 수 있나요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
4분 40초에서 오른쪽의 실행 결과는 출력A-출력B-출력C로 실행된 것입니다(그 위에 있는 것은 이전 실행 결과입니다). 기본적으로 지금 말씀해주신 것처럼 실행됩니다.
@fridayann0304
@fridayann0304 3 года назад
안녕하세요!! 책 사서 강의 열심히 듣고 있습니다!! 강의 정말 감사합니다!! 제러레이터 전 P261쪽 직접해보는 손코딩 랜덤하게 1000명의 키와 몸무게 만들기 코드를 쓰고 실행을 하니 return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to 이렇게떠서요 혹시 제가 코드잘 못적은게 있나해서 홈페이지 소스코드 복사해서 붙여 실행했는데도 똑같이 뜨네요 어떻게 해결해야 하나요??
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
앗 이건 환경 문제로 환경이 살짝 꼬이신 것 같습니다![원래 파이썬이 알아서 인코딩을 맞춰주는데 약간 충돌이 있어서 못 맞춰주고 있는 것 같습니다]. 인코딩을 강제로 지정해야 하는데 해당 코드에서 open() 함수를 open("info.txt", "w", encoding="utf-8"): 로 해서 파일을 저장하고 이후의 코드에서 open("info.txt", "r", encoding="utf-8") 로 해서 파일을 열어주시기 바랍니다. 만약 이게 같은 오류가 뜰 경우 'utf-8'을 'euc-kr'로 지정해주세요!
@fridayann0304
@fridayann0304 3 года назад
@@user-rh1qt9zn7h 선생님 빠른 답변 정말 감사드려요!!! encoding="utf-8"를 넣고 돌리니 text file이 제대로 만들어졌어요!! 근데 질문이 하나 더 드려도 될까요? 제가 262쪽 반복문으로 파일 한줄씩 읽기 고대로 쓰고(encoding="utf-8"포함) 돌리니 File ".\goodmorning.py", line 15, in with open("info.text","r",encoding="utf-8") as file: FileNotFoundError: [Errno 2] No such file or directory: 'info.text'이렇게 떠요. 소스코드붙여서 돌리면 제대로 결과가 나오는데 제가 직접 써서 돌리면 왜 저런 메세지가 뜨는걸까요? 제가 잘못쓴게 있나해서 소스코드랑 제꺼랑 일일이 대조해 봤는데 똑같았거든요. 예전부터 텍스트파일 읽어오려고 할때마다 항상 저메세지가 떴었요;; 뭐가 잘못된걸까요??
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
@@fridayann0304 오류를 보시면 No such file or directory = "그런 파일 또는 디렉터리가 없다"입니다. 파일 이름을 잘못 입력한 것을 확인하시면 되는데 info.text라고 입력하셨습니다!
@fridayann0304
@fridayann0304 3 года назад
@@user-rh1qt9zn7h 앗!! 눈 빠지게 확인했다고 생각했는데 다시 보니 쌤 말씀 대로 text라고 했네요;; 다시한번 진심으로 감사드려요!!! 파이썬 공부하고 자바스크립트도 하려고요~~~
@user-ri9sg9vn3g
@user-ri9sg9vn3g 4 года назад
선생님, 공부하다가 궁금한게 생겼는데요. 코드를 작성할때 1. 다른 사람 혹은 자신이 봤을 때 이해하기 쉽게 작성한다. 2. 코드 길이를 최대한 짧게 작성한다. 둘 중에 뭘 우선 시 해야되나요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
상황따라 달라서 딱 하나로 답을 낼 수는 없지만, 파이썬은 아무리 빠르게 작성해도 느려서 속도 생각 안 하는 언어는 그냥 보기 쉽게 작성하는 것이 좋다고 생각합니다[빠르게 해야하는 부분은 C++ 모듈로 만들고 읽어들이는 형태로 사용하므로]
@user-ri9sg9vn3g
@user-ri9sg9vn3g 4 года назад
@@user-rh1qt9zn7h 감사합니다!!
@swlpfjru
@swlpfjru 3 года назад
항상 감사합니다!! 질문이 있어서 댓글 남깁니다 마지막 print(list(filter(lambda x: x ** 2 < 50, numbers))) 여기서 만약 x**2 값을 출력하고 싶다면 어떻게 하면 되나요. 이 경우 따로 함수를 만들어야 하나요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
어떤 실행 결과를 원하는지 조금 더 자세하게 설명해주실 수 있을까요! 함수 내부를 돌면서 출력하고 싶은 경우[사실 그렇게 만들 일이 거의 없지만], 말씀해주신대로 함수를 따로 만들어야 합니다!
@user-nl9pk6br5k
@user-nl9pk6br5k 3 года назад
4:46초에 for반복문을 실행하지 않았는데 어떻게 결과값이 나온거죠??
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
for 반복문을 돌면서, 제너레이터가 계속 내부적으로 next()를 호출하면서, 함수()라는 녀석을 돌므로, 여기의 print()로 결과가 나오는 것입니다.
@user-ed1tg9rj1e
@user-ed1tg9rj1e 4 года назад
질문이 있습니다. def gen: yield 1 print(type(gen())) print(type(gen()) is generator) 를 실행하면 와 함께 NameError가 뜨더라고요. 원하는 타입이 아닐때 에러가 뜨게 하고싶고 제너레이터를 받으면 임시적으로 통과가 되게 하고 싶은데 조언을 구하고 싶습니다ㅠㅠㅠ
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
정대영 기본 자료형과 다르게 generator라는 타입을 읽어야 사용할 수 있습니다(기본적으로 안 읽어들여지므로 NameError가 뜹니다). import types types.GeneratorType isinstange(비교객체, types.GeneratorType)
@user-ed1tg9rj1e
@user-ed1tg9rj1e 4 года назад
@@user-rh1qt9zn7h 감사합니다!!
@user-is6xx9ry5v
@user-is6xx9ry5v 3 года назад
4분에서 next(제너레이터)를 하나씩 추가하면서 실행시켜줄때는 왜 yiled 뒤 숫자가 같이 print 안되는 건가요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
출력은 print() 함수를 사용할 때만 이루어집니다. 현재 next(제너레이터)를 출력하는 코드가 따로 없으므로, 출력하지 않는 것입니다.
@yhk6291
@yhk6291 3 года назад
혼자 공부하다가 갑자기 오류가 생겼는데요 ㅜㅜ Pylance라는 것과 Jupyter라는 것이 생겼는데 이것들이 뭔지 알 수 있을까요 ㅜ
@user-rh1qt9zn7h
@user-rh1qt9zn7h 3 года назад
pylance - 자동 완성 기능 jupyter - 코드를 블록 단위로 실행할 수 있게 해주는 것 입니다. 무시하고 강의 방법으로 실행하시면 됩니다!
@jaeilnam9219
@jaeilnam9219 4 года назад
교재 254쪽의 실행결과에서 나오는 map(power, list_input_a): 메시지에서,- 0x00ACA208 번호는 실행된 순서인가요? 아니면 무슨 번호인지요?
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
메모리 주소입니다. 파이썬을 할 때는 크게 상관하지 않으셔도 괜찮습니다...!
@user-vi3ds4bz8c
@user-vi3ds4bz8c 4 года назад
아! 그렇다면 아래의 두 제너레이터 함수에서 output = test() vs print("D 지점 통과") print("D 지점 통과") output = test() a = next(output) a = next(output) print(a) print(a) output = test()의 위치가 print("D 지점 통과") 과 바뀌어도 상관이 없는 것인가요???
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
"어떤 결과를 원하느냐"에 따라서 코드의 위치는 바뀌어도 상관이 있을 수도 있고 없을 수도 있습니다. 두 코드에서 어떤 실행 결과를 원하시는 것인지 조금 더 자세하게 알 수 있을까요...!
@user-vi3ds4bz8c
@user-vi3ds4bz8c 4 года назад
@@user-rh1qt9zn7h 앗.. 사실 저기 두 함수의 실행 결과가 같아서, 제너레이터 함수를 호출하는 코드( output = text() )의 위치가 크게 중요한 지 여쭤보고 싶었어요ㅜㅜㅜ
@user-rh1qt9zn7h
@user-rh1qt9zn7h 4 года назад
@@user-vi3ds4bz8c 제너레이터일 경우에는 이후에 output을 활용하게 되므로, 활용하기 전에는 어떤 부분에서 만드셔도 큰 상관이 없습니다...!
@user-vi3ds4bz8c
@user-vi3ds4bz8c 4 года назад
@@user-rh1qt9zn7h 아 네네 감사합니다!! 그렇게 말씀해주시니, 이해가 되었어요! 항상 답변도 빠르게 해주셔서 정말 도움 많이 됩니다ㅜㅜ 추천 많이 하겠습니다 :)
@Ali-ee4dr
@Ali-ee4dr 5 лет назад
영상에서 설명해주신 것처럼 제너레이터 = 함수() next(제너레이터) 를 실행했을 땐 yield가 전달해준 값이 나오지 않고, 반면 책 267쪽에 나오는 예제에서처럼 output = test() a = next(output) print(a) a라는 변수를 따로 선언하고 출력하면 yield가 전달해준 값이 나오는데, 변수를 따로 선언해주는 것이 yield 전달값에 어떻게 영향을 미쳐서 다른 결과가 나오는지 궁금합니다..!
@user-rh1qt9zn7h
@user-rh1qt9zn7h 5 лет назад
강의에서는 함수 내부에서 print()를 직접하는 부분이 있는데 이 부분과 헷갈리신게 아닐까 생각해봅니다...!
@Ali-ee4dr
@Ali-ee4dr 5 лет назад
@@user-rh1qt9zn7h 주말인데 빠른 답변 감사합니다!! 함수 내부에서 print("출력A")를 입력했기 때문에 출력A 가 출력되는 건 알겠는데, 제너레이터 = 함수() # 실행결과 next(제너레이터) # 출력A 제너레이터 = 함수() # 실행결과 값 = next(제너레이터) # 출력A print(값) # 100 이 둘의 차이는 print를 한 번 더 해줬기 때문에 yield가 전달해준 값이 나오는 것인가요?
@kimyongki4220
@kimyongki4220 4 года назад
def 함수(): print("출력A") yield 100 제너레이터 = 함수() 1. next(제너레이터) 실행결과 : 출력A 2. print(next(제너레이터)) 실행결과 : 출력A 100 3. 값 = next(제너레이터) print(값) 실행결과 : 2와 동일 print()함수가 리턴값을 같이 출력해주기 때문인거 같습니다. 1번은 제너레이터가 된 함수의 내부코드만 출력해주기 때문인거같습니다.
Далее
Can you solve these number puzzles?
8:03
Просмотров 49 тыс.
7 Days Stranded In A Cave
17:59
Просмотров 37 млн
Get 10 Mega Boxes OR 60 Starr Drops!!
01:39
Просмотров 14 млн
2024-08-06 자바 문제 6
9:16
Просмотров 15
혼자 공부하는 파이썬 45강 - 클래스 도입
13:38
Transformer 코드 리뷰 1강
35:38
Просмотров 1,2 тыс.
Closures in Python | Explained with animations
8:08
Просмотров 24 тыс.
Developers Compete To Create The Worst UIs
11:10
Просмотров 91 тыс.