<p><code>print</code>不返回值。它返回<code>None</code>,因此每次调用函数时,它们都会打印到标准输出并返回<code>None</code>。尝试将所有<code>print</code>语句更改为<code>return</code>,如下所示:</p>
<pre><code> def addFunc(x,y):
return x+y
</code></pre>
<p>这将把值<code>x+y</code>返回给任何调用函数的对象。在</p>
<p>代码的另一个问题(除非您打算这样做)是定义了一个字典<code>d</code>,然后当您定义函数时,您正在处理这个字典{<cd7>},而不是“input”的字典:</p>
^{pr2}$
<p>您是否计划始终更改<code>d</code>并且<em>而不是</em>您正在迭代的字典<code>inputDict</code>?在</p>
<p>可能还有其他问题(例如,在函数中接受可变数量的参数),但最好一次解决一个问题。在</p>
<hr/>
<p><strong>关于函数的附加说明:</strong></p>
<p>下面是一些伪代码,试图传达函数的常用用法:</p>
<pre><code>def sample_function(some_data):
modified_data = []
for element in some_data:
do some processing
add processed crap to modified_data
return modified_data
</code></pre>
<p>函数被认为是“黑匣子”,这意味着你要对它们进行结构,这样你就可以将一些数据转储到它们中,它们总是做同样的事情,你可以反复调用它们。它们将<code>return</code>值或<code>yield</code>值,或更新某些值或属性或其他东西(后者称为“副作用”)。现在,只需注意<code>return</code>语句。在</p>
<p>另一个有趣的事情是函数有“scope”,这意味着当我用一个伪参数名来定义它时,实际上不需要有一个名为“some_data”的变量。我可以将我想要的任何东西传递给函数,但是在函数内部,我可以引用这个伪名称,并创建只在函数上下文中起作用的其他变量。在</p>
<p>现在,如果我们运行上面的函数,它将继续处理数据:</p>
<pre><code> sample_function(my_data_set)
</code></pre>
<p>但是这通常是没有意义的,因为函数应该返回一些东西,而我没有对它返回的内容做任何事情。我应该把它的信息赋值给容器。在</p>
<pre><code>my_modified_data = sample_function(my_data_set)
</code></pre>
<p>这是使用函数的一种非常常见的方法,您可能还会再次看到它。在</p>
<hr/>
<p><strong>解决问题的一种简单方法:</strong></p>
<p>考虑到所有这些因素,这里有一种解决问题的方法,它来自于一个非常常见的编程范式:</p>
<pre><code>def RootFunc(inputDict):
temp_dict = {}
for k,v in inputDict.items():
if v[0]==1:
temp_dict[k] = addFunc(*v[1:])
elif v[0] ==2:
temp_dict[k] = subABC(*v[1:])
elif v[0]==3:
temp_dict[k] = doublePower(*v[1:])
return temp_dict
inputDict={"s1_7":[1,5,2],"d1_6":[2,12,3,3],"e1_3200":[3,40,2],"s2_13":[1,6,7],"d2_30"[2,42,2,10]}
final_dict = RootFunc(inputDict)
</code></pre>