Python面试必知100例。收集整理了目前Python岗位常见的面试题,心愿大家通过学习了解相干知识点。上面介绍的是1~5道题。

一、请说下Python有哪些特点

  1. Python是一种解释型语言,这意味着开发过程中没有了编译这个环节。
  2. 面向对象:Python反对面向对象的格调或代码封装在对象的编程技术。
  3. 动静类型语言:在Python中,你不须要事后申明变量的类型,当你赋值给变量时,解释器会主动晓得其类型。
  4. 跨平台语言:Python能够在大多数的操作系统上运行,包含但不限于Windows、Linux、Unix等。

    二、什么是可变数据类型和不可变数据类型

    在Python中,数据类型能够分为两种:可变数据类型和不可变数据类型。
    不可变数据类型:这种数据类型的值一旦定义,就不能更改。如果尝试更改其值,实际上会创立一个新的对象。不可变数据类型的例子包含整数、浮点数、字符串、元组
    例如,如果你有一个字符串变量,你不能更改这个字符串中的某个字符。试图这样做的话,Python会创立一个新的字符串。
    可变数据类型:与不可变数据类型相同,可变数据类型的值是能够更改的。也就是说,你能够在不创立新对象的状况下更改对象的值。可变数据类型的例子包含列表、字典以及汇合
    例如,如果你有一个列表,你能够更改列表中的元素,减少元素,或者删除元素,而不须要创立一个新的列表。

    三、什么是生成器

    在Python中,生成器(Generator)是一种非凡的迭代器。与列表不同,生成器在存储数据时能够节俭大量内存。这是因为生成器并不真正存储所有的值在内存中,而是在迭代到某个值时才会生成该值。
    生成器的创立通常应用两种形式:一种是通过在函数中应用yield关键字,另一种是应用生成器表达式(generator expression)。
    应用yield关键字创立生成器:
    当Python执行到yield关键字时,它会将后果返回给调用者,并记住这个地位。下次调用生成器的时候,它将从上次来到的地位继续执行。

    def count_up_to(n): count = 1 while count <= n:     yield count     count += 1for number in count_up_to(5): print(number) # 输入12345

    下面的代码定义了一个生成器函数count_up_to,它会生成从1到n的数字。而后,咱们能够像迭代其余迭代器一样迭代这个生成器。
    应用生成器表达式创立生成器:
    生成器表达式相似于列表解析式,然而它创立的是一个生成器,而不是一个列表。这意味着它能够节俭内存。生成器表达式的语法是将列表解析式的方括号改为圆括号。

    numbers = (x for x in range(1, 6))for number in numbers: print(number)

    下面的代码创立了一个生成器,它会生成从1到5的数字。而后,咱们能够像迭代其余迭代器一样迭代这个生成器。

    四、什么是迭代器?

    在Python中,迭代器(Iterator)是一个能够记住遍历的地位的对象。迭代器对象必须实现两个非凡办法,即__iter__()__next__(),它们独特形成了迭代器协定。迭代器能够是无限的也能够是有限的。

  • __iter__()办法返回迭代器对象自身。这用在for和in语句中。
  • __next__()办法返回迭代器的下一个值。如果没有更多的项能够返回,则应该抛出StopIteration异样。

举个例子,咱们能够创立一个返回数字序列的迭代器:

class Counter:    def __init__(self, limit):        self.limit = limit        self.count = 0    def __iter__(self):        return self    def __next__(self):        if self.count < self.limit:            self.count += 1            return self.count        else:            raise StopIterationcounter = Counter(5)for number in counter:    print(number)

在这个例子中,Counter类是一个迭代器,能够产生从1到5的数字。首先,咱们创立一个Counter对象,并将其下限设为5。而后,咱们应用for循环来迭代这个迭代器。
值得注意的是,生成器是一种非凡的迭代器,它更简略,但性能也更弱小。你能够应用yield关键字来定义一个生成器,或者应用圆括号的列表解析式来创立一个生成器表达式。

五、生成器和迭代器有什么区别?

生成器和迭代器在Python中都用于创立能够进行迭代的对象,但它们之间有一些次要区别:

  1. 定义形式:迭代器须要定义一个类,并在类中实现__iter__()__next__()办法。而生成器则能够间接应用一个函数,通过yield语句返回每个迭代的值。
  2. 简略性:相比之下,生成器的定义更简略。你只须要一个函数,就能够通过yield关键字生成值。而迭代器则须要更多的代码来定义类和办法。
  3. 资源应用:生成器和迭代器都是懒加载(lazy load)的,也就是说它们只有在须要返回值的时候才会生成值。然而生成器更进一步,它们在生成值后不会保留这些值。这意味着如果你须要迭代的数据集很大,或者如果你须要的值须要大量计算,那么生成器可能会比迭代器更节俭资源。
  4. 应用场景:迭代器更实用于须要自定义简单行为的状况,而生成器更实用于须要遍历大数据集或简单数据流的状况。

总的来说,生成器是一种非凡的迭代器,它的定义更简略,也更容易应用,但同时也继承了迭代器的次要个性。