这是我的代码:
class a(object):
d='ddd'
def __contains__(self):
if self.d:return True
b=a()
print b.contains('d') # error
print contains(b,'d') # error
Run Code Online (Sandbox Code Playgroud) 在 Python 中,众所周知,在检查迭代器(列表、字典等)中的成员资格并在字符串中查找子字符串。我的问题是关于如何实现in以实现以下所有内容:1) 测试成员资格,2) 测试子字符串和 3) 访问 for 循环中的下一个元素。例如,当for i in myList:或if i in myList:被执行时,in callmyList.__next__()吗?如果它确实调用了它,那么它如何处理字符串,因为str对象不是迭代器(如在 Python 2.7 中检查的那样),因此没有next()方法?如果无法详细讨论in的实现,请在此处提供其要点。
来自 Swift,我在使用 .None 类型的 Python 时遇到了一些困难。None如果在数组中找不到我要查找的对象,我有一些函数可能会返回。
然后我必须按如下方式嵌套我的代码:
varA = self.getVariableByName(Variables.varA)
if varA is None:
varB = self.getVariableByName(Variables.varB)
varC = self.getVariableByName(Variables.varC)
if varB is not None and varC is not None:
# Do something with varB and varC
Run Code Online (Sandbox Code Playgroud)
在 Swift 中,我曾经能够在 if 语句中绑定变量
let f = getVariableByName
if f(Variables.varA) == nil, let varB = f(Variables.varB), let varC = f(Variables.varC) {
// Do something with varB and varC
}
Run Code Online (Sandbox Code Playgroud)
什么是更“pythonic”的处理方式None?
我从这个代码片段开始,根据我的理解,它实际上是一个类别工厂,可以模拟其他语言的"枚举"类型:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
return type('Enum', (), enums)
Run Code Online (Sandbox Code Playgroud)
(我从这里拿走:我如何在Python中表示'Enum'?)
我知道它是如何工作的,它确实如此,但是我想让我的动态生成的类,类型为'Enum',可迭代,以便我可以执行以下操作以进行完整性检查:
MyEnum = enum('FOO', 'BAR', 'JIMMY')
def func(my_enum_value): # expects one of the MyEnum values
if not my_enum_value in MyEnum:
raise SomeSortOfException
Run Code Online (Sandbox Code Playgroud)
但是,为了使完整性检查工作,我需要使MyEnum可迭代.我读到这里:http://pydanny.blogspot.com/2007/10/required-methods-to-make-class-iterable.html,我需要添加ITER LEN 包含和的GetItem方法来东西,以使其可迭代.我开始走这条路(改写枚举代码)但被卡住了:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
enums['_enums'] = enums.copy() # (so I'd have them in the Class in order to use for the methods I'll be implementing to make it iterable) …Run Code Online (Sandbox Code Playgroud) 我要修改什么魔法方法来支持in操作员。这是我正在尝试做的事情的一个例子:
class DailyPriceObj:
def __init__(self, date, product_id=None):
self.date = date
self.product_id = product_id
self.sd_buy = None
l = list()
l.append(DailyPriceObj(date="2014-01-01"))
DailyPriceObj(date="2014-01-01") in l # how to get this to return True?
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望我的对象“像”date属性一样工作,所以我可以使用它来查看它是否obj在可交互中(date这里应该是一个唯一的字段)。
在python中有"in"方法的魔术方法吗?例如,
y = [5, 4, 3, 2,1]
5 in y #returns true
Run Code Online (Sandbox Code Playgroud)
如果是的话,它是什么,如果不是,那将如何实现它.