Python面试必知100题【6~10题】

news/2024/11/25 14:30:40/

Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是6~10道题。

六、什么是lambda函数?

在Python中,lambda函数也被称为匿名函数,这是因为它们没有正式的函数名。lambda函数是一种简洁的创建小型函数的方式。
lambda函数的基本语法如下:

lambda arguments: expression

这里,arguments是函数的输入,而expression是函数的输出。lambda函数可以接受任意数量的参数,但只能有一个表达式。
例如,我们可以创建一个lambda函数来计算两个数字的和:

add = lambda x, y: x + y
print(add(5, 3))  # Output: 8

在这个例子中,lambda函数接受两个参数xy,并返回它们的和。然后我们将这个lambda函数赋值给add,这样我们就可以像使用其他函数一样使用这个lambda函数了。
尽管lambda函数在代码中看起来更简洁,但是它们通常只在需要简单功能的地方使用,例如作为排序函数的关键字参数。对于更复杂的功能,通常推荐使用完整的def语句来定义函数。

七、什么是装饰器?

在Python中,装饰器(Decorator)是一种特殊类型的函数,它允许我们向已经存在的对象添加额外的功能。装饰器的常见用途包括插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是修改已有对象的一种轻便、强大且可维护的方式。
装饰器的基本语法如下:

@decorator
def function():pass

这里,@decorator是装饰器,**function()**是要被装饰的函数。Python会先执行装饰器来装饰函数,然后再执行这个函数。
以下是一个简单的装饰器示例:

def my_decorator(func):def wrapper():print("在函数被调用之前,发生了一些事情。")func()print("在函数被调用之后,发生了一些事情。")return wrapper@my_decorator
def say_hello():print("你好!")say_hello()

在这个例子中,my_decorator是一个装饰器,它接受一个函数作为参数,并返回一个新的函数wrapper。这个新的函数在调用原函数之前和之后都会执行一些额外的代码。然后,我们使用**@my_decorator来装饰say_hello函数。最后,当我们调用say_hello函数时,它会先执行装饰器添加的代码,然后再执行原本的say_hello**函数代码。

八、什么是多进程?

多进程是一种并发执行技术,其中程序的不同部分在不同的进程中运行。每个进程都有自己的内存空间和系统资源。进程是操作系统进行资源分配和调度的基本单位,是应用程序运行的载体。
多进程技术的主要优点是它可以充分利用多核CPU的计算能力。因为每个进程都有自己的内存空间,所以在一个进程中发生的错误不会影响其他进程。这使得多进程应用程序更加稳定。
在Python中,可以使用multiprocessing模块来创建和管理多进程。例如,你可以创建一个Process对象,然后调用它的start()方法来启动一个新的进程。可以使用QueuePipe等工具进行进程间的通信。
需要注意的是,由于Python的全局解释器锁(GIL)的存在,多线程在Python中通常无法有效利用多核CPU。因此,对于计算密集型任务,使用多进程通常比使用多线程更有效。

九、什么是多线程

多线程是一种并发执行的技术,它允许单个程序中的不同部分同时执行。这些不同部分被称为线程,所有线程都在同一进程中运行,共享相同的内存空间和系统资源。
与多进程相比,多线程有几个优点:

  1. 线程的启动和结束的开销相比进程要小得多,因为所有线程都在同一进程中,无需进行进程上下文的切换。
  2. 线程之间的通信更加简单,因为它们共享内存空间,可以直接访问相同的数据。然而,这也需要一些同步机制(如互斥锁、信号量等)来防止多个线程同时修改同一份数据,导致数据不一致。

在Python中,可以使用threading模块来创建和管理线程。例如,你可以创建一个Thread对象,然后调用它的**start()**方法来启动一个新的线程。

十、请介绍下深拷贝与浅拷贝的区别

在Python中,深拷贝和浅拷贝是两种不同的复制方式,主要区别在于它们处理对象内部的子对象的方式不同。

  1. 浅拷贝(Shallow Copy):创建一个新的对象,但只复制原对象的引用,不复制内部的子对象。这意味着新对象和原对象会共享内部的子对象。在Python中,可以使用copy.copy()函数或者使用某些类型的构造函数(如list(), **dict()**等)来创建浅拷贝。
  2. 深拷贝(Deep Copy):创建一个新的对象,并递归复制原对象的所有元素,包括内部的子对象。这意味着新对象和原对象不会共享任何元素。在Python中,可以使用**copy.deepcopy()**函数来创建深拷贝。
