8. 什么是 Python 中的 pass?
关键字 pass
表示 Python 中的空操作。它通常用于填充可能在运行时执行但尚未编写的空代码块。如果没有以下代码中的 pass
语句,我们可能会在代码执行过程中遇到一些错误。
def myEmptyFunc(): # do nothing pass myEmptyFunc() # nothing happens ## Without the pass keyword # File "<stdin>", line 3 # IndentationError: expected an indented block
9. 什么是 Python 中的模块和包?
Python 包和模块是允许在 Python 中进行模块化编程的两种机制。模块化有几个优点:
- 简单性:处理单个模块可以帮助专注于手头问题的相对较小的一部分。这使得开发更容易,更不容易出错。
- 可维护性:模块被设计为在不同的问题域之间强制执行逻辑边界。如果它们是以一种减少相互依赖的方式编写的,那么模块中的修改不太可能影响程序的其他部分。
- 可重用性:在模块中定义的函数可以很容易地被应用程序的其他部分重用。
- 作用域:模块通常定义一个单独的命名空间,这有助于避免来自程序其他部分的标识符之间的混淆。
一般来说,模块只是具有 .py 扩展名的 Python 文件,可以定义和实现一组函数、类或变量。它们可以使用语句导入并初始化一次。如果需要部分功能,使用 import ... from ...
导入必需的类或函数
包允许使用点符号对模块命名空间进行分层结构。模块有助于避免全局变量名之间的冲突,同样,包有助于避免模块名之间的冲突。创建包很容易,因为它利用了系统固有的文件结构。所以只要把模块塞进一个文件夹,就可以了,文件夹名就是包名。从这个包中导入模块或其内容需要将包名作为模块名的前缀,并加上一个点。
10. Python 中的全局属性、受保护属性和私有属性是什么?
- 全局变量是在全局范围内定义的公共变量。要在函数内的全局范围内使用该变量,我们使用关键字
global
。 - 受保护属性是用前缀在其标识符上的下划线定义的属性,例如。_萨拉。仍然可以从定义它们的类之外访问和修改它们,但负责任的开发人员应避免这样做。
- 私有属性是在其标识符上带有双下划线前缀的属性,例如,
__ansh
。它们不能直接从外部访问或修改,如果进行此类尝试,将导致 AttributeError。
11. self 在 Python 中有什么用?
self 在 Python 中是一个特殊的参数,用于表示对象自身。它通常作为方法的第一个参数传递,并用于访问对象的属性和方法。
在类定义中,我们可以使用 self 来引用当前实例对象的属性和方法。通过 self,我们可以在类的方法中操作对象的状态,并将其封装起来以供其他方法调用。
举个例子,在一个 Person 类中,我们可以定义一个名为 set_name 的方法,使用 self 参数来设置对象的姓名属性:
class Person: def set_name(self, name): self.name = name
在这个例子中,self 参数表示当前实例对象,我们可以通过 self.name 来访问该对象的 name 属性。
总而言之,self 在 Python 中用于表示对象自身,在类的方法中使用 self 可以方便地访问和操作对象的属性和方法。
12. 什么是__init__?
__init__是Python中的一个特殊方法,用于在创建类的实例时进行初始化操作。它被称为构造函数或初始化方法。
当我们使用类创建对象时,Python 会自动调用该类的__init__方法来执行一些初始化任务。在__init__方法中,我们可以定义对象的属性并给它们赋初始值。
举个例子,假设我们有一个 Person 类,希望在创建 Person 对象时可以设置姓名和年龄。可以在类中定义一个__init__方法,并接受 name 和 age 两个参数来初始化对象的属性:
class Person: def __init__(self, name, age): self.name = name self.age = age
当我们创建一个 Person 对象时,可以传递相应的参数来初始化对象的属性:
person = Person("Alice", 25) • 1
在这个例子中,当我们执行 Person("Alice", 25) 时,Python 会自动调用 Person 类的__init__方法,并将 “Aliice” 和 25 作为参数传递给该方法。在__init__方法中,通过 self.name 和 self.age 来分别初始化对象的 name 和 age 属性。
13. 什么是 Python 中的 break、continue 和 pass?
14. 什么是 Python 中的单元测试?
Python 中的单元测试是一种侧重于验证软件系统中单个单元或组件的正确性的测试。单元通常指的是一小段独立的代码,如函数、方法或类。
单元测试的目的是确保每个代码单元按预期执行,并在给定特定输入的情况下产生所需的输出。通过编写和运行单元测试,开发人员可以在开发过程的早期检测和修复错误,在进行更改时最小化引入新错误的风险,并提高代码库的整体质量和可靠性。
在 Python 中,单元测试通常使用测试框架(如 unittest、pytest 或 nose)创建。这些框架为定义测试用例、执行测试用例和报告结果提供了实用工具和断言。
典型的单元测试包括:
- 定义测试用例:这包括创建函数或方法,这些函数或方法定义了具有已知输入和预期输出的特定测试用例。
- 执行测试用例:测试框架自动运行定义的测试用例,并检查实际输出是否与预期输出匹配。
- 报告结果:测试框架提供关于测试通过、失败或遇到错误的详细报告。
通过定期运行单元测试,开发人员可以获得对代码行为的信心,促进团队成员之间的协作,并确保对代码库的修改或添加不会引入回档。
15. 什么是 Python 中的文档字符串?
- 文档字符串(docstring)是用于记录特定代码段的多行字符串。
- Python 的 docstring 约定建议使用三引号(“”")来定义 docstring。文档字符串可以在模块、函数、类或方法定义之后立即写入,并包含在各自的代码块中。
- 文档字符串应描述函数或方法的作用。
下面是一个带有 docstring 的函数示例:
def add(a, b): """ Adds two numbers and returns the result. Args: a (int): The first number. b (int): The second number. Returns: int: The sum of the two numbers. """ return a + b
16. 什么是 Python 中的切片?
- 顾名思义,“切片” 是其中的一部分。
- 切片的语法是
[start : end : step]
- start 是要从中对列表或元组进行切片的起始索引
- end 是结束索引或停止的地方。。
- step 是跳跃的步数。
- start 的默认值为 0,end 为项目数,step 为 1。
- 切片可以在字符串、数组、列表和元组上完成。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(numbers[1 : : 2]) # output : [2, 4, 6, 8, 10]
17. 解释如何在 Unix 上使 Python 脚本可执行?
要在 Unix 上使 Python 脚本可执行,可以按照以下步骤进行操作:
1.添加 shebang(也称为 hashbang)行:在 Python 脚本的第一行添加以下代码以指定解释器路径。
#!/usr/bin/env python
这将告诉系统使用 env 来查找 Python 解释器,并使用找到的解释器来运行脚本。如果你的 Python 解释器的路径不是 /usr/bin/env python
,请相应地更改该行。
2.设置脚本权限:使用 chmod
命令为脚本添加可执行权限。
chmod +x script.py
这将允许直接运行脚本而无需在命令前添加 python 关键字。
3.运行脚本:现在可以通过以下方式运行 Python 脚本。
./script.py
注意,脚本文件必须位于当前工作目录中,或者必须提供脚本的完整路径。
这样,就可以在 Unix 上使 Python 脚本可执行了。
18. Python 数组和列表有什么区别?
在 Python 中,数组和列表是两种不同的数据结构。它们有以下区别:
- 内存分配方式:数组通常在内存中以连续的块存储数据,这使得它们在访问元素时具有更快的速度。而列表是由指针链表实现的,每个节点都包含指向下一个节点的指针。
- 数据类型:数组只能包含相同数据类型的元素,即数组的数据类型应该是同类的,消耗的内存远少于列表。而列表可以包含不同数据类型的元素,即列表的数据类型可以是异构的,它具有消耗大量内存的缺点。这意味着数组支持更广泛的数值计算操作,如矩阵运算等。
- 大小调整:数组的大小是固定的,一旦创建就无法更改。如果需要更改数组的大小,通常需要创建一个新的数组并复制原始数据。而列表的大小是可变的,可以根据需要添加或删除元素。
考虑到上述区别,当需要进行数值计算和处理时,使用数组可能更有效。而当需要灵活性和动态调整大小时,列表可能更适合。