0

どのコーディング スタイルが優れているか、正しいか、またその理由は? 各関数で assert ステートメントを使用する:

def fun_bottom(arg):
    assert isinstance(arg, int)
    #blah blah

def fun_middle(arg):
    assert isinstance(arg, int)
    fun_bottom(arg)
    #blah blah

def fun_top(arg):
    assert isinstance(arg, int)
    fun_middle(arg)
    #blah blah

それとも、fun_bottom 関数で arg の型がチェックされることがわかっているので、fun_middle と fun_top のアサーションを省略しますか? それとも別の解決策がありますか?

EDIT #1
ああ、誤解されていました。例として assert isinstance(arg, int) を使用しました。質問を書き直します:

どちらを使用するか:

オプション 1: 各関数で引数が関数の要件を満たしているかどうかを確認します。

def fun_bottom(arg):
    assert arg > 0
    #blah blah

def fun_middle(arg):
    assert arg > 0
    fun_bottom(arg)
    #blah blah

def fun_top(arg):
    assert arg > 0
    fun_middle(arg)
    #blah blah

オプション 2: 一番下の関数で引数がチェックされることがわかっているため、中間関数と最上位関数ではアサーションを行いません。

def fun_bottom(arg):
    assert arg > 0
    #blah blah

def fun_middle(arg):
    fun_bottom(arg)
    #blah blah

def fun_top(arg):
    fun_middle(arg)
    #blah blah
4

1 に答える 1

2

私は物事を行うためのよりpythonicな方法を提案します:

def fun_fun(some_int): # function that takes hopefully an int/float
    try: # not sure if we got the correct value
        return_value = some_int + 4 % 4 # mathz
        return return_value # return mathz
    except TypeError: # if we didn't get an int/float we'd get this
        return None # So you can return None or do what you like

参照: http://docs.python.org/2/tutorial/errors.html

編集:

多分あなたがしたい:

def fun_bottom(arg):
    if arg > 0:
        #blah blah
    else:
        #foo

アサートは、あなたが望んでいるマナーで使用されることは想定されていません

于 2013-05-14T22:23:30.540 に答える