乐趣区

关于python:Python面试必知100例15题

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 += 1
    
    for number in count_up_to(5):
     print(number)
     
    # 输入
    1
    2
    3
    4
    5

    下面的代码定义了一个生成器函数 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 StopIteration

counter = 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. 应用场景:迭代器更实用于须要自定义简单行为的状况,而生成器更实用于须要遍历大数据集或简单数据流的状况。

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

退出移动版