Q-91:你如何用 Python 调试程序?是否可以单步执行 Python 代码?
是的,我们可以使用 Python 调试器 ( pdb ) 来调试任何 Python 程序。如果我们使用pdb启动一个程序,那么它甚至可以让我们单步执行代码。
Q-92:列出一些用于调试 Python 程序的 PDB 命令?
以下是一些用于开始调试 Python 代码的 PDB 命令。
添加断点(b)
恢复执行©
分步调试(s)
移至下一行(n)
列出源代码(l)
打印表达式§
Q-93:调试 Python 程序的命令是什么?
以下命令有助于在调试模式下运行 Python 程序。
$ python -m pdb python-script.py
Q-94:你如何在 Python 中监控程序的代码流?
在 Python 中,我们可以使用 sys 模块的settrace() 方法来设置跟踪挂钩并监视程序内部的函数。
您需要定义一个跟踪回调方法并将其传递给settrace() 函数。回调应指定三个参数,如下所示。
import sys def trace_calls(frame, event, arg): # 'call' 事件发生在函数执行之前。 if event != 'call': return # 接下来,检查帧数据和打印信息。 print 'Function name=%s, line num=%s' % (frame.f_code.co_name, frame.f_lineno) return def demo2(): print 'in demo2()' def demo1(): print 'in demo1()' demo2() sys.settrace(trace_calls) demo1()
Q-95:为什么以及何时在 Python 中使用生成器?
Python 中的生成器是一个返回可迭代对象的函数。我们可以使用yield 关键字迭代生成器对象。但是我们只能这样做一次,因为它们的值不会持久存在于内存中,它们会即时获取值。
生成器使我们能够保持函数或步骤的执行,只要我们想保留它。然而,这里有几个例子说明使用生成器是有益的。
我们可以用生成器替换循环,以有效地计算涉及大数据集的结果。
当我们不想要所有结果并希望推迟一段时间时,生成器很有用。
我们可以用生成器代替回调函数,而不是使用回调函数。我们可以在函数内部编写一个循环,做与回调相同的事情,并将它变成一个生成器。
回到目录
Q-96:yield 关键字在 Python 中有什么作用?
yield 关键字可以将任何函数转换成发电机。它的工作原理类似于标准的 return 关键字。但它总是会返回一个生成器对象。此外,一个方法可以多次调用yield 关键字。
请参阅下面的示例。
def testgen(index): weekdays = ['sun','mon','tue','wed','thu','fri','sat'] yield weekdays[index] yield weekdays[index+1] day = testgen(0) print next(day), next(day) # 输出: sun mon
Q-97:如何将列表转换为其他数据类型?
有时,我们不会按原样使用列表。相反,我们必须将它们转换为其他类型。
将列表转换为字符串。
我们可以使用”.join() 方法将所有元素合并为一个并作为字符串返回。
weekdays = ['sun','mon','tue','wed','thu','fri','sat'] listAsString = ' '.join(weekdays) print(listAsString) # 输出: sun mon tue wed thu fri sat
把一个列表变成一个元组。
调用 Python 的tuple() 函数将列表转换为元组。
此函数将列表作为其参数。
但是请记住,将列表变成元组后我们无法更改列表,因为它变得不可变。
weekdays = ['sun','mon','tue','wed','thu','fri','sat'] listAsTuple = tuple(weekdays) print(listAsTuple) # 输出: ('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat')
把一个列表变成一个集合。
将列表转换为集合会带来两个副作用。
Set 不允许重复条目,以便转换将删除任何此类项目。
集合是有序集合,因此列表项的顺序也会改变。
但是,我们可以使用set() 函数将列表转换为 Set。
weekdays = ['sun','mon','tue','wed','thu','fri','sat','sun','tue'] listAsSet = set(weekdays) print(listAsSet) # 输出: set(['wed', 'sun', 'thu', 'tue', 'mon', 'fri', 'sat'])
将列表变成字典。
在字典中,每一项都代表一个键值对。因此,转换列表并不像转换其他数据类型那样简单。
但是,我们可以通过将列表分成一组对,然后调用zip() 函数将它们作为元组返回来实现转换。
将元组传递给dict() 函数最终会将它们变成字典。
weekdays = ['sun','mon','tue','wed','thu','fri'] listAsDict = dict(zip(weekdays[0::2], weekdays[1::2])) print(listAsDict) # 输出: {'sun': 'mon', 'thu': 'fri', 'tue': 'wed'}
Q-98:在没有明确提及的情况下,你如何计算列表中每个项目的出现次数? 与集合不同,列表可以包含具有相同值的项目。
在 Python 中,列表有一个count() 函数,它返回特定项目的出现次数。
计算单个项目的出现次数。
weekdays = ['sun','mon','tue','wed','thu','fri','sun','mon','mon'] print(weekdays.count('mon'))
# 输出: 3
计算列表中每个项目的出现次数。
我们将使用列表推导式和count() 方法。它将打印每个项目的频率。
weekdays = ['sun','mon','tue','wed','thu','fri','sun','mon','mon']
print([[x,weekdays.count(x)] for x in set(weekdays)])
# 输出: [['wed', 1], ['sun', 2], ['thu', 1], ['tue', 1], ['mon', 3], ['fri', 1]]
Q-99:什么是 NumPy,它比 Python 中的列表好在哪里?
NumPy 是一个用于科学计算的 Python 包,可以处理大数据量。它包括一个强大的 N 维数组对象和一组高级函数。
此外,NumPy 数组优于内置列表。
NumPy 数组比列表更紧凑。
使用 NumPy 读取和写入项目更快。
使用 NumPy 比使用标准列表更方便。
NumPy 数组更高效,因为它们增强了 Python 中列表的功能。
回到目录
Q-100:在 Python 中创建空的 NumPy 数组有哪些不同的方法?
我们可以应用两种方法来创建空的 NumPy 数组。
创建空数组的第一种方法。
import numpy
numpy.array([])
第二种方法创建一个空数组。
# 创建一个空数组
numpy.empty(shape=(0,0))