답변:
익명 람다 함수에서 모듈을 한 번만 사용하려는 경우 별도의 명령문을 작성하지 않아도되므로 유용합니다.
lambda x:__import__('SomeModule').foo(x,123)
1 바이트보다 짧다
from SomeModule import*;f=lambda x:foo(x,123)
코드가 명명 된 함수 또는 프로그램 __import__
인 경우, 가장 극단적이거나 고려 된 상황을 제외하고는 도움이되지 않습니다.
import
들여 쓰기 된 블록 안에서 호출 될 시간 이 있습니까? 아마 아닙니다.
이름이 충분히 긴 여러 모듈을 가져올 때 __import__
함수를 더 짧은 변수 에 할당하고 가져 오기에 사용하면 도움이 될 수 있습니다
일반 가져 오기 문-97 바이트
itertools에서 가져 오기 * 날짜 / 시간에서 가져 오기 * 인쇄 목록 (순열 ( "abc")) datetime.now () 인쇄
할당 __import__
에 i
- 94 바이트 :
i = __ import__ 인쇄 목록 (i ( "itertools"). permutations ( "abc")) 인쇄 i ( "datetime"). datetime.now ()
__import__("x").doSomething()
길이 x 의 이름을 가진 모듈을 나타내려면 15+ x 문자가 필요합니다 .
import x\nx.doSomething()
9 + 2 * x 문자 가 필요 합니다. 이러한 함수는 x = 6 에서 겹치므로이 방법과 비교하여 이름이 긴 모듈을 사용하는 것이 더 좋습니다 __import__
.
그러나 from x import*\ndoSomething()
14+ x 문자 만 필요 하므로 일반 가져 오기와 비교할 때 모듈 이름이 5자를 초과하지 않는 한 가치가 없습니다.
이것은 모두 함수 / 클래스 / 무엇을 한 번만 참조한다고 가정합니다. 두 번 이상 참조하면 수식이 변경되고 후자 버전이 승자가 될 수 있습니다. 가져온 모듈에서 오랫동안 무언가를 사용하면 다른 버전이 승리합니다.
from x import y as z
그물하면 18 + X + Y +에서 의 Z * ( N + 1) 문자의 N 의 사용 Z 경우 큰 개선, Y가 크기 때문에, Z는 1로 할 수있다.
__import__("x").doSomething()
보다 짧은 하나의 문자를 찾습니다 from x import*;doSomething()
. 아마도 당신은 줄 바꿈을 두 문자로 간주합니까? 그리고 손익분기 점, 5 인 사이에 떨어지는 불러 time
와 random
.
z=__import__("x").y
바이트보다 짧습니다from x import y as z
from x import*;z=y
.
__import__
들여 쓰기 된 블록 안에 있기 때문에 명명 된 함수 내부에 도움이됩니다. 수입은 두 줄로되어 있고 들여 쓰기 때문에 추가 비용이 듭니다. (이것은 수입품이 기능 밖에서 허용되지 않는다고 가정합니다.)