이 기사는 가장 일반적인 Python 면접 질문과 답변을 요약한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
Python 초보자는 Python 프로그래밍 직업을 찾기 전에 Python의 기본 사항에 익숙해야 합니다. 프로그래밍 웹사이트 DataFlair의 기술팀은 2018년 가장 일반적인 Python 인터뷰 질문 모음을 공유했습니다. 인터뷰 준비에 도움이 되는 기본 Python 인터뷰 질문과 고급 버전 질문이 모두 있습니다. 질문에는 모두 답변이 함께 제공됩니다. 인터뷰 질문에는 코딩, 데이터 구조, 스크립팅 및 기타 주제가 포함됩니다. 이 글은 이전 글입니다.
관련 기사 추천: "2020 Python 면접 질문 요약(최신)"
Q 1: Python의 특징과 장점은 무엇인가요?
입문 프로그래밍 언어인 Python은 주로 다음과 같은 특징과 장점을 가지고 있습니다.
해석 가능
동적 특성
객체 지향
간결하고 단순함
오픈 소스
강력한 커뮤니티 지원
물론입니다. , 실제 Python을 배우는 것의 장점은 그 이상입니다.
Q 2: 깊은 복사와 얕은 복사의 차이점은 무엇인가요?
답변: 딥 카피는 한 객체를 다른 객체에 복사하는 것입니다. 즉, 객체의 복사본을 변경하더라도 원본 객체에는 영향을 미치지 않습니다. Python에서는 아래와 같이 deepcopy() 함수를 사용하여 깊은 복사를 수행하고 모듈 복사본을 가져옵니다.
>>> import copy >>> b=copy.deepcopy(a)
그리고 얕은 복사는 한 객체의 참조를 다른 객체로 복사하므로 복사하면 중간 변경 사항이 발생합니다. 원본 개체에 영향을 미칩니다. 우리는 function() 함수를 사용하여 아래와 같이 얕은 복사를 수행합니다.
>>> b=copy.copy(a)
Q 3. 리스트와 튜플의 차이점은 무엇인가요?
답변: 둘 사이의 주요 차이점은 목록은 변경할 수 있는 반면 튜플은 변경할 수 없다는 것입니다. 예를 들어 아래와 같이 표시됩니다.
>>> mylist=[1,3,3] >>> mylist[1]=2 >>> mytuple=(1,3,3) >>> mytuple[1]=2 Traceback (most recent call last): File "<pyshell#97>", line 1, in <module> mytuple[1]=2
다음 오류가 표시됩니다.
TypeError: ‘tuple’ object does not support item assignment
목록 및 튜플에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
https://data-flair.training/blogs/python - tuples-vs-lists/
Q4부터 Q20까지는 초보자를 위한 기본적인 Python 면접 질문이지만, 숙련된 분들도 이 질문을 보고 기본 개념을 복습할 수 있습니다.
Q 4. Python의 삼항 연산자를 설명하세요
C++와 달리 Python에는 ?:가 없지만 다음이 있습니다.
[on true] if [expression] else [on false]
표현식이 True이면 [on true] 문을 실행합니다. 그렇지 않으면 [on false]의 문을 실행합니다.
사용 방법은 다음과 같습니다.
>>> a,b=2,3 >>> min=a if a<b else b >>> min
실행 결과:
2 >>> print("Hi") if a<b else print("Bye")
실행 결과:
Hi
Q 5. Python에서 멀티스레딩을 구현하는 방법은 무엇입니까?
스레드는 가벼운 프로세스입니다. 멀티스레딩을 사용하면 한 번에 여러 스레드를 실행할 수 있습니다. 우리 모두는 Python이 멀티스레딩 툴킷이 내장된 멀티스레드 언어라는 것을 알고 있습니다.
Python의 GIL(Global Interpreter Lock)은 한 번에 단일 스레드 실행을 보장합니다. 하나의 스레드는 GIL을 저장하고 다음 스레드로 전달하기 전에 일부 작업을 수행하므로 병렬로 실행되는 것처럼 보입니다. 그러나 실제로는 CPU에서 번갈아 실행되는 스레드일 뿐입니다. 물론 모든 전달은 프로그램 실행에 대한 메모리 부담을 증가시킵니다.
Q 6. Python에서 상속을 설명하세요
클래스가 다른 클래스에서 상속되는 경우 이를 상위 클래스/기본 클래스/슈퍼 클래스에서 상속하는 하위 클래스/파생 클래스라고 합니다. 모든 클래스 멤버(속성 및 메서드)를 상속/가져옵니다.
상속을 통해 코드를 재사용하고 애플리케이션을 더 쉽게 만들고 유지 관리할 수 있습니다. Python은 다음 유형의 상속을 지원합니다.
단일 상속: 클래스가 단일 기본 클래스에서 상속됨
다중 상속: 클래스가 여러 기본 클래스에서 상속됨
다단계 상속: 클래스가 단일 기본 클래스에서 상속됨 상속 다른 기본 클래스에서
계층적 상속: 여러 클래스가 단일 기본 클래스에서 상속됨
혼합 상속: 두 가지 이상의 상속 유형이 혼합됨
상속에 대한 자세한 내용은 다음을 참조하세요.
https:// data-flair .training/blogs/python-inheritance/
Q 7. Flask란 무엇인가요?
Flask는 Python으로 작성된 경량 웹 애플리케이션 프레임워크입니다. WSGI 도구 상자는 Werkzeug를 사용하고 템플릿 엔진은 Jinja2를 사용합니다. Flask는 BSD에 따라 라이센스가 부여됩니다. 환경 종속성 중 두 가지는 Werkzeug와 jinja2입니다. 즉, 외부 라이브러리에 의존할 필요가 없습니다. 이 때문에 우리는 이를 경량 프레임워크라고 부릅니다.
Flask 세션은 서명된 쿠키를 사용하여 사용자가 세션 콘텐츠를 보고 수정할 수 있도록 합니다. 한 요청에서 다른 요청으로 정보를 기록합니다. 그러나 세션을 수정하려면 사용자에게 비밀 Flask.secret_key가 있어야 합니다.
Q 8. Python에서는 메모리를 어떻게 관리하나요?
Python 有一个私有堆空间来保存所有的对象和数据结构。作为开发者,我们无法访问它,是解释器在管理它。但是有了核心 API 后,我们可以访问一些工具。Python 内存管理器控制内存分配。
另外,内置垃圾回收器会回收使用所有的未使用内存,所以使其适用于堆空间。
Q 9. 解释 Python 中的 help() 和 dir() 函数
Help() 函数是一个内置函数,用于查看函数或模块用途的详细说明:
>>> import copy >>> help(copy.copy)
运行结果为:
Help on function copy in module copy: copy(x) Shallow copy operation on arbitrary Python objects. See the module’s __doc__ string for more info.
Dir() 函数也是 Python 内置函数,dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
以下实例展示了 dir 的使用方法:
>>> dir(copy.copy)
运行结果为:
[‘__annotations__’, ‘__call__’, ‘__class__’, ‘__closure__’, ‘__code__’, ‘__defaults__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__get__’, ‘__getattribute__’, ‘__globals__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__kwdefaults__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__name__’, ‘__ne__’, ‘__new__’, ‘__qualname__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’]
Q 10. 当退出 Python 时,是否释放全部内存?
答案是 No。循环引用其它对象或引用自全局命名空间的对象的模块,在 Python 退出时并非完全释放。
另外,也不会释放 C 库保留的内存部分。
Q 11. 什么是猴子补丁?
在运行期间动态修改一个类或模块。
>>> class A: def func(self): print("Hi") >>> def monkey(self): print "Hi, monkey" >>> m.A.func = monkey >>> a = m.A() >>> a.func()
运行结果为:
Hi, Monkey
Q 12. Python 中的字典是什么?
字典是 C++ 和 Java 等编程语言中所没有的东西,它具有键值对。
>>> roots={25:5,16:4,9:3,4:2,1:1} >>> type(roots) <class 'dict'> >>> roots[9]
运行结果为:
3
字典是不可变的,我们也能用一个推导式来创建它。
>>> roots={x**2:x for x in range(5,0,-1)} >>> roots
运行结果:
{25: 5, 16: 4, 9: 3, 4: 2, 1: 1}
Q 13. 请解释使用 *args 和 **kwargs 的含义
当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args。
>>> def func(*args): for i in args: print(i) >>> func(3,2,1,4,7)
运行结果为:
3 2 1 4 7
在我们不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数。
>>> def func(**kwargs): for i in kwargs: print(i,kwargs[i]) >>> func(a=1,b=2,c=7)
运行结果为:
a.1 b.2 c.7
Q 14. 请写一个Python逻辑,计算一个文件中的大写字母数量
>>> import os >>> os.chdir('C:\Users\lifei\Desktop') >>> with open('Today.txt') as today: count=0 for i in today.read(): if i.isupper(): count+=1
运行结果:
26
Q 15. 什么是负索引?
我们先创建这样一个列表:
>>> mylist=[0,1,2,3,4,5,6,7,8]
负索引和正索引不同,它是从右边开始检索。
>>> mylist[-3]
运行结果:
6
它也能用于列表中的切片:
>>> mylist[-6:-1]
结果:
[3, 4, 5, 6, 7]
Q 16. 如何以就地操作方式打乱一个列表的元素?
为了达到这个目的,我们从random模块中导入shuffle()函数。
>>> from random import shuffle >>> shuffle(mylist) >>> mylist
运行结果:
[3, 4, 8, 0, 5, 7, 6, 2, 1]
Q 17. 解释Python中的join()和split()函数
Join()能让我们将指定字符添加至字符串中。 >>> ','.join('12345')
运行结果:
‘1,2,3,4,5’
Split()能让我们用指定字符分割字符串。
>>> '1,2,3,4,5'.split(',')
运行结果:
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
Q 18. Python区分大小写吗?
如果能区分像myname和Myname这样的标识符,那么它就是区分大小写的。也就是说它很在乎大写和小写。我们可以用Python试一试:
>>> myname='Ayushi' >>> Myname Traceback (most recent call last): File "<pyshell#3>", line 1, in <module>
运行结果:
Myname NameError: name ‘Myname’ is not defined
可以看到,这里出现了NameError,所以Python是区分大小写的。
Q 19. Python中的标识符长度能有多长?
在Python中,标识符可以是任意长度。此外,我们在命名标识符时还必须遵守以下规则:
只能以下划线或者 A-Z/a-z 中的字母开头
其余部分可以使用 A-Z/a-z/0-9
区分大小写
关键字不能作为标识符,Python中共有如下关键字:
Q 20. 怎么移除一个字符串中的前导空格?
字符串中的前导空格就是出现在字符串中第一个非空格字符前的空格。我们使用方法Istrip()可以将它从字符串中移除。
>>> ' Ayushi '.lstrip()
结果:
‘Ayushi ‘
可以看到,该字符串既有前导字符,也有后缀字符,调用Istrip()去除了前导空格。如果我们想去除后缀空格,就用rstrip()方法。
>>> ' Ayushi '.rstrip()
结果:
‘ Ayushi’
从Q 21到Q 35是为有Python经验者准备的进阶版Python面试题。
Q 21. 怎样将字符串转换为小写?
我们使用lower()方法。
>>> 'AyuShi'.lower()
结果:
‘ayushi’
使用upper()方法可以将其转换为大写。
>>> 'AyuShi'.upper()
结果:
‘AYUSHI’
另外,使用isupper()和islower()方法检查字符串是否全为大写或小写。
>>> 'AyuShi'.isupper() False >>> 'AYUSHI'.isupper() True >>> 'ayushi'.islower() True >>> '@yu$hi'.islower() True >>> '@YU$HI'.isupper() True
那么,像@和$这样的字符既满足大写也满足小写。
Istitle()能告诉我们一个字符串是否为标题格式。
>>> 'The Corpse Bride'.istitle() True
Q 22. Python中的pass语句是什么?
在用Python写代码时,有时可能还没想好函数怎么写,只写了函数声明,但为了保证语法正确,必须输入一些东西,在这种情况下,我们会使用pass语句。
>>> def func(*args): pass >>>
同样,break语句能让我们跳出循环。
>>> for i in range(7): if i==3: break print(i)
结果:
0 1 2
最后,continue语句能让我们跳到下个循环。
>>> for i in range(7): if i==3: continue print(i)
结果:
0 1 2 4 5 6
Q 23. Python中的闭包是什么?
当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包。其意义就是会记录这个值。
>>> def A(x): def B(): print(x) return B >>> A(7)()
结果:
17
更多关于闭包的知识,请参看这里:
https://data-flair.training/blogs/python-closure/
**Q 24. 解释一下Python中的//,%和 ** 运算符**
//运算符执行地板除法(向下取整除),它会返回整除结果的整数部分。 >>> 7//2 3
这里整除后会返回3.5。
同样地,执行取幂运算。ab会返回a的b次方。
>>> 2**10 1024
最后,%执行取模运算,返回除法的余数。
>>> 13%7 6 >>> 3.5%1.5 0.5
Q 24. 在Python中有多少种运算符?解释一下算数运算符。
在Python中,我们有7种运算符:算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。
我们有7个算术运算符,能让我们对数值进行算术运算:
1.加号(+),将两个值相加
>>> 7+8 15
2.减号(-),将第一个值减去第二个值
>>> 7-8 -1
3.乘号(*),将两个值相乘
>>> 7*8 56
4.除号(/),用第二个值除以第一个值
>>> 7/8 0.875 >>> 1/1 1.0
5.向下取整除、取模和取幂运算,参见上个问题。
Q 25. 解释一下Python中的关系运算符
关系运算符用于比较两个值。
1.小于号(<),如果左边的值较小,则返回True。
>>> 'hi'<'Hi' False
2.大于号(>),如果左边的值较大,则返回True。
>>> 1.1+2.2>3.3 True
3.小于等于号(<=),如果左边的值小于或等于右边的值,则返回Ture。
>>> 3.0<=3 True
4.大于等于号(>=),如果左边的值大于或等于右边的值,则返回True。
>>> True>=False True
等于号(==),如果符号两边的值相等,则返回True。
>>> {1,3,2,2}=={1,2,3} True
不等于号(!=),如果符号两边的值不相等,则返回True。
>>> True!=0.1 True >>> False!=0.1 True
Q 26. 解释一下Python中的赋值运算符
这在Python面试中是个重要的面试问题。
我们将所有的算术运算符和赋值符号放在一起展示:
>>> a=7 >>> a+=1 >>> a 8 >>> a-=1 >>> a 7 >>> a*=2 >>> a 14 >>> a/=2 >>> a 7.0 >>> a**=2 >>> a 49 >>> a//=3 >>> a 16.0 >>> a%=4 >>> a 0.0
Q 27. 解释一下Python中的逻辑运算符
Python中有3个逻辑运算符:and,or,not。
>>> False and True False >>> 7<7 or True True >>> not 2==2 False
Q 28. 解释一下Python中的成员运算符
通过成员运算符‘in’和‘not in’,我们可以确认一个值是否是另一个值的成员。
>>> 'me' in 'disappointment' True >>> 'us' not in 'disappointment' True
Q 29. 解释一下Python中的身份运算符
这也是一个在Python面试中常问的问题。
通过身份运算符‘is’和‘is not’,我们可以确认两个值是否相同。
>>> 10 is '10' False >>> True is not False True
Q 30. 讲讲Python中的位运算符
该运算符按二进制位对值进行操作。
与(&),按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
>>> 0b110 & 0b010 2
2.或(|),按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。
>>> 3|2 3
3.异或(^),按位异或运算符:当两对应的二进位相异时,结果为1
>>> 3^2 1
4.取反(~),按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1
>>> ~2 -3
5.左位移(<<),运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0
>>> 1<<2 4
6.右位移(>>),把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
>>> 4>>2 1
更多关于运算符的知识,参考这里:
https://data-flair.training/blogs/python-operators/
Q 31. 在Python中如何使用多进制数字?
我们在Python中,除十进制外还可以使用二进制、八进制和十六进制。
二进制数字由0和1组成,我们使用 0b 或 0B 前缀表示二进制数。
>>> int(0b1010) 10
2.使用bin()函数将一个数字转换为它的二进制形式。
>>> bin(0xf) ‘0b1111’
3.八进制数由数字 0-7 组成,用前缀 0o 或 0O 表示 8 进制数。
>>> oct(8) ‘0o10’
4.十六进数由数字 0-15 组成,用前缀 0x 或者 0X 表示 16 进制数。
>>> hex(16) ‘0x10’ >>> hex(15) ‘0xf’
Q 32. 怎样获取字典中所有键的列表?
使用 keys() 获取字典中的所有键
>>> mydict={'a':1,'b':2,'c':3,'e':5} >>> mydict.keys() dict_keys(['a', 'b', 'c', 'e'])
Q 33. 为何不建议以下划线作为标识符的开头
因为Python并没有私有变量的概念,所以约定速成以下划线为开头来声明一个变量为私有。所以如果你不想让变量私有,就不要使用下划线开头。
Q 34. 怎样声明多个变量并赋值?
一共有两种方式:
>>> a,b,c=3,4,5 #This assigns 3, 4, and 5 to a, b, and c respectively >>> a=b=c=3 #This assigns 3 to a, b, and c
Q 35. 元组的解封装是什么?
首先我们来看解封装:
>>> mytuple=3,4,5 >>> mytuple (3, 4, 5)
这将 3,4,5 封装到元组 mytuple 中。
现在我们将这些值解封装到变量 x,y,z 中:
>>> x,y,z=mytuple >>> x+y+z
得到结果12.
相关学习推荐:python视频教程
위 내용은 가장 일반적인 Python 인터뷰 질문 및 답변 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!