我想知道是否可以在調用它之前列出Python函數期望的變量,以便從包含大量變量的更大的字典中傳遞期望的變量。Python中函數期望的列表變量?
我搜查了網絡,但找不到任何東西。然而,python解釋器可以顯示預期變量的列表,所以在腳本中肯定有一些方法可以做到這一點?
我想知道是否可以在調用它之前列出Python函數期望的變量,以便從包含大量變量的更大的字典中傳遞期望的變量。Python中函數期望的列表變量?
我搜查了網絡,但找不到任何東西。然而,python解釋器可以顯示預期變量的列表,所以在腳本中肯定有一些方法可以做到這一點?
可以使用inspect.getargspec()
function:
import inspect
argspec = inspect.getargspec(somefunction)
argspec
是一個名爲元組有4個要素:
*args
參數的名稱列表,如果定義(None
,否則)**kwargs
第如果定義(None
,否則)演示:
>>> import inspect
>>> def foo(bar, baz, spam='eggs', *monty, **python): pass
...
>>> inspect.getargspec(foo)
ArgSpec(args=['bar', 'baz', 'spam'], varargs='monty', keywords='python', defaults=('eggs',))
正如一個側面回答,我現在用另一種方式傳遞給函數,他們希望中的變量:我通過他們的。
我的意思是,我保持一種全球性的/我的根對象(這是所有其他對象的父)共享dictionnary的變量,例如:
shareddict = {'A': 0, 'B':'somestring'}
然後,我只是通過這個字典任何其他對象的任何方法被調用,就像這樣:
shareddict.update(call_to_func(**shareddict))
正如你所看到的,我們打開所有在shareddict鍵/值作爲關鍵字參數call_to_func()。我們還更新了返回的結果,我們將在下面看到原因。
本TECHNIC現在,我可以簡單明瞭地在我的函數定義/方法,如果我需要從這個字典的一個或幾個變量:
my_method1(A=None, *args, **kwargs):
''' This method only computes on A '''
new_A = Do_some_stuff(A)
return {'A': new_A} # Return the new A in a dictionary to update the shared value of A in the shareddict
my_method2(B=None, *args, **kwargs):
''' This method only computes on B '''
new_B = Do_some_stuff(B)
return {'B': new_B} # Return the new B in a dictionary to update the shareddict
my_method3(A=None, B=None, *args, **kwargs):
''' This method swaps A and B, and then create a new variable C '''
return {'A': B, 'B': A, 'C': 'a_new_variable'} # Here we will update both A and B and create the new variable C
正如你可以看到,上述所有回報的字典的方法的變量,這將更新shareddict,並將傳遞給其他函數。
這TECHNIC有幾個優點:
完美,正是我所需要的!非常感謝您的詳細解釋。但是,您能否詳細解釋一下「默認值」?我無法理解這些可以如何與「args」匹配 – gaborous 2013-03-26 22:18:11
說'len(argspec.defaults)'是3,那麼這些默認屬於'argspec.args'中列出的最後三個參數名稱。在我的例子中,'argspec.defaults'中只有* one *項,因此它屬於'argspec.args',''spam''中的最後一項。如果有2個,那麼它們就會成爲''baz''和''spam''的默認值,等等。 – 2013-03-26 23:20:30
我看到,默認值只是最後n個關鍵字變量的開始,因爲對於非關鍵字變量沒有默認值)必須在關鍵字變量之前聲明。因此無法混淆它們。非常感謝Martijn。 – gaborous 2013-04-04 20:25:39