Pythonインタビューの質問の蓄積

Pythonインタビューの質問の蓄積

Q1。Pythonのリストとタプルの違いは何ですか?

  • リストは動的で、長さは固定されていません。要素を自由に追加、削除、変更できます
  • タプルは静的であり、長さは初期化時に決定され、変更できません。また、要素を追加、削除、または変更することもできません。

データが変更される可能性が低い場合は、タプルを使用してデータを保存します。データを頻繁に変更および増加する必要がある場合は、リストを使用します。

Q2。Pythonの主な機能は何ですか?

  • Pythonはインタプリタ言語です。Cなどの言語とは異なり、Pythonは実行前にコンパイルする必要はありません。

  • Pythonは動的言語です。変数または同様の変数を宣言する場合、変数の型を宣言する必要はありません。

  • Pythonは、クラスの定義と構成および継承を可能にするため、オブジェクト指向プログラミングに適しています。Pythonにはアクセス命令がありません(C ++のパブリックおよびプライベートなど)。

  • Pythonでは、関数はオブジェクトの最初のクラスです。それらは変数に割り当てることができます。クラスもファーストクラスのオブジェクトです

  • Pythonコードの記述は高速ですが、実行速度は遅くなります。Pythonでは、numpyライブラリなどのCベースの拡張機能を使用できます。

  • Pythonは多くの分野で使用できます。Webアプリケーションの開発、自動化、数学的モデリング、ビッグデータアプリケーションなど。また、「グルー」コードとしてもよく使用されます。

Q3。Pythonは汎用プログラミング言語ですか?

Pythonはスクリプトを書くことができますが、一般的な意味では、汎用プログラミング言語と見なされます。

Q4。Pythonは言語をどのように解釈しますか?

Pythonは、実行する前にプログラムを解釈する必要はありません。したがって、Pythonはインタプリタ言語です。

Q5。ペップとは何ですか?

PEPはPythonEnhancementProposalの略です。これは、読みやすさを最大化するためにPythonコードをフォーマットする方法を指定する一連のルールです。

Q6。Pythonでメモリを管理するにはどうすればよいですか?

Pythonのメモリ管理は、Pythonのプライベートヒープスペースによって管理されます。すべてのPythonオブジェクトとデータ構造はプライベートヒープにあります。プログラマーはこのプライベートヒープにアクセスできません。Pythonインタープリターは、この問題の処理を担当します。

Pythonオブジェクトのヒープスペースの割り当ては、Pythonのメモリマネージャーによって行われます。コアAPIは、プログラマーがコードを作成するためのツールをいくつか提供します。

Pythonにはガベージコレクターも組み込まれており、未使用のメモリをすべて再利用してヒープスペースで使用できるようにすることができます。

Pythonでのメモリ管理は、3つの側面から実行されます。1つはオブジェクト参照カウントメカニズムbai、2つ目はガベージコレクションメカニズム、3つ目はメモリプールメカニズムです。

1.オブジェクト参照カウントメカニズム

Pythonは、内部で参照カウントを使用して、メモリ内のオブジェクトを追跡します。すべてのオブジェクトには参照カウントがあります。
参照カウントが増加する状況:
1。オブジェクトに新しい名前を割り当てます
2.それをコンテナー(リスト、タプル、辞書など)
に入れます参照カウントが減少する状況:
1。delステートメントを使用して破棄しますオブジェクトエイリアス表示
2。、参照がスコープ外であるか、
sys.getrefcount()関数に再割り当てされて、オブジェクトの現在の参照カウントを取得します。
ほとんどの場合、参照カウントは予想よりもはるかに大きくなります。不変のデータ(数値や文字列など)の場合、インタープリターはメモリを節約するためにプログラムのさまざまな部分でメモリを共有します。

2、ガベージコレクション

1.オブジェクトの参照カウントがゼロに戻ると、ガベージコレクションメカニズムによって破棄されます。
2. 2つのオブジェクトaとbが相互に参照する場合、delステートメントはaとbの参照カウントを減らし、基になるオブジェクトを参照するために使用される名前を破棄できます。ただし、各オブジェクトには他のオブジェクトへのアプリケーションが含まれているため、参照カウントがゼロにリセットされることはなく、オブジェクトが破棄されることもありません。(したがって、メモリリークが発生します)。この問題を解決するために、インタプリタは定期的にループ検出器を実行して、アクセスできないオブジェクトのループを検索し、それらを削除します。

第三に、メモリプールメカニズム

Pythonはメモリのガベージコレクションメカニズムを提供しますが、未使用のメモリをオペレーティングシステムに返すのではなく、メモリプールに保存します。
1.Pymallocメカニズム。Pythonの実行効率を高速化するために、Pythonは、アプリケーションとメモリの小さなブロックの解放を管理するためのメモリプールメカニズムを導入しました。
2. Pythonの256バイト未満のすべてのオブジェクトは、pymallocによって実装されたアロケーターを使用しますが、大きなオブジェクトはシステムmallocを使用します。
3.整数、浮動小数点数、リストなどのPythonオブジェクトの場合、独立したプライベートメモリプールがあり、それらのメモリプールはオブジェクト間で共有されません。つまり、多数の整数を割り当てて解放すると、これらの整数をキャッシュするために使用されていたメモリを浮動小数点数に割り当てることができなくなります。

Q7。Pythonの名前空間とは何ですか?

名前空間は、名前の競合を回避するために名前が一意であることを確認するために使用される名前空間です。

Pythonでは、すべての名前はスペースに存在し、そこで存在して操作されます。これが名前空間です。これはボックスのようなもので、各変数名にはオブジェクトが含まれています。変数を照会すると、対応するオブジェクトがボックスに表示されます。

【定義】
名前からオブジェクトへのマッピング。名前空間は辞書の実現であり、キーは変数名であり、値は変数に対応する値です。各名前空間が独立しているかどうかは関係ありません。名前空間に同じ名前を付けることはできませんが、異なる名前空間に影響を与えることなく同じ名前を付けることができます。

[分類]
Pythonプログラムの実行中に、2つまたは3つのアクティブな名前空間があります(関数が呼び出されたときに3つ、関数が呼び出された後に2つ)。変数定義の場所に応じて、次の3つのカテゴリに分類できます。

  • ローカル、ローカル名前空間、各関数が所有する名前空間は、関数の入力パラメーターや内部で定義されたローカル変数など、関数で定義されたすべての変数を記録します。

  • グローバルは、各モジュールがロードおよび実行されるときに作成されるグローバル名前空間であり、モジュールで定義された関数とクラス、他のインポートされたモジュール、モジュールレベルの変数および定数を含む、モジュールで定義された変数を記録します。

  • 組み込みのPythonの組み込み名前空間は、どのモジュールからでもアクセスでき、組み込み関数と例外が含まれています。

【ライフサイクル】

  • ローカル(ローカル名前空間)は、関数が呼び出されたときに作成されますが、関数が結果を返すか、例外をスローすると削除されます。(各再帰関数には独自の名前空間があります)。

  • グローバル(グローバル名前空間)は、モジュールがロードされるときに作成され、通常、Pythonインタープリターが終了するまで保持されます。

  • ビルトイン(ビルトイン名前空間)は、Pythonインタープリターが起動したときに作成され、インタープリターが終了するまで残ります。

各名前空間の作成順序:pythonインタープリターの起動->組み込みの名前空間の作成->モジュールのロード->グローバル名前空間の作成->関数の呼び出し->ローカル名前空間の作成

各名前空間の破棄順序:関数呼び出し終了->関数に対応するローカル名前空間を破棄-> python仮想マシン(インタープリター)exit->グローバル名前空間を破棄->組み込み名前空間を破棄

Pythonインタープリターの読み込みフェーズでは、モジュールの組み込み名前空間とグローバル名前空間が作成されます。ローカル名前空間は、実行時フェーズで関数が呼び出されると動的に作成され、関数が呼び出されると動的に破棄されます。

Q8。PYTHONPATHとは何ですか?

モジュールのインポート時に使用される環境変数です。モジュールがインポートされるたびに、PYTHONPATHも検索され、インポートされたモジュールが各ディレクトリに存在するかどうかが確認されます。インタプリタはこれを使用して、ロードするモジュールを決定します。

Q9。Pythonモジュールとは何ですか?Pythonで一般的に使用される組み込みモジュールは何ですか?

Pythonモジュールは、Pythonコードを含む.pyファイルです。このコードは、関数クラスまたは変数にすることができます。一般的に使用される組み込みモジュールには、sys、math、random、data time、JSONなどがあります。

Q10。Pythonのローカル変数とグローバル変数とは何ですか?

グローバル変数:関数の外部またはグローバル空間で宣言された変数は、グローバル変数と呼ばれます。これらの変数には、プログラム内の任意の関数からアクセスできます。

ローカル変数:関数で宣言された変数は、ローカル変数と呼ばれます。この変数は、グローバルスペースではなく、ローカルスペースに存在します。

Q11。Pythonでは大文字と小文字が区別されますか?

はい。Pythonは大文字と小文字を区別する言語です。

