Python 프로그래머 면접 에서 가장 많이 물 어 본 10 문제.
Python 은 매우 인기 있 는 프로 그래 밍 언어 로 최근 몇 년 동안 기계 학습,클 라 우 드 컴 퓨 팅 등 기술 의 발전 에 따라 Python 의 직무 수요 가 점점 높 아 지고 있다.다음은 파 이 썬 면접 관 이 자주 묻 는 질문 10 개 를 모 아 참고 학습 을 제공 하 겠 습 니 다.
상속
다음 코드 가 있 습 니 다:
class A(object):
def show(self):
print 'base show'
class B(A):
def show(self):
print 'derived show'
obj = B()
obj.show()
클래스 A 의 show 방법 을 어떻게 호출 합 니까?방법 은 다음 과 같다.
obj.__class__ = A
obj.show()
__class__방법 은 클래스 대상 을 가리 키 고 그 에 게 할당 형식 A 만 사용 한 다음 에 방법 show 를 호출 하지만 다 쓰 면 수정 하 는 것 을 기억 합 니 다.방법 대상
문제:아래 코드 가 실 행 될 수 있 도록 어떤 코드 를 추가 해 야 합 니까?
class A(object):
def __init__(self,a,b):
self.__a = a
self.__b = b
def myprint(self):
print 'a=', self.__a, 'b=', self.__b
a1=A(10,20)
a1.myprint()
a1(80)
정 답:대상 인 스 턴 스 가 직접 호출 될 수 있 도록call__방법.
class A(object):
def __init__(self, a, b):
self.__a = a
self.__b = b
def myprint(self):
print 'a=', self.__a, 'b=', self.__b
def __call__(self, num):
print 'call:', num + self.__a
new 와 init아래 의 이 코드 는 무엇 을 입력 합 니까?
class B(object):
def fn(self):
print 'B fn'
def __init__(self):
print "B INIT"
class A(object):
def fn(self):
print 'A fn'
def __new__(cls,a):
print "NEW", a
if a>10:
return super(A, cls).__new__(cls)
return B()
def __init__(self,a):
print "INIT", a
a1 = A(5)
a1.fn()
a2=A(20)
a2.fn()
답:
NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn
사용new__방법 은 그 대상,즉 대상 을 만 들 기 전에 디자인 모델 의 단일 예,공장 모델 에 사용 할 수 있 습 니 다.init__생 성 대상 입 니 다.호출 되 었 습 니 다.Python list 와 dict 생 성
다음 코드 는 무엇 을 출력 합 니까?
ls = [1,2,3,4]
list1 = [i for i in ls if i>2]
print list1
list2 = [i*2 for i in ls if i>2]
print list2
dic1 = {x: x**2 for x in (2, 4, 6)}
print dic1
dic2 = {x: 'item' + str(x**2) for x in (2, 4, 6)}
print dic2
set1 = {x for x in 'hello world' if x not in 'low level'}
print set1
답:
[3, 4]
[6, 8]
{2: 4, 4: 16, 6: 36}
{2: 'item4', 4: 'item16', 6: 'item36'}
set(['h', 'r', 'd'])
전역 및 국부 변수다음 코드 는 무엇 을 출력 합 니까?
num = 9
def f1():
num = 20
def f2():
print num
f2()
f1()
f2()
답:
9
9
num 은 전역 변수 가 아니 기 때문에 모든 함수 가 자신의 num 복사 본 을 받 았 습 니 다.num 을 수정 하려 면 global 키워드 로 설명 해 야 합 니 다.예 를 들 면 아래 이렇게.
num = 9
def f1():
global num
num = 20
def f2():
print num
f2()
f1()
f2()
# prints:
# 9
# 20
두 변수의 값 을 교환 하 다한 줄 코드 교환 두 변수 값
a=8
b=9
답:
(a,b) = (b,a)
기본 방법다음 코드
class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print 'init'
def mydefault(self):
print 'default'
a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
방법 fn1/fn2/fn3 모두 정의 되 지 않 았 습 니 다.코드 를 추가 하 는 것 은 정의 되 지 않 은 방법 으로 my default 함 수 를 호출 하 는 것 입 니 다.위의 코드 는 출력 해 야 합 니 다.
default
default
default
답:
class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print 'init'
def mydefault(self):
print 'default'
def __getattr__(self,name):
return self.mydefault
a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
방법getattr__정 의 된 방법 이 없 을 때 만 그 를 호출 할 수 있다.fn1 방법 이 매개 변 수 를 입력 할 때,우 리 는 my default 방법 에*args 부정 확 한 매개 변 수 를 추가 하여 호 환 할 수 있 습 니 다.
class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print 'init'
def mydefault(self,*args):
print 'default:' + str(args[0])
def __getattr__(self,name):
print "other fn:",name
return self.mydefault
a1 = A(10,20)
a1.fn1(33)
a1.fn2('hello')
a1.fn3(10)
패키지 관리한 가방 에 세 개의 모듈 이 있 습 니 다.mod1.py,mod2.py,mod3.py 이지 만 from demopack import*가 져 오기 모듈 을 사용 할 때 mod1,mod3 만 가 져 오 는 것 을 어떻게 보장 합 니까?
정 답:증가init__.py 파일,그리고 파일 에 추가:
__all__ = ['mod1','mod3']
폐쇄 하 다함수 하 나 를 쓰 고 정수 인자 n 을 받 아 함수 하 나 를 되 돌려 줍 니 다.함수 의 기능 은 함수 의 매개 변수 와 n 을 곱 하고 결 과 를 되 돌려 주 는 것 입 니 다.
답:
def mulby(num):
def gn(val):
return num * val
return gn
zw = mulby(7)
print(zw(9));
성능아래 코드 가 어디 에 느 린 지 분석 합 니 다.
def strtest1(num):
str='first'
for i in range(num):
str+="X"
return str
정 답:python 의 str 는 가 변 적 이지 않 은 대상 입 니 다.매번 교체 할 때마다 새로운 str 대상 을 생 성하 여 새로운 문자열 을 저장 합 니 다.num 이 클 수록 만 든 str 대상 이 많 을 수록 메모리 소모 가 큽 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.