擅长:python、mysql、java
<p>也可以使用局部变量方法,但要在函数顶部复制局部变量。最后,可以使用原始局部变量的键并仅选择return语句中的键:</p>
<pre><code>def foo(a=None, b=None, c=None):
original_locals = locals().copy()
d = 'test' #Test adding new variable which should not be returned
return {k:v for k,v in locals().items() if k in original_locals.keys() and v is not None}
foo(1)
>> {'a': 1}
foo(1, 2, 3)
>> {'a': 11, 'b': 2, 'c': 3}
</code></pre>
<p>请注意,必须复制局部变量,否则此方法将<em>无效</p>
<p>如果您还想添加<code>kwargs</code>:</p>
<pre><code>def func(a=None, b=None, c=None, **kwargs):
org_loc = locals().copy()
def check_kwargs(d):
if 'kwargs' in d.keys():
d.update(d['kwargs'])
del d['kwargs']
check_kwargs(org_loc)
d = 'test'
new_loc = locals()
check_kwargs(new_loc)
return {k:v for k,v in new_loc.items() if k in org_loc.keys() and v is not None}
</code></pre>
<p>然后:</p>
<pre><code>func(1)
>> {'a':1}
func(1, test='test')
>> {'a': 1, 'test': 'test'}
</code></pre>