1. ホーム
  2. debugging

[解決済み] 好きな言語を選んでください] のプログラム中のすべての変数を列挙してください [終了]。

2023-07-14 05:34:33

質問

先週、友人がデバッグの目的で、プログラム/関数/その他内のすべての変数を列挙または一覧表示する方法を尋ねました(本質的に、すべてのスナップショットを取得して、どの変数に設定されているか、またはそれらがまったく設定されていないかを確認することができます)。私は少し見て回り、Pythonのための比較的良い方法を見つけました。

#!/usr/bin/python                                                                                                                                                                                                                           
foo1 = "ハローワールド"
foo2 = "バー"
foo3 = {"1":"a",
        "2":"b"}です。
foo4 = "1+1"

for name in dir():
    myvalue = eval(name)
    print name, "is", type(name), "and is equal to ", myvalue

というような出力になります。

builtins__ は <type 'str'> で、 <module '__builtin__' (built-in)> と等しいです。
__doc__ は <type 'str'> で、None と等しい。
__file__ は <type 'str'> であり、 ./foo.py と等しい。
__name__ は <type 'str'> で、__main__ と等しい。
foo1 は <type 'str'> であり、Hello world と等しい。
foo2 は <type 'str'> で、bar と等しい。
foo3 は <type 'str'> で、 {'1': 'a', '2': 'b'} と等しい。
foo4 は <type 'str'> で、1+1 に等しい。

私は今のところ、PHPで部分的な方法を見つけました(提供:PHPの リンクテキスト のおかげで)、それはすべての変数とその型をリストするだけで、中身はリストされません。

<?php
// いくつかの変数を作成します
$bar = 'foo';
$foo ='bar';
// 新しい配列オブジェクトを作成します
$arrayObj = new ArrayObject(get_defined_vars());
// 配列オブジェクトをループし、変数と値をエコーします
for($iterator = $arrayObj->getIterator(); $iterator->valid(); $iterator->next()); // 配列オブジェクトをループし、変数と値を echo します。
        {
        echo $iterator->key() . ' => ' . $iterator->current() . '<br />』となります。
        }
?>

あなたの好きな言語で、すべての変数とその内容をリストアップするにはどうしたらいいでしょうか?


編集者 VonC : この質問は、ちょっとした"の精神に則って提案します。 コード・チャレンジ "です。

もし同意できない場合は、編集してタグとリンクを削除してください。

どのように解決するのですか?

Pythonでは、ローカルバインディングをすべて含む辞書を返すlocalsを使用することで、evalを回避することができます。

>>> foo1 = "Hello world"
>>> foo2 = "bar"
>>> foo3 = {"1":"a",
...         "2":"b"}
>>> foo4 = "1+1"

>>> import pprint
>>> pprint.pprint(locals())
{'__builtins__': <module '__builtin__' (built-in)>,
 '__doc__': None,
 '__name__': '__main__',
 'foo1': 'Hello world',
 'foo2': 'bar',
 'foo3': {'1': 'a', '2': 'b'},
 'foo4': '1+1',
 'pprint': <module 'pprint' from '/usr/lib/python2.5/pprint.pyc'>}