55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
질문입니다~ closer
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. def calc(): a = 3 b = 5 def mul_add(x): return a * x + b # 함수 바깥쪽에 있는 지역 변수 a, b를 사용하여 계산 return mul_add # mul_add 함수를 반환 c = calc() print(c(1), c(2), c(3), c(4), c(5)) 요렇게 쓸때 mul_add함수에서 a,b를 return할때는 또 nonlocal 설정이 불필요하더라구요 이 부분이 좀 이해가 안됩니다!
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
질문있습니다! read only dict 관련
from types import MappingProxyType d = {'key1': 'value1'} # Read Only d_frozen = MappingProxyType(d) #d_frozen['key1'] = 'value2' print(d, id(d)) print(d_frozen, id(d_frozen)) print(d is d_frozen, d == d_frozen) d['key1'] = 'value2' print(d_frozen, id(d_frozen)) 결과가.. {'key1': 'value1'} 1996092114944 {'key1': 'value1'} 1996091990176 False True {'key1': 'value2'} 1996091990176 여기서 d_frozen은 안바껴야되는거 아닌가요?ㅎㅎㅎ 분명 강의에서 d_frozen은 수정불가로 배웠는데...질문드립니다!
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
실습파일 p_chapter03_02.py 관련
실습파일 마지막 코드가 아래와 같이 있는데 실행결과에 대한 설명을 부탁드립니다. # 참고 : 파이썬 바이트 코드 실행 import dis dis.dis(v2.__add__)
- 해결됨우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
클로저에서 nonlocal을 붙어야 하는 경우와 안붙여도 되는 경우 구분은?
1) 클로저 사용시, series (리스트형)의 경우는 nonlocal을 사용하지 않아도 되고, total, cnt는 nonlocal을 사용하지 않아도 되는 이유는 무엇인지요? 2) 클로저 사용시 에러없이 구현하려할때, 반드시 nonlocal을 붙여서 사용해야 하는 자료형과 nonlocal을 붙이지 않아도 되는 자료형은 어떻게 구별할 수 있는지요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
멀티스레드와 싱글스레드의 성능 차이 관련 질문드립니다.
학습 내용 중 ThreadPoolExecutor로 멀티스레드를 실행할 때 문득 궁금해져서 실험을 해봤습니다. 같은 WORK_LIST를 가지고 하나는 멀티스레드, 하나는 코루틴으로 구현해서 실행시간을 비교해봤는데 멀티스레드가 7.5초, 코루틴이 7.6초로 유의미한 차이가 없는 것 같았습니다.(몇 번 더 시도해봤지만 거의 비슷했습니다. 어쩔때는 코루틴이 더 짧기도 했습니다.) 이런건 단순한 sum 연산이여서 둘 간에 성능의 차이가 없이 엎치락 뒷치락 하는 것인가요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
done, not_done 관련 질문입니다
예제에서 나온 str(result.done) str(result.not_done) 에 관해서 질문드립니다. concurrent.futures.wait()를 사용할 때는 2개의 튜플이 반환되고 각각 done과 not_done 이라는 이름이 붙어서 반환이 된다고 공식 문서에서 설명하고 있는데, result.done과 result.not_done 과 같은 형식으로 함수나 메소드처럼 사용할 수 있는 건가요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
선생님 질문 있습니다
선생님 1번 코드는 for문이 끝날때 다시 largest와 sum 변수가 0으로 초기화 되면서 반복이 되는건 알겠는데 2번 코드 같이 변수가 바깥에 선언되어 있으면 반복문이 시행되고 난 후의 변수를 저장하면서 반복을 하게 되나요?? for i in range(n): -----> 1번 코드 largest3 = 0 largest4 = 0 sum1 = 0 sum2 = 0 sum1 = sum1 + a[i][i] if sum1 > largest3: largest3 = sum1 sum2 = sum2 + a[i][n-i-1] if sum2 > largest4: largest4 = sum2 ---------------------- largest3 = 0 largest4 = 0 sum1 = 0 sum2 = 0 for i in range(n): -----> 2번 코드 sum1 = sum1 + a[i][i] if sum1 > largest3: largest3 = sum1 sum2 = sum2 + a[i][n-i-1] if sum2 > largest4: largest4 = sum2 - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
self 관련 질문입니다.
self._company 와 self._details self. 하고 언더바 하는 이유는 무엇인가요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
iterator, generator 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 10:44에서 wt=iter(wg) 하고 print(wt)를 하면 generator라고 나오는데 interator 가 아니고 generator인 이유가 무엇인가요? 가령 t = 'asdfgh' w= iter(t) print(w)하면 str_iterator 라고 나오는데 차이가 궁금합니다.
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
내부 함수 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 함수안에 함수 구조를 보다가 의문이 생겨 질문 드립니다. def aaa(): cnt =1 total =2 def bbb(v): return total/cnt, v def ddd(w): return w return bbb print('>>>',aaa()(10)) 만약 위와 같은 함수가 있고 결과를 출력하면 (2.0, 10)이 나옵니다. 여기서 w에도 값을 넣어서 값을 반환하고 싶으면 어떻게 해야하는지요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
as_completed와 future 관련하여 질문했던 내용입니다
as_completed() 함수와 future에 대해서 질문을 드렸고 감사하게도 도움을 많이 주셔서 모르는 부분을 거의 다 해결할 수 있었습니다. "The as_completed() function takes an iterable of Future objects and starts yielding values as soon as the futures start resolving." 이라는 설명과 관련된 내용들과, as_completed() 함수의 코드 예제들을 찾아보았는데요 from concurrent.futures import ThreadPoolExecutor, as_completed from time import sleep from random import randint def return_after_5_secs(num): sleep(randint(1, 5)) return 'Return of {}'.format(num) pool2 = ThreadPoolExecutor(5) futures2 = [] for x in range(5): futures2.append(pool2.submit(return_after_5_secs, x)) for x in as_completed(futures2): print(x.result()) 공통적으로 .submit() 함수를 통해 future 객체를 생성하고, 이를 리스트 안에 넣으면서 리스트 형태로 변환(?)하는 것을 확인할 수 있었습니다. 그 후 iterator를 리턴하는 as_completed() 함수의 특성을 이용하여 for 구문에서 반복하는 것을 볼 수 있었는데요 그렇다면 "The as_completed() function takes an iterable of Future objects" 에서 말하는 내용은 결국 as_completed() 함수가 'submit 함수 등을 이용해 future 객체를 만들고, 이를 iterable한 객체의 형태로 변환을 하여 인자로 사용한다'는 의미로 이해하면 되는 것인가요?? 항상 많은 도움 주셔서 감사합니다!!
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
as_completed와 future 관련 질문입니다
as_completed() 함수와 관련된 내용을 찾다가 모르는 내용이 있어서 질문드립니다. "The as_completed() function takes an iterable of Future objects and starts yielding values as soon as the futures start resolving." 이라는 설명을 볼 수 있었는데요 여기서 'takes an iterable of Future objects' 라는 부분이 잘 이해가 가지 않습니다. 파이썬 공식 문서에 따르면 Future 클래스는 callable 객체의 비동기 실행을 캡슐화하고, Future 객체는 executor.submit() 함수에 의해서 리턴된다고 하는데, **The Future class encapsulates the asynchronous execution of a callable. Future instances are created by Executor.submit() 정확히 Future 객체가 무엇인지와, 이것이 iterable과 어떤 관련이 있는지에 대해서는 정보를 찾을 수가 없었습니다. Future 객체가 무엇이고, Future 객체와 iterable 사이의 관계에 관한 설명이나 관련된 링크가 있다면 부탁드리겠습니다. 감사합니다.
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
ThreadPoolExecutor의 max_worekers에 관한 질문입니다
ThreadPoolExecutor와 ProcessPoolExecutor의 인자로 둘 다 'max_workers=' 받을 수 있다고 하는데요 인터넷에서 예제들을 찾아보니 with concurrent.futures.ProcessPoolExecutor(3) as exe: exe.map(download_image, img_urls) 이런 식으로 max_workers가 없이 숫자만 사용된 형태들도 많이 보였습니다. 이런 경우에도 max_workers=3 과 같은 의미라고 봐도 되나요??
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
map 함수의 리턴값에 관한 질문입니다
concureent.futures의 map 함수의 출력값과 관련해서 궁금한 내용인데요 from concurrent import futures import threading import time def task(n): print('{} : sleeping {}'.format(threading.current_thread().name, n)) time.sleep(n / 10) print('{} : done with {}'.format(threading.current_thread().name, n)) return n / 10 ex = futures.ThreadPoolExecutor(max_workers=2) print('main : starting') results = ex.map(task, range(5, 0, -1)) print('main : unprocessed results {}'.format(results)) print('main : waiting for real results') real_results = list(results) print('main : results : {}'.format(real_results)) 다음의 코드를 실행하니 print('main : unprocessed results {}'.format(results)) 이 부분의 출력값이 ThreadPoolExecutor-0_1 : sleeping 4main : unprocessed results <generator object Executor.map.<locals>.result_iterator at 0x000002899230B7B0> 이렇게 나오는 것을 확인할 수 있었습니다.. generator와 iterator가 모두 나오는걸 볼 수 있었는데요 map 함수의 출력값은 generator인가요 iterator 인가요??
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
코루틴에서 yield의 사용
인터넷에서 코루틴에 관한 내용들을 찾아보니 def number_coroutine(): while True: x = (yield) print(x) co = number_coroutine() next(co) co.send(1) co.send(2) co.send(123) 위의 예시처럼 yield를 괄호 안에 넣는 경우가 대부분이었는데요.. 괄호를 표시해 주는 것이 필수는 아닌건가요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
import time에 관해서 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의 CODE에서 [#결과건수] 부분에서 with ~ as 문법을 이용하여 Thread 또는 Process 등 을 쓰지않고 그냥 result=map(sum_generator, WORK_LIST)로 작성하여 시간을 측정하면 무조건 0초로 나오는데 왜 그런지 궁금합니다
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
excutor.map() 이용시 함수 인자가 여러개일 경우 처리 방법이 궁금합니다
안녕하세요 강사님. 배운 강의를 응용해서 코딩을 짜다가 궁금증이 생겨서 글 남깁니다. def test(x, y, z): return x * y * z x = [1, 2, 3, 4, 5] y = [10, 20, 30, 40, 50] z = [7, 8, 9, 10] with futures.ThreadPoolExecutor() as excutor: result = excutor.map(test, ????) <---?? 만약 위처럼 코드를 작성한다고 할때 멀티프로세스를 돌릴 함수의 인자가 여러개일 경우 인자(강의의 경우 WORK_LIST)를 어떤 식으로 넘겨야지 실행이 될까요?
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
안녕하세요 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 강의를 듣다가 궁금한 점이 한가지 생겼는데 def coroutine2(x): print('>>> coroutine stated:{}'.format(x)) y = yield x print('>>> coroutine received y:{}'.format(y)) z = yield x+y print('>>> coroutine received z:{}'.format(z)) cr3=coroutine2(30) print(next(cr3)) print(cr3.send(120)) 위 code는 선생님이 작성하신 code에서 숫자만 바꾼것입니다. 제가 잘 이해가 안가는건 위 code를 실행하였을때 출력이 >>> coroutine stated:30 30 >>> coroutine received y:120 150 이렇게 되잖아요? 그런데 아래처럼 print(next(cr3)) 를 추가하여 실행하면 def coroutine2(x): print('>>> coroutine stated:{}'.format(x)) y = yield x print('>>> coroutine received y:{}'.format(y)) z = yield x+y print('>>> coroutine received z:{}'.format(z)) cr3=coroutine2(30) print(next(cr3)) print(cr3.send(120)) print(next(cr3)) >>> coroutine stated:30 30 >>> coroutine received y:120 150 >>> coroutine received z:None Traceback (most recent call last): File "c:\python-ex\py.py", line 12, in <module> print(next(cr3)) StopIteration 이렇게 출력이 됩니다 그런데 전 빨간색 줄이 잘 이해가 안가요 ㅠㅠ z는 이미 150으로 값이 정해지지 않았나요? 그런데 왜 None으로 출력되는건가요
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
generator 예제 2번 질문입니다
def generator_ex1(): print('Start') yield 'A point' print('Continue') yield 'B point' print('End') 다음과 같이 코드 작성 후 temp2 = [x * 3 for x in generator_ex1()] 리스트 컴프리헨션을 실행하니 Start Continue End 라는 결과가 나왔습니다. 리스트 컴프리헨션 안의 generator_ex1()을 실행하면서 나온 결과라고 생각하는데요, 반면 위의 리스트 컴프리헨션을 지운 후 temp3 = (x * 3 for x in generator_ex1()) 다음과 같이 제너레이터 익스프레션 실행을 하여도 아무런 결과값이 나오지 않았습니다. 표현식 안의 generator_ex1()이 실행되지 않은 것으로 보이는데, 두 과정 사이에 어떤 차이가 있는 것인지 궁금합니다
- 미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
__iter__ 메소드와 for문 관련 질문입니다
stackoverflow에서 __iter__ 메소드 관련 질문을 보다 생긴 궁금증인데요 class Item: def __init__(self): self.name = 'James' def __iter__(self): return self 다음과 같은 코드를 작성했을때, 코드상에서 __iter__ 메소드는 self를 리턴하고 있지만 self 자체는 '__next__ 메소드가 구현된 iterator'가 아니므로 . 결국 __iter__ 메소드는 iterator를 리턴하지 못해 클래스 자체가 유효한 iterable 객체가 아니라는 설명을 볼 수 있었습니다. 하지만 a = Item() 다음과 같이 인스턴스를 생성하고 print(dir(a)) dir로 속성을 확인해 봤을 때 __iter__ 를 확인할 수 있었는데요, for i in a: print(i) 물론 다음과 같이 for문에서 사용했을 때 오류가 발생하는 것으로 보아 클래스 자체가 유효한 iterable 객체가 아님을 확인할 수 있었습니다. 다만 이런 사례처럼 유효하지 않은(invalid) iterable 객체라도 __iter__ 메소드를 가질 수 있는 것인지 궁금합니다.