>백엔드 개발 >파이썬 튜토리얼 >(종합) 파이썬 면접 질문의 전형적인 예 요약

(종합) 파이썬 면접 질문의 전형적인 예 요약

不言
不言앞으로
2019-02-23 10:54:045226검색

(종합) 파이썬 면접 질문의 전형적인 예 요약

이 기사는 Python 면접 질문의 전형적인 예를 요약한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

관련 기사 추천: "2020 Python 인터뷰 질문 요약(최신)"

1. Python은 어떻게 싱글턴 패턴을 구현하나요?

Python에는 싱글톤 모드를 구현하는 두 가지 방법이 있습니다. 다음 두 가지 예에서는 싱글톤 모드를 구현하는 다른 방법을 사용합니다.

1,

class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls, *args, **kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
__metaclass__ = Singleton
print MyClass()
print MyClass()

데코레이터를 사용하여 싱글톤 모드 구현

def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
…

2: 람다 함수란 무엇입니까? ?

Python을 사용하면 작은 한 줄 함수를 정의할 수 있습니다. 람다 함수 정의 형식은 다음과 같습니다. labmda 매개변수: 표현식 람다 함수는 기본적으로 표현식의 값을 반환합니다. 변수에 할당할 수도 있습니다. 람다 함수는 선택적 매개변수를 포함하여 모든 매개변수를 허용할 수 있지만 표현식은 하나뿐입니다:

>>> g = lambda x, y: x*y
>>> g(3,4)
12
>>> g = lambda x, y=0, z=0: x+y+z
>>> g(1)
1
>>> g(3, 4, 7)
14

변수에 할당하지 않고 직접 람다 함수를 사용할 수도 있습니다:

>>> (lambda x,y=0,z=0:x+y+z)(3,5,6)
14

함수가 매우 간단하고 다음과 같은 경우 표현식이 하나만 있고 명령이 포함되어 있지 않으면 람다 함수를 고려해 볼 수 있습니다. 그렇지 않으면 함수를 정의하는 것이 좋습니다. 결국 함수에는 많은 제한이 없습니다.

3: Python은 유형 변환을 어떻게 수행하나요?

Python은 변수나 값을 한 유형에서 다른 유형으로 변환하는 내장 함수를 제공합니다. int 함수는 수학적으로 형식화된 숫자 문자열을 정수로 변환합니다. 그렇지 않으면 오류 메시지가 반환됩니다.

>>> int(”34″)
34
>>> int(”1234ab”) #不能转换成整数
ValueError: invalid literal for int(): 1234ab

int 함수는 부동 소수점 숫자를 정수로 변환할 수도 있지만 부동 소수점 숫자의 소수 부분이 잘립니다.

>>> int(34.1234)
34
>>> int(-2.46)
-2

°oat 함수는 정수와 문자열을 부동 소수점 숫자로 변환합니다.

>>> float(”12″)
12.0
>>> float(”1.111111″)
1.111111

str 함수는 숫자를 문자로 변환합니다.

>>> str(98)
‘98′
>>> str(”76.765″)
‘76.765′

정수 1과 부동 소수점 숫자 1.0은 Python에서 다릅니다. 값은 동일하지만 유형이 다릅니다. 컴퓨터에서 이 두 숫자의 저장 형식도 다릅니다.

4: Python에서 함수를 정의하는 방법

함수의 정의 형식은 다음과 같습니다.

def <name>(arg1, arg2,… argN):
<statements>

함수 이름도 문자로 시작해야 하며 밑줄 " "을 포함할 수 있지만 Python 키워드는 함수 이름으로 정의할 수 없습니다. 함수 내의 명령문 수는 임의적이며 각 명령문은 명령문이 이 함수에 속한다는 것을 나타내기 위해 최소한 하나의 공백으로 들여쓰기되어야 합니다. 들여쓰기가 끝나면 함수는 자연스럽게 종료됩니다.
다음은 두 개의 숫자를 더하는 함수를 정의합니다.

>>> def add(p1, p2):
print p1, “+”, p2, “=”, p1+p2
>>> add(1, 2)
1 + 2 = 3

이 함수의 목적은 일부 복잡한 연산을 숨겨 프로그램 구조를 단순화하고 읽기 쉽게 만드는 것입니다. 함수를 호출하려면 먼저 정의해야 합니다. 함수 내부에 함수를 정의할 수도 있으며, 내부 함수는 외부 함수가 호출될 때만 실행될 수 있습니다. 프로그램이 함수를 호출하면 함수 내부로 가서 함수 안의 명령문을 실행합니다. 함수가 실행된 후 프로그램을 떠난 곳으로 돌아가 프로그램의 다음 명령문을 실행합니다.

5: Python은 메모리를 어떻게 관리하나요?

