100 个基本 Python 面试问题第四部分(61-80)

Q-51:Python 语言中的 GIL 是什么?

Q-52:Python 如何实现线程安全?

Q-53:Python 如何管理内存?

Q-54:Python 中的元组是什么?

Q-55:Python 编程中的字典是什么?

Q-56:Python 中的 set 对象是什么?

Q-57:字典在 Python 中有什么用?

Q-58:Python 列表是链表吗?

Q-59:Python 中的 Class 是什么?

Q-60:Python 类中的属性和方法是什么?

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 机制,它允许对象访问其父类功能。它将基类功能传递给孩子。

image.png

我们故意抽象出不同类中的相似代码。

公共代码在基类中,子类对象可以通过继承访问它。看看下面的例子。


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 中的一种继承。它打算从基类继承,但有点不同,即通过使用基类的实例变量作为派生类的成员。

见下图。

image.png

为了演示组合,我们需要实例化类中的其他对象,然后使用这些实例。


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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值