[解決済み] import文の変更点 python3
質問
以下の文章が理解できません。 pep-0404
Python 3 では、パッケージ内の暗黙の相対インポートはなくなりました。 絶対インポートと明示的相対インポートのみ利用可能です。 がサポートされています。また、スターインポート(例: from x import *)もサポートされています。 モジュールレベルのコードで許可されています。
相対インポートとは何ですか? python2では他にどのような場所でスターインポートが許可されていましたか? 例を挙げて説明してください。
どのように解決するのですか?
相対インポートは、現在のスクリプト/パッケージから相対的にパッケージをインポートするときに発生します。
例えば次のようなツリーを考えてみましょう。
mypkg
├── base.py
└── derived.py
さて、あなたの
derived.py
には、以下のものが必要です。
base.py
. Python 2 では、次のようにすることができます (
derived.py
):
from base import BaseThing
Python 3 では、'relative' と 'absolute' のどちらが必要かが明示されていないため、サポートされなくなりました。
base
. 言い換えれば、もしPythonのパッケージで
base
がインストールされている場合、間違ったものが表示されます。
代わりに、それはあなたが
明示的なインポート
これは、モジュールの場所をパスライクに明示的に指定するものです。あなたの
derived.py
は次のようになります。
from .base import BaseThing
先頭の
.
は、「インポート
base
from module directory' ;言い換えれば
.base
は
./base.py
.
同様に、そこには
..
のようなディレクトリ階層を上がる接頭辞があります。
../
(ただし
..mod
へのマッピングは
../mod.py
を含む)、そして
...
で、2つ上の階層に行く(
../../mod.py
というように。
ただし、上記の相対パスは、現在のモジュール(
derived.py
) に存在する。
ではなく
は、現在の作業ディレクトリです。
ブレンバーン は、すでにスターインポートのケースを説明しています。念のため、私も同じことを言わなければならないでしょう;)。
例えば、いくつかの
math
関数の中でしか使用しません。Python 2 では、半端な怠惰が許されていました。
def sin_degrees(x):
from math import *
return sin(degrees(x))
Python 2ではすでに警告が発生することに注意してください。
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
最近のPython 2のコードではそうすべきですが、Python 3ではどちらかを行わなければなりません。
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
または
from math import *
def sin_degrees(x):
return sin(degrees(x))
関連
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Python入門 openを使ったファイルの読み書きの方法
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] from __future__ import absolute_import は実際に何をするのですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] フルパスでモジュールをインポートするには?
-
[解決済み] 億の相対的輸入
-
[解決済み] モジュール名を文字列で指定してインポートするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
PythonはWordの読み書きの変更操作を実装している
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない