他の記事の後に、その名前に基づいて変数に関する情報を出力する関数があります。私はそれをモジュールに移動したいと思います。変数をモジュール内の文字列として扱う
#python 2.7
import numpy as np
def oshape(name):
#output the name, type and shape/length of the input variable(s)
#for array or list
x=globals()[name]
if type(x) is np.array or type(x) is np.ndarray:
print('{:20} {:25} {}'.format(name, repr(type(x)), x.shape))
elif type(x) is list:
print('{:20} {:25} {}'.format(name, repr(type(x)), len(x)))
else:
print('{:20} {:25} X'.format(name, type(t)))
a=np.array([1,2,3])
b=[4,5,6]
oshape('a')
oshape('b')
出力:私はそれを再利用できるようにモジュールに()この関数oshapeを入れたい
a <type 'numpy.ndarray'> (3,)
b <type 'list'> 3
。ただし、モジュールを配置すると、メインモジュールからグローバルにアクセスすることはできません。私は 'import __main__'のようなものを試し、関数globals()を格納してそれをサブモジュールに渡すことさえしました。問題は、globals()が、呼び出されたモジュールのグローバルを返す関数であり、モジュールごとに異なる関数ではないということです。
import numpy as np
import olib
a=np.array([1,2,3])
b=[4,5,6]
olib.oshape('a')
olib.oshape('b')
は私を与える:
KeyError: 'a'
追加情報: 目標は、冗長なタイピングを減らすことです。わずかな変更では、oshapeは、変数のリストを報告する可能性が(私はそれが質問のために簡単にするためにそれを取った)ので、私はそれが好きで使用することができますで変数名を入力する必要
のでoshape('a', 'b', 'other_variables_i_care_about')
ソリューションを2倍は私が探しているものではありません。また、変数を渡すだけでは、名前を印刷することはできません。長いログファイルでこれを使用して、計算の結果を表示することを考えてください。&可変サイズをチェックしてください。
は、理由だけではなく、配列を渡していませんか? –
なぜ変数を直接渡してそのまま使うのですか? – njzk2
変数の名前を出力したいからです。私は print( 'a'、タイプ(a)、a.shape)のようなことをしていました。 しかし、それは面倒です。 – SolverWorld