据我所知,我可以使用返回迭代器for的__iter__方法在对象上使用循环构造.我有一个对象,我实现了以下__getattribute__方法:
def __getattribute__(self,name):
if name in ["read","readlines","readline","seek","__iter__","closed","fileno","flush","mode","tell","truncate","write","writelines","xreadlines"]:
return getattr(self.file,name)
return object.__getattribute__(self,name)
Run Code Online (Sandbox Code Playgroud)
我有这个类的对象,a发生以下情况:
>>> hasattr(a,"__iter__")
True
>>> for l in a: print l
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'TmpFile' object is not iterable
>>> for l in a.file: print l
...
>>>
Run Code Online (Sandbox Code Playgroud)
所以python看到a有一个__iter__方法,但不认为它是可迭代的.我做错了什么?这是python 2.6.4.
在下面的示例代码中,我想要生成一个指示,表明预定义的数字列表是否与我正在循环的迭代匹配或不匹配.这是我的问题的简化示例.
不幸的是,我的代码不符合我的期望,可能我错过了一些简单的东西.在我的实际应用中,这是通过具有不同输出的极大的一维阵列来完成的,但是这以简单的文本方式展示了它,易于重现.
也许我还应该补充说我正在使用Python 2.7.5.
match = [1, 3, 4]
volumes=10
def vector_covariates(match, volumes):
for i in range(volumes):
if i == match:
print "[*]"
else:
print "[ ]"
vector_covariates(match, volumes)
Run Code Online (Sandbox Code Playgroud)
运行时,输出:
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
Run Code Online (Sandbox Code Playgroud)
而"正确"的输出应该是
[*]
[ ]
[*]
[*]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
Run Code Online (Sandbox Code Playgroud) 让我们考虑以下定义,以将 Int 的嵌套 Iterable 结构中的所有元素相加:
def add(xss : Iterable[Iterable[Int]]) : Int = xss.map(_.sum).sum
Run Code Online (Sandbox Code Playgroud)
但是,计算以下表达式会产生类型错误:
scala> add(Array(Array(1,2,3)))
<console>:9: error: type mismatch;
found : Array[Array[Int]]
required: Iterable[Iterable[Int]]
add(Array(Array(1,2,3)))
^
Run Code Online (Sandbox Code Playgroud)
该函数与其他可迭代对象(如列表)一起按预期工作。我怎样才能避免这个错误?这样做的理由是什么?猜测这与 Java 原生的数组有关,但不知道这种情况下的具体细节。
谢谢
我有一个dict如下:
values = {'A1' : '123456', 'B1' : 123456, ....}
Run Code Online (Sandbox Code Playgroud)
我知道迭代的正确方法是:
for key, value in values.items():
#do what you want
Run Code Online (Sandbox Code Playgroud)
错误,我忘记添加.items(),所以我开始变得奇怪KeyError
我尝试打印,但它只获取每个字符串的第一个字符并将其分配给key和value
我的问题是:为什么 python 这样做?幕后发生了什么?
我有两个集合,我想返回一个 IEnumerable,它是它们的串联。返回的枚举应该是惰性的,不应该修改两个初始集合(所以,我不想将两个集合复制为一个然后返回结果,因为那不是惰性的)
下面的代码是我想用 Java 实现但用 c# 编写的示例:
public static IEnumerable<int> all()
{
List<int> list1 = new List<int>() { 1, 2, 3 };
List<int> list2 = new List<int>() { 4, 5, 6 };
return list1.Concat(list2);
}
Run Code Online (Sandbox Code Playgroud) 我已经在 angular 中创建了一个类,现在当我通过商店订阅获取一个对象时,虽然它返回一个对象数组,但我不能在返回的对象上使用 forEach 循环。
是的,我使用了Object.keys(user).forEach(){..}它正在工作,但我想通过使类 Iterable 来做同样的事情。如何做到这一点。
示例代码:-
class user {
...
}
ngOnInit(){
storeSubsc = this.store.select('users').subscribe(user => {
this.user = user;
});
}
login(){
Object.keys(this.user).forEach()... --> working fine
I want it like
this.user.forEach() {... }
}
Run Code Online (Sandbox Code Playgroud)
提前致谢...
我正在尝试为下面的函数分配一个返回类型:
async function *sleepyNumbers() { // what TypeScript type is this?
let n = 0;
while (true) {
yield new Promise(resolve => resolve(n++));
await new Promise(resolve => setTimeout(resolve, 500));
}
}
(async () => {
for await (const i of sleepyNumbers())
console.log(i);
})();Run Code Online (Sandbox Code Playgroud)
生成器正在生成一个解析为number. 将类型设置为Promise<number>失败并显示以下错误消息:
TS2739:“AsyncGenerator”类型缺少“Promise”类型中的以下属性:然后,捕获,[Symbol.toStringTag],最后
Iterable 导致了类似的错误。
我可以将类型设置为,AsyncGenerator但这还不够具体。此函数的返回类型的正确 TypeScript 语法是什么?
我需要的索引号的forEach,因为我想更新我的数据表可迭代的值。但是为了更新数据表,我需要列 ID。这就是为什么我想要每个值的索引号并将其分配给 > i。有类似的问题解释了如何获取可迭代的索引。但就我而言,我无法映射CallLogEntry,这就是为什么我无法获得此可迭代值的索引的原因。
Future callLogDB() async {
Iterable<CallLogEntry> cLog = await CallLog.get();
final dbHelper = DatabaseHelper.instance;
int i = 0;
cLog.forEach((log) async {
i++;
// row to insert
Map<String, dynamic> row = {
//DatabaseHelper.columnId: 2,
DatabaseHelper.columnName: '${log.name}',
DatabaseHelper.columnNumber: '${log.number}',
DatabaseHelper.columnType: '${log.callType}',
DatabaseHelper.columnDate:
'${DateTime.fromMillisecondsSinceEpoch(log.timestamp)}',
DatabaseHelper.columnDuration: '${log.duration}'
};
await dbHelper.insert(row);
print('CallLog $i:: $row');
});
return cLog;
}
Run Code Online (Sandbox Code Playgroud) iterable ×10
python ×4
dart ×2
flutter ×2
typescript ×2
angular ×1
arrays ×1
containers ×1
database ×1
enumerable ×1
for-loop ×1
foreach ×1
generator ×1
iterator ×1
java ×1
lazy-loading ×1
list ×1
loops ×1
python-2.7 ×1
scala ×1