Python의 메모리 관리는 Python 인터프리터로 처리됩니다. 개발자는 메모리 관리 문제에서 벗어나 애플리케이션 개발에 전념할 수 있습니다. 이로 인해 프로그램 오류가 줄어들고 프로그램이 더욱 강력해지며 개발 주기가 단축됩니다. 6: 시퀀스를 역순으로 반복하는 방법은 무엇입니까?

역순으로 시퀀스를 반복하는 방법

목록인 경우 가장 빠른 해결 방법은 다음과 같습니다.

list.reverse()
try:
for x in list:
“do something with x”
finally:
list.reverse()

목록이 아닌 경우 가장 다양하지만 약간 느린 해결 방법은

for i in range(len(sequence)-1, -1, -1):
x = sequence[i]
<do something with x>

7입니다. : Python에서 튜플과 리스트 간의 변환을 구현하는 방법은 무엇입니까?

함수 tuple(seq)은 모든 반복 가능(반복 가능) 시퀀스를 튜플로 변환할 수 있으며 요소와 정렬은 변경되지 않습니다. 예를 들어, tuple([1,2,3])은 (1,2,3)을 반환하고, tuple('abc')는 ('a'.'b','c')를 반환합니다. tuple 의 경우 함수는 복사본을 만들지 않고 원본 객체를 직접 반환하므로 객체가 튜플인지 확실하지 않은 경우 tuple() 함수를 호출하는 데 비용이 많이 들지 않습니다.

함수 list(seq)는 요소와 정렬을 변경하지 않고 모든 시퀀스와 반복 가능한 객체를 목록으로 변환할 수 있습니다.

예를 들어 list([1,2,3])는 (1,2,3)을 반환하고 list('abc')는 ['a', 'b', 'c']를 반환합니다. 매개변수가 목록인 경우 set[:]


8과 같은 복사본을 만듭니다. Python 인터뷰 질문: 목록에서 중복 요소를 삭제하는 Python 코드를 작성하세요

먼저 목록을 재정렬할 수 있습니다. 목록 끝부터 스캔하면 코드는 다음과 같습니다.

if List:
List.sort()
last = List[-1]
for i in range(len(List)-2, -1, -1):
if last==List[i]: del List[i]
else: last=List[i]

9: Python 파일 작업 인터뷰 질문

Python을 사용하여 파일을 삭제하는 방법은 무엇입니까? os.remove(filename) 또는 os.unlink(filename)을 사용하세요.

Python에서 파일을 복사하는 방법은 무엇인가요?
shutil 모듈에는 파일 복사를 실현할 수 있는 copyfile 함수가 있습니다.


10: Python에서 난수를 생성하는 방법은 무엇입니까?

표준 라이브러리 Random은 난수 생성기를 구현합니다. 예제 코드는 다음과 같습니다.

import random
random.random()

0과 1 사이의 임의의 부동 소수점 숫자를 반환합니다

11:如何用Python来发送邮件?

可以使用smtplib标准库。
以下代码可以在支持SMTP监听器的服务器上执行。

import sys, smtplib
fromaddr = raw_input(”From: “)
toaddrs = raw_input(”To: “).split(’,&#39;)
print “Enter message, end with ^D:”
msg = ”
while 1:
line = sys.stdin.readline()
if not line:
break
msg = msg + line
# 发送邮件部分
server = smtplib.SMTP(’localhost’)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

12:Python里面如何拷贝一个对象?

一般来说可以使用copy.copy()方法或者copy.deepcopy()方法,几乎所有的对象都可以被拷贝
一些对象可以更容易的拷贝,Dictionaries有一个copy方法:

newdict = olddict.copy()

13:有没有一个工具可以帮助查找python的bug和进行静态的代码分析?

有,PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告
Pylint是另外一个工具可以进行coding standard检查。

14:如何在一个function里面设置一个全局的变量?

解决方法是在function的开始插入一个global声明:

def f()
global x

15:用Python匹配HTML tag的时候,eaf5515312973cd1e2c4aca2b4bd67a4和958f55c6e201f79be615af607c97dbf9有什么区别?

当重复匹配一个正则表达式时候, 例如e54b220469ea1f7eeecb6e69f5f72e2b, 当程序执行匹配的时候,会返回最大的匹配值

例如:

import re
s = ‘<html><head><title>Title</title>’
print(re.match(’<.*>’, s).group())

会返回一个匹配而不是

import re
s = ‘<html><head><title>Title</title>’
print(re.match(’<.*?>’, s).group())

则会返回
eaf5515312973cd1e2c4aca2b4bd67a4这种匹配称作贪心匹配 958f55c6e201f79be615af607c97dbf9称作非贪心匹配

16:Python里面search()和match()的区别?

match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
例如:

print(re.match(’super’, ’superstition’).span())

会返回(0, 5)

print(re.match(’super’, ‘insuperable’))

则返回None
search()会扫描整个字符串并返回第一个成功的匹配
例如:

print(re.search(’super’, ’superstition’).span())

返回(0, 5)

print(re.search(’super’, ‘insuperable’).span())

返回(2, 7)

17:如何用Python来进行查询和替换一个文本字符串?

可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0])
replacement是被替换成的文本
string是需要被替换的文本
count是一个可选参数,指最大被替换的数量
例子:

