首页 > Python基础教程 >
-
如何遍历python中的对象属性
这篇文章主要介绍了如何遍历python中的对象属性问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
遍历python中的对象属性
python开发中有时候需要遍历某对象的属性list
class Person(object):
"""
职员信息
"""
name = 0
age = 1
id = 2
group = 3
attr = [a for a in dir(Person) if not a.startswith('__')]
for a in attr:
print(a, getattr(Person, a))
"""
age 1
group 3
id 2
name 0
"""
迭代器自定义遍历对象
要说起迭代器自定义遍历对象,首页要知道什么是迭代器?
生成器 概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中。Iterator可以使我们不需要初始化集合,以及索引的变量,而是使用迭代器对象的 next 方法,返回集合的下一项的值,偏向程序化。
迭代器 是带有特殊接口的对象。含有一个next()方法,调用返回一个包含两个属性的对象,分别是value和done,value表示当前位置的值,done表示是否迭代完,当为true的时候,调用next就无效了。
ES5中遍历集合通常都是 for循环,数组还有 forEach 方法,对象就是 for-in,ES6 中又添加了 Map 和 Set,而迭代器可以统一处理所有集合数据的方法。迭代器是一个接口,只要你这个数据结构暴露了一个iterator的接口,那就可以完成迭代。
ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>迭代器</title>
</head>
<body>
<script>
//声明一个数组
const xiyou = ['唐僧','孙悟空','猪八戒','沙僧'];
//使用 for...of 遍历数组
// for(let v of xiyou){
// console.log(v);
// }
let iterator = xiyou[Symbol.iterator]();
//调用对象的next方法
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
</script>
</body>
</html>
如上所示,可以使用 for...of 遍历数组,直接得到值的遍历。也可以使用迭代器的方式进行遍历。
迭代器自定义遍历对象遍历对象中的某一个属性?
举例:使用for..of遍历banji中stus数组?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自定义遍历数据</title>
</head>
<body>
<script>
//声明一个对象
const banji = {
name: "终极一班",
stus: [
'xiaoming',
'xiaoning',
'xiaotian',
'knight'
],
[Symbol.iterator]() {
//索引变量
let index = 0;
//保存外面的this对象
let _this = this;
return {
next: function () {
if (index < _this.stus.length) {
const result = { value: _this.stus[index], done: false };
//下标自增
index++;
//返回结果
return result;
}else{
return {value: undefined, done: true};
}
}
};
}
}
//遍历这个对象
for (let v of banji) {
console.log(v);
}
</script>
</body>
</html>
如上所示,我们使用自定义的一个Symbol.iterator函数,在内部完成一个迭代器的操作,然后在外部通过for..of遍历,即可实现效果;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://blog.csdn.net/qq_19446965/article/details/120929992