[解決済み] この奇妙な大腸の動きは何なのか?
質問
Python 3.6.1を使っているのですが、とても不思議なことに出くわしました。私は単純な辞書の割り当てのtypoがあり、それを見つけるのに長い時間がかかりました。
context = {}
context["a"]: 2
print(context)
出力
{}
どのようなコードかというと
context["a"]: 2
は何をしているのでしょうか?これは
SyntaxError
を発生させません。最初はスライスを作っているのかと思いました。しかし
repr(context["a"]: 2)
と入力すると
SyntaxError
. また
context["a"]: 2
と入力しても、コンソールには何も表示されませんでした。私は、もしかしたらそれが
None
を返したのかと思いましたが、そうでもないようです。
1行のif文でもいいのではとも思いましたが、それも正しい構文ではないはずです。
さらに
context["a"]
を発生させる必要があります。
KeyError
.
私は当惑しています。どうなっているのでしょうか?
どうすれば解決するのでしょうか?
誤って構文的に正しい 変数アノテーション . この機能は Python 3.6 で導入されました ( PEP 526 ).
変数アノテーションは アノテーションされた代入 の一部として解析されますが、代入文は 任意 :
annotated_assignment_stmt ::= augtarget ":" expression ["=" expression]
このように
context["a"]: 2
-
context["a"]
はアノテーションの対象 -
2
はアノテーション自身です。 -
context["a"]
は初期化されないまま
PEP では、次のように記述されています。
"アノテーションのターゲットは、少なくとも構文的には、任意の有効な単一の割り当てターゲットにすることができます(これをどうするかはタイプチェッカー次第です)"。
これは、アノテーションを付けるためにキーが存在する必要がないことを意味します (そのため
KeyError
). 以下は、オリジナルの PEP からの例です。
d = {}
d['a']: int = 0 # Annotates d['a'] with int.
d['b']: int # Annotates d['b'] with int.
通常、アノテーション式 が必要です。 はPythonの型に評価されます。 アノテーションの主な用途は型ヒンティングですが、強制されるわけではありません。アノテーションは任意の 有効な アノテーションは、結果の型や値に関係なく、任意の有効なPython式です。
ご覧の通り、現時点では型ヒントは非常に寛容であり、以下のような静的型チェッカがない限り、ほとんど役に立ちません。 mypy .
関連
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] Python 3 の "python -m SimpleHTTPServer" に相当するものは何ですか?
-
[解決済み] setup.pyとは何ですか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] バブルソートの宿題
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] 変数アノテーションとは何ですか?