import re
p = re.compile(’(blue|white|red)’)
print(p.sub(’colour’,&#39;blue socks and red shoes’))
print(p.sub(’colour’,&#39;blue socks and red shoes’, count=1))

输出:

colour socks and colour shoes
colour socks and red shoes

subn()方法执行的效果跟sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量
例如:

import re
p = re.compile(’(blue|white|red)’)
print(p.subn(’colour’,&#39;blue socks and red shoes’))
print(p.subn(’colour’,&#39;blue socks and red shoes’, count=1))

输出

(’colour socks and colour shoes’, 2)
(’colour socks and red shoes’, 1)

18:介绍一下except的用法和作用?

Python的except用来捕获所有异常, 因为Python里面的每次错误都会抛出 一个异常,所以每个程序的错误都被当作一个运行时错误。
一下是使用except的一个例子:

try:
foo = opne(”file”) #open被错写为opne
except:
sys.exit(”could not open file!”)

因为这个错误是由于open被拼写成opne而造成的,然后被except捕获,所以debug程序的时候很容易不知道出了什么问题
下面这个例子更好点:

try:
foo = opne(”file”) # 这时候except只捕获IOError
except IOError:
sys.exit(”could not open file”)

19:Python中pass语句的作用是什么?

pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作,比如:

while False:
pass

pass通常用来创建一个最简单的类:

class MyEmptyClass:
pass

pass在软件设计阶段也经常用来作为TODO,提醒实现相应的实现,比如:

def initlog(*args):
pass #please implement this

20:介绍一下Python下range()函数的用法?

如果需要迭代一个数字序列的话,可以使用range()函数,range()函数可以生成等差级数。
如例:

for i in range(5)
print(i)

这段代码将输出0, 1, 2, 3, 4五个数字
range(10)会产生10个值, 也可以让range()从另外一个数字开始,或者定义一个不同的增量,甚至是负数增量
range(5, 10)从5到9的五个数字
range(0, 10, 3) 增量为三, 包括0,3,6,9四个数字
range(-10, -100, -30) 增量为-30, 包括-10, -40, -70
可以一起使用range()和len()来迭代一个索引序列
例如:

a = [&#39;Nina&#39;, &#39;Jim&#39;, &#39;Rainman&#39;, &#39;Hello&#39;]
for i in range(len(a)):
    print(i, a[i])

21:有两个序列a,b,大小都为n,序列元素的值任意整形数,

无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
将两序列合并为一个序列,并排序,为序列Source

拿出最大元素Big,次大的元素Small

在余下的序列S[:-2]进行平分,得到序列max,min

将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。

Python代码

def mean( sorted_list ):
if not sorted_list:
return (([],[]))
big = sorted_list[-1]
small = sorted_list[-2]
big_list, small_list = mean(sorted_list[:-2])
big_list.append(small)
small_list.append(big)
big_list_sum = sum(big_list)
small_list_sum = sum(small_list)
if big_list_sum > small_list_sum:
return ( (big_list, small_list))
else:
return (( small_list, big_list))
tests = [   [1,2,3,4,5,6,700,800],
[10001,10000,100,90,50,1],
range(1, 11),
[12312, 12311, 232, 210, 30, 29, 3, 2, 1, 1]
]
for l in tests:
l.sort()
print
print “Source List:    ”, l
l1,l2 = mean(l)
print “Result List:    ”, l1, l2
print “Distance:    ”, abs(sum(l1)-sum(l2))
print ‘-*’*40

输出结果

Source List:    [1, 2, 3, 4, 5, 6, 700, 800]
Result List:    [1, 4, 5, 800] [2, 3, 6, 700]
Distance:       99
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Source List:    [1, 50, 90, 100, 10000, 10001]
Result List:    [50, 90, 10000] [1, 100, 10001]
Distance:       38
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Source List:    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Result List:    [2, 3, 6, 7, 10] [1, 4, 5, 8, 9]
Distance:       1
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Source List:    [1, 1, 2, 3, 29, 30, 210, 232, 12311, 12312]
Result List:    [1, 3, 29, 232, 12311] [1, 2, 30, 210, 12312]
Distance:       21
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

相关学习推荐:python视频教程

위 내용은 (종합) 파이썬 면접 질문의 전형적인 예 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 公众号python爬虫人工智能大数据에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제