python面试题100道

### Python面试题100道概述 #### 1. Python 的函数参数传递 - **不可变对象 vs 可变对象**: 在 Python 中,参数传递遵循“引用传递”的原则,但根据对象是否可变,实际效果有所不同。对于不可变对象如数字、字符串、元组等,即使在函数内部对其进行了赋值操作,也不会改变原始值;而对于可变对象如列表、字典等,由于其可被修改,在函数内部对其进行修改会影响到外部。 - **示例分析**: - **代码一**: `a = 1` 是一个不可变对象,因此在 `fun(a)` 中的修改 `a = 2` 不会影响外部的 `a` 值,输出结果为 `1`。 - **代码二**: `a = []` 是一个可变对象,因此在 `fun(a)` 中通过 `a.append(1)` 修改了列表本身,外部的 `a` 也会受到影响,输出结果为 `[1]`。 - **关键概念**: “引用传递”、“可变性”。 #### 2. Python 中的元类 (Metaclass) - **定义**: 元类是创建类的“类”,用于控制类的行为。它是 Python 的高级特性之一,可以用来定制类的创建过程,例如动态添加属性或方法等。 - **应用场景**: 元类通常用于框架开发中,例如 Django 框架中的模型类定义等。 - **示例**: ```python class Meta(type): def __new__(cls, name, bases, attrs): print(f"Creating class {name}") return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=Meta): pass ``` - **关键概念**: `type` 函数、`__new__` 方法。 #### 3. @staticmethod 和 @classmethod - **静态方法 (`@staticmethod`)**: 不依赖于类的状态,无需绑定任何实例或类。可以通过类名或实例调用。 - **类方法 (`@classmethod`)**: 需要绑定类,通常用于处理类级别的操作。通过 `cls` 参数访问类。 - **实例方法**: 绑定到实例,通过 `self` 参数访问实例属性。 - **示例**: ```python class MyClass: @staticmethod def static_method(): print("This is a static method.") @classmethod def class_method(cls): print("This is a class method of", cls.__name__) def instance_method(self): print("This is an instance method of", self.__class__.__name__) ``` - **关键概念**: `self`, `cls`。 #### 4. 类变量和实例变量 - **类变量**: 定义在类体中的变量,共享于所有实例,用于存储类的状态。 - **实例变量**: 定义在方法体中的变量,每个实例都有自己的一份拷贝,用于存储实例状态。 - **示例**: ```python class Person: name = "aaa" def __init__(self, name=None): if name: self.name = name p1 = Person() print(p1.name) # 输出 "aaa" p1.name = "bbb" print(p1.name) # 输出 "bbb" ``` - **关键概念**: 类作用域、实例作用域。 #### 5. Python 自省 - **定义**: Python 的自省能力允许程序在运行时获取对象的信息,包括类型、属性、方法等。 - **常用函数**: - `type()`: 获取对象的类型。 - `dir()`: 获取对象的所有属性和方法。 - `getattr()`: 获取对象的属性值。 - `hasattr()`: 检查对象是否有某个属性。 - `isinstance()`: 检查对象是否为某个类的实例。 - **示例**: ```python class MyClass: attr = 42 obj = MyClass() print(type(obj)) # <class '__main__.MyClass'> print(dir(obj)) # ['attr', '__class__', ...] print(getattr(obj, 'attr')) # 42 print(hasattr(obj, 'attr')) # True print(isinstance(obj, MyClass)) # True ``` - **关键概念**: 运行时信息获取。 #### 6. 字典推导式 - **定义**: 从2.7版本开始,Python 支持字典推导式,类似于列表推导式,但用于创建字典。 - **语法**: ```python {key_expression: value_expression for item in iterable} ``` - **示例**: ```python squares = {x: x*x for x in range(6)} print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} ``` - **关键概念**: 字典构造、推导式。 #### 7. Python 中的单下划线和双下划线 - **单下划线 (`_foo`)**: 表示私有属性或方法的约定,但不具有强制约束力。 - **双下划线 (`__foo`)**: 表示“名称重整”,即自动转换为 `_classname__foo` 形式,以避免与子类中的同名属性冲突。 - **双下划线 (`__foo__`)**: Python 内部使用的特殊名称,用于定义特殊方法,如 `__init__`、`__str__` 等。 - **示例**: ```python class MyClass: _private_var = 42 __secret_var = 100 obj = MyClass() print(obj._private_var) # 42 print(obj._MyClass__secret_var) # 100 ``` - **关键概念**: 名称重整、私有属性。 #### 8. 字符串格式化: `%` 和 `.format` - **`%` 操作符**: 更加传统的方式,使用类似于 C 语言中的占位符进行字符串格式化。 - **`.format` 方法**: 更现代且灵活的方法,可以更好地控制格式化字符串。 - **示例**: ```python name = "Alice" age = 25 print("Hello, my name is %s and I am %d years old." % (name, age)) print("Hello, my name is {} and I am {} years old.".format(name, age)) ``` - **关键概念**: 字符串格式化、占位符。 #### 9. 迭代器和生成器 - **迭代器 (`Iterator`)**: 支持 `next()` 方法的对象,可以依次遍历集合中的元素。 - **生成器 (`Generator`)**: 特殊类型的迭代器,通过 `yield` 语句实现懒加载,只在需要时计算结果。 - **示例**: ```python def simple_generator(): yield 1 yield 2 yield 3 gen = simple_generator() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3 ``` - **关键概念**: `yield` 语句、懒加载。 #### 10. *args 和 **kwargs - **`*args`**: 用于收集任意数量的位置参数,通常用于函数定义中。 - **`**kwargs`**: 用于收集任意数量的关键字参数,可以用来传递命名参数。 - **示例**: ```python def example_function(*args, **kwargs): print("Positional args:", args) print("Keyword args:", kwargs) example_function(1, 2, 3, name="Alice", age=25) ``` - **关键概念**: 动态参数收集、位置参数、关键字参数。 以上知识点覆盖了 Python 初级面试题中的常见内容,深入理解这些概念有助于提高编程能力和面试表现。


































剩余59页未读,继续阅读

- zjbin122019-06-05准备去面试的,可以学习一下,不错

- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 上海大风车幼儿园中班-”亲子活动“剪影.doc
- 材料试验项目及检验规则(1).doc
- 【精品】话题作文锦集7篇.doc
- 单层钢结构机械厂房结构设计计算书.doc
- 青岛喷射混凝土和预制板迭合法施工技术.doc
- SYB-创业计划书-眼镜.doc
- 资料管理计划-#地块.doc
- 常见的基础常识.doc
- 监理公司监理资料组卷立档规定.doc
- 所演示系统讲解—最终版.pptx
- 方大科技大厦室内装潢工程.doc
- 成都市建设工地环境治理工作标准.doc
- 智慧城市发展对城市规划的影响分析.docx
- 中职计算机物联网技术实训室的规划与实施.docx
- 电大《机电控制及可编程序控制器技术》课程设计报告.doc
- 基于三网合一背景下的广播电视双向网络技术.docx


