[解決済み] Pythonで関数を前方に宣言することは可能ですか?
質問
Pythonで関数を前方に宣言することは可能ですか? 私は私自身のものを使用してリストを並べ替えたい
cmp
関数が宣言される前に
print "\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)])
の定義を置くようにコードを整理しました。
cmp_configs
メソッドを呼び出した後です。 このエラーで失敗します。
NameError: name 'cmp_configs' is not defined
を宣言する方法はありますか?
cmp_configs
メソッドが使用される前に、そのメソッドが使用されますか? そうすれば、私のコードはよりきれいに見えるようになりますか?
この問題が起きないように、コードを再編成すればいいじゃないか、と言いたくなる人もいると思うんです。 しかし、例えば、ある種の再帰を実装する場合など、おそらく避けられないケースもある。 もしこの例が気に入らないのなら、私が 本当に 関数を前方に宣言する必要があります。
Pythonで関数の前方宣言が必要なケースを考えてみましょう。
def spam():
if end_condition():
return end_result()
else:
return eggs()
def eggs():
if end_condition():
return end_result()
else:
return spam()
ここで
end_condition
と
end_result
は事前に定義されています。
解決策としては、コードを再編成して、常に起動の前に定義を置くしかないのでしょうか?
どのように解決するのですか?
関数を定義したくない場合 前に が使用され、それを定義すると その後 は無理なので、他のモジュールで定義するのはどうでしょうか?
技術的にはまだ最初に定義することになりますが、クリーンです。
次のような再帰を作ることができます。
def foo():
bar()
def bar():
foo()
Pythonの関数は、値が匿名であるのと同じように匿名ですが、名前に束縛することができます。
上記のコードで
foo()
は foo という名前の関数を呼び出しているわけではなく、たまたま
foo
を呼び出した時点で を再定義することは可能です。
foo
を他の場所で使用し
bar
は新しい関数を呼び出すことになります。
宣言されていない変数を取得しろというようなものですから、あなたの問題は解決できません。
関連
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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 カメの描画コマンドとその例
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac