[解決済み] Pythonで "#ifdef "を実装するには?
2022-02-10 11:55:01
質問
でのプログラミング
C
以前は、デバッグ目的(ロギングコマンドなど)だけに使うコードセクションがありました。これらのステートメントは、実稼働時には
#ifdef
のようなプリプロセッサーディレクティブがあります。
#ifdef MACRO
controlled text
#endif /* MACRO */
で同様のことをする場合、どのような方法があるのでしょうか?
python
?
解決方法は?
ロギングメソッドを無効にしたいだけなら
logging
モジュールを使用します。ログレベルが、例えばデバッグ文などを除外するように設定されている場合は
logging.debug
は、ほとんど何もしません (ログレベルをチェックし、ログ文字列を補間せずに戻ります)。
バイトコードコンパイル時に、特定の変数を条件としてコードの塊を実際に削除したい場合、唯一の選択肢は、かなり謎めいた
__debug__
グローバル変数です。この変数に
True
がない限り
-O
フラグがPythonに渡される(または
PYTHONOPTIMIZE
が空でないものに設定されている環境であること。)
もし
__debug__
の中で使用されている
if
ステートメントを使用する場合、その
if
ステートメントは、実際には
True
という分岐があります。この特別な最適化は、Pythonが持つプリプロセッサマクロに近いものです。
マクロと違って、コードは
if
.
を示すために
__debug__
が動作する、次の2つの関数を考えてみましょう。
def f():
if __debug__: return 3
else: return 4
def g():
if True: return 3
else: return 4
でチェックしてみてください。
dis
:
>>> dis.dis(f)
2 0 LOAD_CONST 1 (3)
3 RETURN_VALUE
>>> dis.dis(g)
2 0 LOAD_GLOBAL 0 (True)
3 JUMP_IF_FALSE 5 (to 11)
6 POP_TOP
7 LOAD_CONST 1 (3)
10 RETURN_VALUE
>> 11 POP_TOP
3 12 LOAD_CONST 2 (4)
15 RETURN_VALUE
16 LOAD_CONST 0 (None)
19 RETURN_VALUE
ご覧のように
f
は最適化されています。
関連
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
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 implement mysql add delete check change サンプルコード
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない