回答:
これは、匿名ラムダ関数でモジュールを1回だけ使用する場合に便利です。別のステートメントを記述する必要がないためです。
lambda x:__import__('SomeModule').foo(x,123)
より1バイト短い
from SomeModule import*;f=lambda x:foo(x,123)
コードが名前の付いた関数またはプログラムである場合__import__、最も極端なまたは不自然な状況を除いて、役立つことはまずありません。
import、インデントされたブロック内で呼び出される時間がありますか?おそらくない。
                    十分に長い名前の複数のモジュールをインポートする場合、__import__関数を短い変数に割り当ててインポートに使用すると役立つ場合があります
通常のインポート文-97バイト
itertools import *から 日時インポートから* リストの印刷(permutations( "abc")) datetime.now()を出力します
-94バイト__import__への割り当てi:
i = __ import__ print list(i( "itertools")。permutations( "abc")) print i( "datetime")。datetime.now()
__import__("x").doSomething()長さの名前を持つモジュールを参照するには、15 + x文字が必要です 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)文字をzのn回使用します。これは、zを1にすることができるため、yが大きい場合は大幅に改善されます。
__import__("x").doSomething()1文字より短いことがわかりましたfrom x import*;doSomething()。たぶん、あなたは改行を2文字として数えていますか?そして、損益分岐点が5で、timeとの間にあることを思い出しrandomます。
                    z=__import__("x").yバイトより短いfrom x import y as z
                    from x import*;z=y。
                    
__import__インデントされたブロックの内部にあるため、名前付き関数の内部に役立ちます。インポートは2行でインデントされているため、追加料金がかかります。(これは、関数の外部でインポートが許可されていないことを前提としています。)