Q-61:如何在运行时为 Class 属性赋值?
Q-62:Python 编程中的继承是什么?
Q-63:Python 中的组合是什么?
Q-64:Python 程序中的错误和异常是什么?
Q-65:你如何在 Python 中使用 Try/Except/Finally 处理异常?
Q-66:你如何为 Python 中的预定义条件引发异常?
Q-67:什么是 Python 迭代器?
Q-68:Iterator 和 Iterable 有什么区别?
Q-69:什么是 Python 生成器?
Q-70:Python 中的闭包是什么?
Q-71:Python 中的装饰器是什么?
Q-72:你如何在 Python 中创建字典?
Q-73:你如何在 Python 中读取字典?
Q-74:如何在 Python 中遍历字典对象?
Q-75:你如何在 Python 中向字典添加元素?
Q-76:如何在 Python 中删除字典的元素?
Q-77:你如何检查字典中键的存在?
Q-78:Python 中列表推导式的语法是什么?
Q-79:Python 中字典理解的语法是什么?
Q-80:Python 中生成器表达式的语法是什么?
直接跳到末尾 去领资料
Q-61:如何在运行时为 Class 属性赋值?
我们可以在运行时指定属性的值。我们需要添加一个 init 方法并将输入传递给对象构造函数。请参阅以下示例来说明这一点。
>>> class Human:
def __init__(self, profession):
self.profession = profession
def set_profession(self, new_profession):
self.profession = new_profession
>>> man = Human("Manager")
>>> print(man.profession)
Manager
回到目录
Q-62:Python 编程中的继承是什么?
继承是一种 OOP 机制,它允许对象访问其父类功能。它将基类功能传递给孩子。
我们故意抽象出不同类中的相似代码。
公共代码在基类中,子类对象可以通过继承访问它。看看下面的例子。
class PC: # 基类
processor = "Xeon" # 通用属性
def set_processor(self, new_processor):
processor = new_processor
class Desktop(PC): # 派生类
os = "Mac OS High Sierra" # 个性化属性
ram = "32 GB"
class Laptop(PC): # 派生类
os = "Windows 10 Pro 64" # 个性化属性
ram = "16 GB"
desk = Desktop()
print(desk.processor, desk.os, desk.ram)
lap = Laptop()
print(lap.processor, lap.os, lap.ram)
输出:
Xeon Mac OS High Sierra 32 GB
Xeon Windows 10 Pro 64 16 GB
回到目录
Q-63:Python 中的组合是什么?
组合也是 Python 中的一种继承。它打算从基类继承,但有点不同,即通过使用基类的实例变量作为派生类的成员。
见下图。
为了演示组合,我们需要实例化类中的其他对象,然后使用这些实例。
class PC: # 基类
processor = "Xeon" # 通用属性
def __init__(self, processor, ram):
self.processor = processor
self.ram = ram
def set_processor(self, new_processor):
processor = new_processor
def get_PC(self):
return "%s cpu & %s ram" % (self.processor, self.ram)
class Tablet():
make = "Intel"
def __init__(self, processor, ram, make):
self.PC = PC(processor, ram) # 作品
self.make = make
def get_Tablet(self):
return "Tablet with %s CPU & %s ram by %s" % (self.PC.processor, self.PC.ram, self.make)
if __name__ == "__main__":
tab = Tablet("i7", "16 GB", "Intel")
print(tab.get_Tablet())
输出是:
Tablet with i7 CPU & 16 GB ram by Intel
回到目录
Q-64:Python 程序中的错误和异常是什么?
错误是程序中可能导致其异常退出的编码问题。
相反,异常的发生是由于外部事件的发生中断了程序的正常流程。
回到目录
Q-65:你如何在 Python 中使用 Try/Except/Finally 处理异常?
Python 制定了 Try、Except、Finally 结构来处理错误和异常。我们将缩进的不安全代码括在 try 块下。我们可以将回退代码保留在 except 块中。任何打算最后执行的指令都应该在 finally 块下。
try:
print("在 try 块中执行代码")
print(exception)
except:
print("进入except块")
finally:
print("到达最后一个区块")
输出是:
在 try 块中执行代码
进入except块
到达最后一个区块
回到目录
Q-66:你如何为 Python 中的预定义条件引发异常?
我们可以根据某些条件引发异常。
例如,如果我们希望用户只输入奇数,否则会引发异常。
# 示例 - 引发异常
while True:
try:
value = int(input("输入一个奇数-"))
if value%2 == 0:
raise ValueError("由于无效输入退出!!!")
else:
print("输入的值为: %s" % value)
except ValueError as ex:
print(ex)
break
输出是:
输入一个奇数- 2
由于无效输入退出!!!
输入一个奇数- 1
输入的值为: 1
输入一个奇数-
回到目录
Q-67:什么是 Python 迭代器?
Python 中的迭代器是类似数组的对象,允许在下一个元素上移动。我们在遍历循环时使用它们,例如在“for”循环中。
Python 库没有。的迭代器。例如,一个列表也是一个迭代器,我们可以在它上面启动一个 for 循环。
回到目录
Q-68:Iterator 和 Iterable 有什么区别?
列表、元组、字典和集合等集合类型都是可迭代对象,而它们也是可迭代容器,在遍历时返回迭代器。
回到目录
以下是一些高级 Python 面试问题。
Q-69:什么是 Python 生成器?
Generator 是一种函数,它让我们指定一个函数,它的作用类似于迭代器,因此可以在“for”循环中使用。
在生成器函数中,yield 关键字替代了 return 语句。
def fn():
return "简单的 Python 函数"
def generate():
yield "Python 生成器函数"
print(next(generate()))
输出是:
Python 生成器函数
回到目录
Q-70:Python 中的闭包是什么?
Python 闭包是由另一个函数返回的函数对象。我们使用它们来消除代码冗余。
在下面的例子中,我们编写了一个简单的乘法闭包。
def multiply_number(num):
def product(number):
'product() here is a closure'
return num * number
return product
num_2 = multiply_number(2)
print(num_2(11))
print(num_2(24))
num_6 = multiply_number(6)
print(num_6(1))
输出是:
22
48
6
回到目录
Q-71:Python 中的装饰器是什么?
Python 装饰器使我们能够动态地向给定对象添加新行为。在下面的示例中,我们编写了一个简单的示例来显示函数执行前后的消息。
def decorator_sample(func):
def decorator_hook(*args, **kwargs):
print("函数调用前")
result = func(*args, **kwargs)
print("函数调用后")
return result
return decorator_hook
@decorator_sample
def product(x, y):
"两个数相乘的函数"
return x * y
print(product(3, 3))
输出是:
函数调用前
函数调用后
9
回到目录
Q-72:你如何在 Python 中创建字典?
让我们以建筑工地统计为例。为此,我们首先需要使用冒号(“:”)拆分键值对。键应该是不可变类型,也就是说,我们将使用不允许在运行时更改的数据类型。我们将从整数、字符串或元组中进行选择。
但是,我们可以采用任何类型的值。为了区分数据对,我们可以使用逗号(“,”)并将整个内容保留在花括号({…})中。
>>> site_stats = {'site': 'tecbeamers.com', 'traffic': 10000, "type": "organic"}
>>> type(site_stats)
<class 'dict'>
>>> print(site_stats)
{'type': 'organic', 'site': 'tecbeamers.com', 'traffic': 10000}
回到目录
Q-73:你如何在 Python 中读取字典?
要从字典中获取数据,我们可以使用键直接访问。我们可以在提到字典对应的变量名后使用方括号 […] 将“key”括起来。
>>> site_stats = {'site': 'tecbeamers.com', 'traffic': 10000, "type": "organic"}
>>> print(site_stats["traffic"])
我们甚至可以调用 get 方法从字典中获取值。它还让我们设置一个默认值。如果缺少密钥,则会发生 KeyError。
>>> site_stats = {'site': 'tecbeamers.com', 'traffic': 10000, "type": "organic"}
>>> print(site_stats.get('site'))
tecbeamers.com
回到目录
Q-74:如何在 Python 中遍历字典对象?
我们可以使用“for”和“in”循环来遍历字典对象。
>>> site_stats = {'site': 'tecbeamers.com', 'traffic': 10000, "type": "organic"}
>>> for k, v in site_stats.items():
print("The key is: %s" % k)
print("The value is: %s" % v)
print("++++++++++++++++++++++++")
输出是:
The key is: type
The value is: organic
++++++++++++++++++++++++
The key is: site
The value is: tecbeamers.com
++++++++++++++++++++++++
The key is: traffic
The value is: 10000
++++++++++++++++++++++++
回到目录
Q-75:你如何在 Python 中向字典添加元素?
我们可以通过使用新键修改字典来添加元素,然后为其设置值。
>>> #设置一个空白字典
>>> site_stats = {}
>>> site_stats['site'] = 'google.com'
>>> site_stats['traffic'] = 10000000000
>>> site_stats['type'] = 'Referral'
>>> print(site_stats)
{'type': 'Referral', 'site': 'google.com', 'traffic': 10000000000}
我们甚至可以在 update() 方法的帮助下连接两个字典以获得更大的字典。
>>> site_stats['site'] = 'google.co.in'
>>> print(site_stats)
{'site': 'google.co.in'}
>>> site_stats_new = {'traffic': 1000000, "type": "social media"}
>>> site_stats.update(site_stats_new)
>>> print(site_stats)
{'type': 'social media', 'site': 'google.co.in', 'traffic': 1000000}
回到目录
Q-76:如何在 Python 中删除字典的元素?
我们可以使用 del() 方法删除字典中的键。
>>> site_stats = {'site': 'tecbeamers.com', 'traffic': 10000, "type": "organic"}
>>> del site_stats["type"]
>>> print(site_stats)
{'site': 'google.co.in', 'traffic': 1000000}
我们可以使用的另一种方法是 pop() 函数。它接受密钥作为参数。另外,第二个参数,如果键不存在,我们可以传递一个默认值。
>>> site_stats = {'site': 'tecbeamers.com', 'traffic': 10000, "type": "organic"}
>>> print(site_stats.pop("type", None))
organic
>>> print(site_stats)
{'site': 'tecbeamers.com', 'traffic': 10000}
回到目录
Q-77:你如何检查字典中键的存在?
我们可以使用 Python 的“in”运算符来测试 dict 对象中是否存在键。
>>> site_stats = {'site': 'tecbeamers.com', 'traffic': 10000, "type": "organic"}
>>> 'site' in site_stats
True
>>> 'traffic' in site_stats
True
>>> "type" in site_stats
True
早些时候,Python 还提供了已被弃用的 has_key() 方法。
回到目录
Q-78:Python 中列表推导式的语法是什么?
列表推导式的签名如下:
[ expression(var) for var in iterable ]
例如,下面的代码将返回从 10 到 20 的所有数字并将它们存储在一个列表中。
>>> alist = [var for var in range(10, 20)]
>>> print(alist)