如何遍历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遍历,即可实现效果;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
使用Python中的greenlet包实现并发编程的入门教程
这篇文章主要介绍了使用Python中的greenlet包实现并发编程的入门教程,Python由于GIL的存在并不能实现真正的多线程并发,greenlet可以做到一个相对的替换方案,需要的朋友可以参考下2015-04-04Python实现并行抓取整站40万条房价数据(可更换抓取城市)
本文主要是以房价网房价信息爬虫为例,对Python实现整站40万条房价数据并行抓取(可更换抓取城市)的方法进行分析介绍。需要的朋友一起来看下吧2016-12-12Python Pytest装饰器@pytest.mark.parametrize详解
本文主要介绍了Python Pytest装饰器@pytest.mark.parametrize详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-08-08
最新评论