我是python的新手并且正在尝试创建一个以值为功能的字典。这是我的代码
import os
class Foo():
def print1(self,n):
print 5
def print2(self,n):
print 6
def foo(self):
bar = {'a': self.print1, 'b': self.print2}
bar['b'](5)
bar['a'](3)
bar[os.environ['FOO']]()
f = Foo()
f.foo()
Traceback (most recent call last):
File "test_dict.py", line 17, in <module>
f.foo()
File "test_dict.py", line 13, in foo
bar[b]()
python test_dict.py
6
5
Traceback (most recent call last):
File "test_dict.py", line 19, in <module>
f.foo()
File "test_dict.py", line 15, in foo
bar[os.environ['FOO']]()
TypeError: print2() takes exactly 2 arguments (1 given)
答案 0 :(得分:1)
print1
不会将函数存储为字典中的值。
它调用函数print2
和print
并存储它们的返回值。由于这两项功能仅{'a': None, 'b': None }
并且不会返回任何内容,因此您会收到字典NoneType
,这就是您获得bar = {'a': self.print1, 'b': self.print2 }
例外的原因。
相反,你应该这样做:
bar['b'](5)
>> 5
然后:
df <- merge(DF1, DF2, by = c("date", "id"))
df$newcolumn <- ifelse(is.na(df$column.y), df$column.x, df$column.y, all.x = TRUE)
答案 1 :(得分:0)
试试这段代码:
class Foo():
def print1(self,n):
print 6
def print2(self,n):
print n
def foo(self):
bar = {'a': self.print1, 'b': self.print2 }
bar['b'](5)
bar['a'](3)
f = Foo()
f.foo()
它做你想要的。
答案 2 :(得分:-1)
你这样做,函数被调用并且结果被存储(因为你不返回任何内容,这是None),如果你想让函数可以这样调用,你可以写一个{围绕它{1}}或使用lambda