Python面试必知100题【1~5题】
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
Python面试必知100例。收集整理了目前Python岗位常见的面试题希望大家通过学习理解相关知识点。下面介绍的是1~5道题。
一、请说下Python有哪些特点
- Python是一种解释型语言这意味着开发过程中没有了编译这个环节。
- 面向对象Python支持面向对象的风格或代码封装在对象的编程技术。
- 动态类型语言在Python中你不需要预先声明变量的类型当你赋值给变量时解释器会自动知道其类型。
- 跨平台语言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中都用于创建可以进行迭代的对象但它们之间有一些主要区别
- 定义方式迭代器需要定义一个类并在类中实现**iter()和next()**方法。而生成器则可以直接使用一个函数通过yield语句返回每个迭代的值。
- 简单性相比之下生成器的定义更简单。你只需要一个函数就可以通过yield关键字生成值。而迭代器则需要更多的代码来定义类和方法。
- 资源使用生成器和迭代器都是懒加载lazy load的也就是说它们只有在需要返回值的时候才会生成值。但是生成器更进一步它们在生成值后不会保存这些值。这意味着如果你需要迭代的数据集很大或者如果你需要的值需要大量计算那么生成器可能会比迭代器更节省资源。
- 使用场景迭代器更适用于需要自定义复杂行为的情况而生成器更适用于需要遍历大数据集或复杂数据流的情况。
总的来说生成器是一种特殊的迭代器它的定义更简单也更容易使用但同时也继承了迭代器的主要特性。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |