21の古典的なPythonインタビューの質問[推奨コレクション]

1. Pythonはどのようにシングルトンモードを実装しますか?

Pythonには、シングルトンモードを実装する2つの方法があります。次の2つの例では、シングルトンモードを実装するためにさまざまな方法を使用しています。

1.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()
  1. デコレータを使用してシングルトンモードを実装する

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

2:ラムダ関数とは何ですか?

Pythonでは、小さな1行の関数を定義できます。ラムダ関数を定義する形式は次のとおりです。labmdaパラメーター:式ラムダ関数は、デフォルトで式の値を返します。変数に割り当てることもできます。ラムダ関数は、オプションのパラメーターを含む任意の数のパラメーターを受け入れることができますが、式は1つだけです。

>>> 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

関数が非常に単純で、式が1つだけでコマンドがない場合は、ラムダ関数を検討してください。それ以外の場合でも、関数を定義する必要があります。結局のところ、関数にはそれほど多くの制限はありません。

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では異なります。それらの値は同じですが、それらは異なるタイプに属しています。これら2つの数字のコンピューターへの保存形式も異なります。

多くの人がPythonを学び、どこから始めればよいのかわかりません。
多くの人がPythonを学び、基本的な文法を習得した後、どこから始めればよいかわかりません。
事例研究を行った多くの人々は、より高度な知識を学ぶ方法を知りません。
これらの3つのタイプの人々のために、私はあなたに優れた学習プラットフォームを提供し、ビデオチュートリアル、電子書籍、およびコースのソースコードを無料で受け取ることができます!
QQグループ:810735403

 

4:Pythonはどのように関数を定義しますか

関数の定義は次のとおりです。

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

関数の名前も文字で始まる必要があり、アンダースコア ""を含めることができますが、Pythonキーワードを関数の名前として定義することはできません。関数内のステートメントの数は任意であり、各ステートメントには、ステートメントが関数に属していることを示すために少なくとも1つのスペースインデントがあります。インデントが終了すると、関数は自然に終了します。
以下は、2つの数値を加算する関数を定義しています。

>>> 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()関数を呼び出すのにそれほど費用はかかりません。
関数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ファイル操作に関するインタビューの質問

  1. Pythonでファイルを削除する方法は?
    os.remove(filename)またはos.unlink(filename);を使用します。

  2. Pythonはどのようにファイルをコピーしますか?
    シャットダウンモジュールには、ファイルコピーを実現するためのコピーファイル機能があります

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(’,')
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()メソッドを使用できます。ほとんどすべてのオブジェクトをコピーできます。
一部のオブジェクトはより簡単にコピーできます。辞書にはcopyメソッドがあります。

newdict = olddict.copy()

13:Pythonのバグを見つけて静的コード分析を実行するのに役立つツールはありますか?

はい、PyCheckerはPythonコードの静的分析ツールです
。Pythonコードのバグを見つけ、コードの複雑さと形式について警告するのに役立ちます。Pylintは、コーディング標準チェックを実行できるもう1つのツールです。

14:関数にグローバル変数を設定するにはどうすればよいですか?

解決策は、関数の先頭にグローバル宣言を挿入することです。

def f()
global x

15:HTMLタグをPythonと照合する場合、<。>と<。?>の違いは何ですか?

<。*>などの正規表現を繰り返し照合する場合、プログラムが照合を実行すると、最大の照合値が返されます。
次に例を示します。

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())


<。>を返します。この種のマッチングは貪欲なマッチングと呼ばれます<。?>は非貪欲なマッチングと呼ばれます

16:Pythonのsearch()とmatch()の違いは?

match()関数は、REが文字列の先頭で一致するかどうかのみを検出し、search()は文字列全体をスキャンして一致を確認します。つまり、match()は、位置0で一致が成功した場合にのみ戻ります。は一致の開始時にありません。、Match()はnoneを返します。
例:

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

(0、5)
返し

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

戻り値なし
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’,'blue socks and red shoes’))
print(p.sub(’colour’,'blue socks and red shoes’, count=1))

出力:

colour socks and colour shoes
colour socks and red shoes

subn()メソッドはsub()と同じ効果を実行しますが、置換後の新しい文字列と置換の総数を含む2次元配列を返します。
次に例を示します。

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

出力

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

18:例外の使用法と機能について教えてください。

Pythonのexceptは、すべての例外をキャッチするために使用されます。Pythonのすべてのエラーは例外をスローするため、すべてのプログラムエラーはランタイムエラーとして扱われます。
以下を除いて使用例を示します。

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

このエラーは、openがopneとしてスペルされ、excludeによってキャッチされることが原因であるため、プログラムのデバッグ時に何が問題であったかを簡単に知ることができます。
より良い例を次に示します。

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()関数を使用できます。
例えば:

for i in range(5)
print(i)

このコードは、5つの数値0、1、2、3、4を出力します
。Range(10)は10個の値を生成します。range()を別の数値から開始したり、別の増分、または負の数を定義したりすることもできます。増分
range(5、10
5から9までの5つの数値
range(0、10、3 )増分は3で、4つの数値を含みます0,3,6,9 range(-10、-100、-30)増分は-10、-40、-70を含む-30。range
()とlen()を一緒に使用して、インデックスシーケンスを繰り返すことができます。
例:

a = ['Nina', 'Jim', 'Rainman', 'Hello']
for i in range(len(a)):
    print(i, a[i])

21:2つのシーケンスa、bがあり、サイズはn、シーケンス要素の値は任意の整数、

無秩序;要件:aとbの要素を交換することにより、[シーケンスa要素の合計]と[シーケンスb要素の合計]の差が最小限に抑えられます。
2つのシーケンスを1つのシーケンスに結合し、シーケンスソースとして並べ替えます

最大の要素Big、2番目に大きい要素Smallを取り出します

残りのシーケンスS [:-2]で均等に除算して、シーケンスの最大値、最小値を取得します

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開発交換学習(qq)グループをお勧めします:810735403、グループ内のすべての学生がPython開発を学習しています。Pythonを学習している場合は、参加できます。誰もがソフトウェア開発パーティーです。最新のPythonの高度な資料のコピーや、2021年に自分で編集した高度な開発チュートリアルを含む乾物(Pythonソフトウェア開発にのみ関連)。高度なものやPythonに深く入りたい人へようこそ。 !!

おすすめ

転載: blog.csdn.net/XIe_0928/article/details/113105557