import copy# 浅拷贝示例
a = [[1, 2, 3], [4, 5, 6]]
b = copy.copy(a)
b[0][0] = 100
print(a)  # Output: [[100, 2, 3], [4, 5, 6]]# 深拷贝示例
a = [[1, 2, 3], [4, 5, 6]]
b = copy.deepcopy(a)
b[0][0] = 100
print(a)  # Output: [[1, 2, 3], [4, 5, 6]]

在浅拷贝示例中,修改了b的元素,但a的相应元素也发生了变化,这是因为ab共享内部的子对象。而在深拷贝示例中,修改了b的元素,a的元素没有发生变化,这是因为ab不共享任何元素。


http://www.ppmy.cn/news/353569.html

相关文章

围棋规则

围棋围棋,谁围的地盘大,谁就是赢家 下棋下到最后,19*19361个交叉点都已经瓜分完毕,这就是终局。特别说明 黑子先走,占了便宜。所以按照中国现在的围棋规则,黑棋要多占3.75个点,才算赢。换句话…

骑士在棋盘上的概率(递归)

这道题使用递归思想虽然代码较简洁&#xff0c;但会出现大量的重复计算&#xff0c;但还是想把这种思路展示给大家&#xff1a; class Solution { public://vector<int> dirs {{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};double knightProbability(int…

简化的围棋棋子规则(C++实现)

题目&#xff1a; 输入棋盘&#xff1a;1 1 2 3 2 3 3 3 2 3 3 3 2 2 2 3 3 3 1 2 2 2 3 3 2 1 1 2 3 1 (其中1代表空&#xff0c;2代表白子&#xff0c;3代表黑子&#xff09; 输出&#xff1a…

围棋的意义

“举剑的意义&#xff0c;不是为了杀戮&#xff0c;而是为了守卫 。”----《无影剑》 之所以用这个标题&#xff0c;是昨天在弈城遇见一个高手&#xff0c;一个1D的高手&#xff0c;147胜&#xff0c;0负的1D高手。当他向我这个2D发出对局邀请时&#xff0c;我只犹豫了3秒钟&am…

关于电脑围棋

一直想编写个围棋对弈程序&#xff0c;中国象棋和国际象棋的对弈程序都已达到大师级的水平&#xff0c;但围棋程序目前最高水平只有几级&#xff0c;才入门&#xff0c;实在小儿科。事实上很多人工智能领域的顶尖学者在这方面的研究颇为深入&#xff0c;奈何没有起色。后来应昌…

比特币Ordinals上线递归铭文;坎昆升级纳入包括EIP-4844 等在内的5个EIP |Tokenview

一周速览 过去一周&#xff0c;明星项目动态如下&#xff1a; Bitcoin Ordinals上线递归铭文; Cancun 升级纳入的EIP包括EIP-1153、EIP-4788、EIP-4844 等 5 个&#xff1b; Horizen EON 将于6月13日进行Gobi 测试网升级&#xff1b; Ronin Network将于6 月13日进行网络升级 …

phpcms v9文件上传漏洞复现

1.压缩包文件无递归删除 $file $_FILES[file]; #检查文件是否为空文件 if (!$file) {exit("请勿上传空文件"); } $name $file[name]; $dir upload/; $ext strtolower(substr(strrchr($name, .), 1));function check_dir($dir) #检查文件格式 …

华为荣耀V9手机通过在Fastboot模式写ramdisk.img来获取ROOT权限 | 华为荣耀V9怎么获取ROOT权限 | 华为荣耀V9怎么用面具Magisk做ROOT权限

先把系统刷到8.0&#xff0c;然后参考华为荣耀9获取ROOT权限&#xff08;文章链接&#xff1a;https://coco56.blog.csdn.net/article/details/127073267&#xff09;&#xff0c;教程虽然是针对荣耀9的&#xff0c;但荣耀V9实际测试也没问题&#xff0c;应该所有海思麒麟960的…