0

たくさんの変数があり、検証用に設定されている変数の名前を取得する必要があります。例えば:

studio = 'Warner Brothers'
movie = ''
validation = [studio, movie]

validation_errors = []
for item in validation:
    if not item:
        validation_errors.append(name of variable)

上記の場合、結果は次のようになります。

validation_errors = ['movie']

口述を作成せずにこれを行う簡単な方法はありますか?

4

3 に答える 3

6

自分を傷つけないでください。辞書を使う。シンプルは複雑よりも優れています。

validation = {'studio': studio, 'movie': movie}
validation_errors = []
for key in validation:
    if not validation[key]:
        validation_errors.append(key)

辞書のようにローカル名前空間を使用したい場合は、99% の確率で辞書が必要です。

于 2012-04-26T19:27:44.183 に答える
0

やってはいけないことの例として(または、やらない理由のデモンストレーションとして)、次のコードを試してください。

def nameof(thing):
    i = id(thing)
    names = [n for n in globals().keys() if id(globals()[n]) == i]
    for name in names:
        if name[0] != '_':
            return name, names
    return names[0], names

あなたがそれを渡すものがグローバルであるか、グローバルにそれのように見える何かがある場合に限りますが、それはある程度機能します。また、文字列のインターンなどにより、あらゆる種類の奇妙な一致が返されます。

于 2012-04-26T19:40:19.437 に答える
0

Python が dict を作成する場合、それはカウントされますか?

studio = 'Warner Brothers'
movie = ''
validation = ['studio', 'movie']

validation_errors = []
for item in validation:
    if not locals()[item]:
        validation_errors.append(item)

ただし、辞書を自分で作成することをお勧めします。

studio = 'Warner Brothers'
movie = ''
validation = dict(studio=studio, movie=movie)

validation_errors = []
for var, value in validation.items():
    if not value:
        validation_errors.append(var)

そして、それから関数を作成したい場合:

def validate(**vars):
    errors = []
    for var, value in vars.items():
        if not value:
            errors.append(var)
    return errors

-->studio = 'Warner Brothers'
-->movie = ''
-->print validate(studio=studio, movie=movie)
['movie']
于 2012-04-26T19:42:48.733 に答える