Q11。Pythonでは大文字と小文字が区別されますか?

はい。Pythonは大文字と小文字を区別する言語です。

Q12。Pythonの型変換とは何ですか?

型変換とは、あるデータ型を別のデータ型に変換することです。

int()-任意のデータ型を整数型に変換します

float()-任意のデータ型をfloat型に変換します

ord()-文字を整数に変換します

hex()-整数を16進数に変換します

oct()-整数を8進数に変換します

tuple()-この関数は、タプルに変換するために使用されます。

set()-この関数は、setに変換した後の型を返します。

list()-この関数は、任意のデータ型をリスト型に変換するために使用されます。

dict()-この関数は、シーケンシャルタプル(キー、値)を辞書に変換するために使用されます。

str()-整数を文字列に変換するために使用されます。

複素数(実数、画像)-この関数は、実数を複素数(実数、画像)数に変換します。

Q14。Pythonではインデントが必要ですか?

Pythonではインデントが必要です。コードブロックを指定します。ループ、クラス、関数などのすべてのコードは、インデントされたブロックで指定されます。これは通常、4つのスペース文字を使用して行われます。コードをインデントする必要がない場合、コードは正確に実行されず、エラーがスローされます。

Q15。Python配列とリストの違いは何ですか?

Pythonの配列とリストには、データを格納する方法が同じです。ただし、配列には単一のデータ型要素のみを含めることができ、リストには任意のデータ型要素を含めることができます。

Q16。Pythonの関数は何ですか?

関数は、呼び出されたときにのみ実行されるコードのブロックです。Pythonで関数を定義するには、defキーワードを使用する必要があります。

Q17。__init__とは何ですか?

__init__は、Pythonのメソッドまたは構造体です。クラスの新しいオブジェクト/インスタンスを作成すると、このメソッドが自動的に呼び出されてメモリが割り当てられます。すべてのクラスには__init__メソッドがあります。
コード例

class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def show(self):
        print("我的名字叫%s,我今年%d岁"%(self.name,self.age))

person1=Person("小米",25)
person1.show()

出力:

我的名字叫小米,我今年25

Q18。ラムダ関数とは何ですか?

ラムダ関数は無名関数とも呼ばれます。この関数には任意の数のパラメーターを含めることができますが、操作を実行するステートメントは1つだけです。

Q19。Pythonの自己とは何ですか?

selfは、クラスのインスタンスまたはオブジェクトです。Pythonでは、selfは最初のパラメーターに含まれています。ただし、これはJavaには当てはまらず、オプションです。ローカル変数を持つクラスのメソッドとプロパティを区別するのに役立ちます。initメソッドのself変数は、新しく作成されたオブジェクトを参照しますが、他のメソッドでは、メソッドが呼び出されたオブジェクトを参照します。

Q20。ブレーク、コンティニュー、パスの違いは何ですか?

参照:
[Python] pass、continue、breakの違い

Q21。[::-1}はどういう意味ですか?

[::-1]は、配列またはシーケンスの順序を逆にするために使用されます。
サンプルコード:

a='python'
b=a[::-1]
print(b) #nohtyp
c=a[::-2]
print(c) #nhy
#从后往前数的话,最后一个位置为-1
d=a[:-1]  #从位置0到位置-1之前的数
print(d)  #pytho
e=a[:-2]  #从位置0到位置-2之前的数
print(e)  #pyth

参照:Pythonの[:-1]と[::-1]

Q22。Pythonでリスト内の要素をランダム化するにはどうすればよいですか?

シャッフル関数を使用して、リスト要素をランダム化できます。例は次のとおりです。

import random

words = ["python", "java", "constant", "immutable"]
random.shuffle(words)
print(words)

出力

['java', 'constant', 'python', 'immutable']

Q23。Pythonイテレータとは何ですか?

イテレータは、トラバースまたは反復できるオブジェクトです。

イテレータ:イテレータは特別なオブジェクトと見なすことができます。オブジェクトが呼び出されるたびに、次の要素が返されます。実装の観点から、イテレータオブジェクトは__iter __()メソッドとnext(のオブジェクト)を定義する必要があります。 ) 方法。

Q24。Pythonで乱数を生成するにはどうすればよいですか?

ランダムモジュールは、乱数を生成するための標準モジュールです。この方法は次のように定義されています。

# 导入 random(随机数) 模块
import random
print(random.random()) #random.random()方法返回[0,1]范围内的浮点数
print(random.randint(0, 9))

