Python常见面试题


python中的@classmethood与@staticmethod

1.classmethood()
   简单来说:@classmethood的作用就是“可以不需要实力化,直接通过类名.方法名()来调用”。
   具体来说:@classmethood的作用实际是可以在class内实力化class,作用就是比如输入的数据需要清洗一遍再实力化,可以把清洗函数定义在class内部加上@classmethood装饰器已达到减少代码的目的,换句话说就是,可以用来为一个类创建一些预处理的实例。
2.staticmethod()
该方法不强制要求传递参数,实现实例化使用 C().f(),当然也可以不实例化调用该方法 C.f()

迭代器

在这里插入图片描述

什么是迭代器

如果你的某个对象可以用for循环去遍历出里面的所有的值,那么他就可以作为迭代器。当然你也可以使用collections库里面的Iterable,使用isinstance([],Iterable)判断该对象是否是迭代

from collections import Iterable# 输出true为可迭代,false为不可迭代对象
b = [1.2, 3, 3, 6, ]
print(isinstance(b, Iterable))

可迭代对象的本质

分析:对可迭代对象进行迭代使用的过程,每迭代一次(即在for…in…中每循环一次)都会返回对象中的下一条数据,一直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有一个“人”去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的“人”称为迭代器(Iterator)

类中如何实现迭代器

首先我们要理解迭代器,迭代器就是能够使用循环的方式,获取你对象中的所有值。例如再python中list、tuple、str类型都可以称为可迭代对象。可迭代对过程其实也很简单,我们用list举个栗子

# 创建一个对象
lists = list[1,2,3,4,5,6]
# 创建一个索引值
index = 0
# 遍历对象内的所有值,被称为迭代过程
while True:    
	print(list[index])    
	index += 1

那么如果在类中我们是否可以这样实现

from collections import Iterable


class TestIterable:
    def __init__(self):
        self.lists = [1, 2, 3, 4, 5, 6]
        self.index = -1

    def __iter__(self):
        return self

    def __next__(self):
        self.index += 1
        if self.index < len(self.lists):
            return self.lists[self.index]
        else:
            raise
            StopIterations = TestIterable()

            print(isinstance(s, Iterable))
            for i in s:
                print(i)

现在开始解释为什么要这样实现:
首先在迭代器使用过程中,类的方法里面有默认的魔术方法 __iter__和__next__两种。
  __iter__表示让对象变为可迭代对象,然后他的返回值要是一个迭代器,你自身拥有__iter__方法。所以他就是一个迭代器,我们只需要返回他自身即可。
  __next__对象是对访问对象的值,每次迭代过程都会获取__next__的值。所以我们把需要迭代的值,用index去控制他的索引位置。那么我们就可以是这个类变为可迭代的对象。当然你也可以试过之后尝试,使用__next__返回其他的类,这样或有意想不到的结果。最后万物皆对象。

1、迭代器协议 有next方法 一直直到StopIteration终止 (只能往前走不能后退)

2.可迭代对象 遵行迭代器协议的对象就称之为可迭代对象 转换成可迭代对象:iter方法

# Python中字符串 列表 元组 字典 集合 文件都不是可迭代对象,但是可以转换成可迭代对象iter
l = [1, 2, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值