python基础--零散知识点


1.生成器

假设一个列表的存有 数量很大的元素,但是在每一次运行时,通常只调用前面几个元素,这时为了优化,可以采用生成器.

isList = [x * x for x in range(10)]
print(isList)  # 结果[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

isGenerator = (x * x for x in range(10))
print(isGenerator)  # 这里显示的结果是生成器的地址<generator object <genexpr> at 0x0000028E39D79938>

print("result :  %d " % next(isGenerator))  # result :  0
print("result :  %d " % next(isGenerator))  # result :  1
print("result :  %d " % next(isGenerator))  # result :  4

for i in isGenerator:
    print(i)  # 依次是 9, 16, 25, 36, 49, 64, 81


for it in isGenerator:
    print("this time :  %d" % it)  # 结果为空,这时如果继续调用next(isGenerator),会报StopIteration(因为越界).

2.静态方法

通过  @staticmethod  即可把其装饰的方法变为一个静态方法,静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法。

class People:
    def __init__(self,name):
        self.name=name

    @staticmethod
    def man(self):
        print("i am a man  %s" %self.name)

p=People('n')
p.man(p)  # 因为在第6行传入的参数是self(类里的变量),所以在调用的时候不能写成  p=People() ,要传入 对象 p ,这样才不会报错

# 结果 i am a man  n
或者写成
class People:
    def __init__(self,name):
        self.name=name

    @staticmethod
    def man():
        print("i am a man ")

p=People('n')
p.man()  # 因为在第6行没有传入参数,所以在调用的时候就不能访问类里的变量

   # 结果 i am a man

3.类方法

类方法通过  @classmethod  实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量

class People:
    age = 23
    def __init__(self,name):
        self.name=name

    @classmethod
    def man(self):
        print("i am a man  %d" % self.age)

p=People('n')
p.man()  # 如果在第8访问的是 self.name,就会报错,因为其是 实例变量

# 结果 i am a man  23

如有不对,还望大佬们多多指教.  我的博客园链接:点击打开链接


猜你喜欢

转载自blog.csdn.net/TruthK/article/details/79732803
今日推荐