random.random()メソッドは、[0,1]の範囲の浮動小数点数を返します。この関数は、ランダムな浮動小数点数を生成します。ランダムクラスで使用されるメソッドは、インスタンスを非表示にするバインディングメソッドです。Randomのインスタンスを使用して、さまざまなスレッドインスタンスを作成するマルチスレッドプログラムを表示できます。使用される他のランダムジェネレーターは次のとおりです。

randrange(a、b):整数を選択し、[a、b]間の範囲を定義します。指定された範囲からランダムに要素を選択して要素を返します。スコープオブジェクトは作成されません。

Uniform(a、b):[a、b)の範囲で定義された浮動小数点数を選択します

normalvariate(mean、sdev):正規分布に使用されます。ここで、meanは平均値、sdevは標準偏差に使用されるシグマです。

Randomクラスを使用してインスタンス化し、独立した複数の乱数ジェネレーターを作成します。

Q29。文字列の最初の文字をどのように大文字にしますか?

Pythonでは、capitalize()関数は文字列の最初の文字を大文字にすることができます。文字列の先頭にすでに大文字が含まれている場合は、元の文字列が返されます。

サンプルコード:

#!/usr/bin/python3
str = "this is string EXAMPLE from runoob....wow!!!"
print ("str.capitalize() : ", str.capitalize())#首字母大写,其他小写
print ("str.capitalize() : ", str.lower())#全部小写

出力:

str.capitalize() :  This is string example from runoob....wow!!!
str.capitalize() :  this is string example from runoob....wow!!!

Q38。なぜ* args、** kwargsを使用するのですか?

関数に渡すパラメーターの数がわからない場合、または保存されたリストまたはパラメータータプルを関数に* args,**kwargs渡したい場合、関数に渡されるキーワード引数の数がわからない場合はkwargs使用します。辞書の値をキーワードパラメータとして渡すために使用できます。識別子argsとkwargsは慣例であり、使用することもできます* bob和** billy。

Q46。Python配列に値を追加するにはどうすればよいですか?

append()、extend()、およびinsert(i、x)関数を使用して、配列に要素を追加できます。

member = ['a','b','c','1','2',3]
print(member)
member.append("python")#可以在列表后方添加一个元素:
print(member)
member1 = ['one','two','three']
member.extend(member1)#可以在列表后方添加一个列表:
print(member)
member.insert(1,"h")#可以根据索引位置在指定的地方插入元素:注意索引起始值是0
print(member)

出力

['a', 'b', 'c', '1', '2', 3]
['a', 'b', 'c', '1', '2', 3, 'python']
['a', 'b', 'c', '1', '2', 3, 'python', 'one', 'two', 'three']
['a', 'h', 'b', 'c', '1', '2', 3, 'python', 'one', 'two', 'three']

Q47。Python配列の値を削除するにはどうすればよいですか?

pop()またはremove()を使用して、配列要素を削除できます。これら2つの関数の違いは、前者は削除された値を返すのに対し、後者は返さないことです。

a = ["a", "b",  "c","d", "e"]
print(a)
for item in a[:]:
    print(item)
    if item == "b":
        a.remove(item)#匹配删除
print(a)
a.pop(1)#根据索引删除,列表第二个数删除
print(a)

Q50。Pythonでマルチスレッドを実装するにはどうすればよいですか?

Pythonにはマルチスレッドライブラリがありますが、マルチスレッドを使用してコードを高速化する効果はあまり良くありません。

Pythonには、グローバルインタープリターロック(GIL)と呼ばれる構造があります。GILは、一度に1つの「スレッド」のみを実行できることを保証します。1つのスレッドがGILを取得して関連する操作を実行し、GILを次のスレッドに渡します。

プログラムは複数のスレッドによって並行して実行されているように見えますが、実際には同じCPUコアを順番に使用しているだけです。

これらすべてのGIL転送は、実行コストを増加させます。これは、マルチスレッドによってプログラムの実行が速くならないことを意味します。

Q51、Pythonシンボル//、%および/操作

%は余りです
//は整数です
/は商(浮動小数点)です

サンプルコード:

a = 9
print('这是%运算的结果'+str(a%2))
print('这是//运算的结果'+str(a//2))
print('这是/运算的结果'+str(a/2))

出力結果:

这是%运算的结果1
这是//运算的结果4
这是/运算的结果4.5

1.吐血のまとめ!(答え)50のPythonの面接の質問の収集
2. Niuke.com

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=188&tqId=37519&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high-week%2Fquestion-ranking&tab=answerKey

https://www.cnblogs.com/zyjimmortalp/p/12669749.html

おすすめ

転載: blog.csdn.net/mao_hui_fei/article/details/114271615