我有python 3的代码无法按预期工作:
def addFunc(x,y):
print (x+y)
def subABC(x,y,z):
print (x-y-z)
def doublePower(base,exp):
print(2*base**exp)
def RootFunc(inputDict):
for k,v in inputDict.items():
if v[0]==1:
d[k] = addFunc(*v[1:])
elif v[0] ==2:
d[k] = subABC(*v[1:])
elif v[0]==3:
d[k] = doublePower(*v[1:])
d={"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]}
RootFunc(d)
#test to make sure key var assignment works
print(d)
我得到:
^{pr2}$我希望:
{'d2_30': 30, 's2_13': 13, 's1_7': 7, 'e1_3200': 3200, 'd1_6': 6}
怎么了?在
半相关的:我知道字典是无序的,但是python为什么选择这个顺序呢?它是否通过随机数发生器运行密钥?在
正如eReok所说,您使用的是“print”而不是“return”,这可能是您的错误源。至于排序,您已经知道字典是无序的,至少根据python-doc,排序不是随机的,而是作为哈希表实现的。在
摘录自python doc:[…]映射对象将哈希值映射到任意对象。映射是可变对象。目前只有一种标准映射类型dictionary。[…]
这里的关键是元素的顺序不是真的随机的。我经常注意到,无论我如何构建一个关于某些值的字典,顺序都保持不变。。。使用lambda或直接创建lambda,顺序始终保持不变,因此它不能是随机的,但绝对是任意的。在
print
不返回值。它返回None
,因此每次调用函数时,它们都会打印到标准输出并返回None
。尝试将所有print
语句更改为return
,如下所示:这将把值
x+y
返回给任何调用函数的对象。在代码的另一个问题(除非您打算这样做)是定义了一个字典},而不是“input”的字典:
^{pr2}$d
,然后当您定义函数时,您正在处理这个字典{您是否计划始终更改
d
并且而不是您正在迭代的字典inputDict
?在可能还有其他问题(例如,在函数中接受可变数量的参数),但最好一次解决一个问题。在
关于函数的附加说明:
下面是一些伪代码,试图传达函数的常用用法:
函数被认为是“黑匣子”,这意味着你要对它们进行结构,这样你就可以将一些数据转储到它们中,它们总是做同样的事情,你可以反复调用它们。它们将
return
值或yield
值,或更新某些值或属性或其他东西(后者称为“副作用”)。现在,只需注意return
语句。在另一个有趣的事情是函数有“scope”,这意味着当我用一个伪参数名来定义它时,实际上不需要有一个名为“some_data”的变量。我可以将我想要的任何东西传递给函数,但是在函数内部,我可以引用这个伪名称,并创建只在函数上下文中起作用的其他变量。在
现在,如果我们运行上面的函数,它将继续处理数据:
但是这通常是没有意义的,因为函数应该返回一些东西,而我没有对它返回的内容做任何事情。我应该把它的信息赋值给容器。在
这是使用函数的一种非常常见的方法,您可能还会再次看到它。在
解决问题的一种简单方法:
考虑到所有这些因素,这里有一种解决问题的方法,它来自于一个非常常见的编程范式:
相关问题 更多 >
编程相关推荐