目次
#Python ジェネレーターとは何ですか?
什么是元类? 使用场景
GIL(Global Interpreter Lock)
全局解释器锁
GIL的设计初衷?
为什么要加在解释器,而不是在其他层?
GIL的实现是线程不安全?为什么?
什么是 lambda 表达式?
什么是深拷贝和浅拷贝?
ホームページ バックエンド開発 Python チュートリアル Python について話しましょう 8 部構成のエッセイ

Python について話しましょう 8 部構成のエッセイ

Apr 13, 2023 pm 03:10 PM
python 書類 通信網

同志の皆さん、今日は Python の基本的な問題を復習します。Python はインタープリタ型言語であり、その効率が他の言語よりも低いことは誰もが知っています。この低い速度は、動作中にわずかに低いだけです。 、しかし、多くのシナリオでは、これらを購入するのは簡単です

構文を理解して習得するのが簡単なため、より多くの作業を短時間で完了でき、開発効率も向上します。より高い

同時に、Pythonにはプログラムの開発に使用できるさまざまな既製のライブラリが付属しており、Pythonはメンテナンスも簡単です

Pythonは私たちに提供します非常に完全な基本コード ベースは、ネットワーク、ファイル、GUI、データベース、テキストなどの多数のコンテンツをカバーしています。これは、鮮やかに「バッテリー付き」と呼ばれています。 Python で開発されているため、多くの関数を最初から作成する必要はなく、既成の関数を使用するだけです。

Python には、組み込みライブラリに加えて、直接使用できるように他の人が開発したサードパーティ ライブラリも多数あります。もちろん、開発したコードが適切にカプセル化されていれば、他の人が使用できるサードパーティ ライブラリとして使用することもできます。

#Python ジェネレーターとは何ですか?

generator では、ジェネレーター オブジェクトを生成するには 2 つの方法があります。1 つはかっこを使用したリスト生成です。

g1 = (x for x in range(10) )

1 つは、関数定義に yield キーワードを含めることです。

#

def fib(max):
n, a, b = 0, 0, 1
while n < max:yield b
a, b = b, a + b
n = n + 1
return 'done'g2 = fib(8)
ログイン後にコピー

ジェネレーター オブジェクト g1 および g2 の場合、 next(g1) を通じて次の要素の値を継続的に取得できます。これ以上要素がない場合、エラー StopIteration

が報告されます。要素の値は、for ループを通じて取得することもできます。

ジェネレーターの利点は、大量のメモリを消費しないことです。使用するときに要素の値を計算するだけで済みます。

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

Python の for ループで使用できるものは iterable Iterable と呼ばれ、list/set/tuple/str/dict やその他のデータ構造とジェネレーターが含まれます。次のステートメントを使用して、オブジェクトが反復可能かどうかを判断します:

from collections import Iterableisinstance(x, Iterable)
ログイン後にコピー

イテレータ イテレータは、next() 関数によって呼び出すことができるジェネレータを指し、次の値が返されるまで継続的に次の値を返します。 StopIteration; これらはすべてイテレータですが、リストなどのデータ構造はイテレータではありません;

次のステートメントを通じてリストをイテレータに変えることができます:

iter([1,2,3,4,5])
ログイン後にコピー

ジェネレータはすべてイテレータですが、イテレータは必ずしもジェネレータであるとは限りません。

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

    リストは可変長ですが、タプルは不変です;
  • リスト内の要素の値は変更できますが、タプルは変更できません;
  • list のサポート Append、insert、remove、pop などのメソッドはタプルではサポートされていません

list と dict は Python でどのように実装されますか?

リスト: 基本的には順次リストですが、テーブルの拡張は毎回指数関数的であるため、データが動的に追加および削除されると、テーブルの物理構造は変化しません。頻繁に変更されると同時に、シーケンスの恩恵を受けることになります。テーブル トラバーサル (隅の添字とテーブル ヘッダーの物理アドレスを通じてターゲット要素の位置を計算する) の効率が高いため、Python のリストの全体的なパフォーマンスが向上します。比較的優れた

dict: 本質的にはシーケンシャルリストですが、各要素の格納場所のインデックスは挿入順序によって決定されるのではなく、キーによって動的に生成されますハッシュ アルゴリズムとその他のメカニズムを使用します。つまり、キーはハッシュによってハッシュ化され、値を格納する場所が生成され、その後格納されます。この値; したがって、dict のクエリ時間の計算量は O (1);

# したがって、dict のキーはハッシュ可能なオブジェクト、つまり不変型のみにすることができます;

マルチコア CPU は一緒に使用できますかPythonでマルチスレッドを使用していますか?

Python にはグローバル インタープリター ロック (GIL) と呼ばれるものがあり、これにより、複数のスレッドのうち 1 つだけが常に実行されるようになります。

スレッドの実行速度は非常に速いため、スレッドが並列に実行されていると誤解されますが、実際にはすべてのスレッドが順番に実行されます。 GIL レベルの処理後は、実行オーバーヘッドが増加します。

マルチコア タスクは、複数のプロセスを通じて実現できます。

py3 と py2 の違い

print は py3 の関数ですが、py2

py3 ファイルのデフォルトのエンコードは utf8 で、py2 ファイルのデフォルトのエンコードは ascii です。

py3 の str は Unicode 文字列で、py2 の str は次のとおりです。 bytes

py3 の range() は反復可能なオブジェクトを返し、py2 の range() はリストを返し、xrange() は反復可能なオブジェクトを返し、py3 の除算は float を返し、py2 の除算は int を返します

#変数オブジェクトと不変オブジェクト

変数オブジェクト: list、dict、set

不変オブジェクト: bool 、int、float、tuple、str...

反復子と反復可能オブジェクトの違い

反復可能オブジェクト クラスをカスタマイズする必要があります。 __iter__() マジック メソッド。範囲クラスとリスト クラスのインスタンス化されたオブジェクトはすべて反復可能オブジェクトです。

イテレータ クラスの場合、__iter__() および _ _next__() マジック メソッドをカスタマイズする必要があります。 iter() 関数を使用して、反復可能なオブジェクトのイテレータを作成します。

クロージャ

クロージャは、関数のセットを埋め込み、その内部にあります。関数は外部関数の変数またはパラメーターを使用し、その外部関数は内部関数を返します

可以保存外部函数内的变量,不会随着外部函数调用完而销毁

什么是装饰器?

装饰器是一个接收函数作为参数的闭包函数

它可以在不修改函数内部源代码的情况下,给函数添加额外的功能

import time
def calc_time(func):
def inner():
t1 = time.time()
func()
t2 = time.time()
print('cost time: {}s'.format(t2-t1))
return inner
ログイン後にコピー

什么是元类? 使用场景

元类是创建类的类,type还有继承自type的类都是元类

作用: 在类定义时(new, init)和 类实例化时(call) 可以添加自定义的功能

使用场景: ORM框架中创建一个类就代表数据库中的一个表,但是定义这个类时为了统一需要把里面的类属性全部改为小写,这个时候就要用元类重写new方法,把attrs字典里的key转为小写

GIL(Global Interpreter Lock)

全局解释器锁

全局解释器锁(Global Interpreter Lock)是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。

即便在多核处理器上,使用 GIL 的解释器也只允许同一时间执行一个线程,常见的使用 GIL 的解释器有CPython与Ruby MRI。可以看到GIL并不是Python独有的特性,是解释型语言处理多线程问题的一种机制而非语言特性。

GIL的设计初衷?

单核时代高效利用CPU, 针对解释器级别的数据安全(不是thread-safe 线程安全)。首先需要明确的是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。

当Python虚拟机的线程想要调用C的原生线程需要知道线程的上下文,因为没有办法控制C的原生线程的执行,所以只能把上下文关系传给原生线程,同理获取结果也是线 程在python虚拟机这边等待。那么要执行一次计算操作,就必须让执行程序的线程组串行执行。

为什么要加在解释器,而不是在其他层?

展开 GIL锁加在解释器一层,也就是说Python调用的Cython解释器上加了GIL锁,因为你python调用的所有线程都是原生线程。原生线程是通过C语言提供原生接口,相当于C语言的一个函数。

你一调它,你就控制不了了它了,就必须等它给你返回结果。只要已通过python虚拟机 ,再往下就不受python控制了,就是C语言自己控制了。

加在Python虚拟机以下加不上去,只能加在Python解释器这一层。

GIL的实现是线程不安全?为什么?

python2.x和3.x都是在执行IO操作的时候,强制释放GIL,使其他线程有机会执行程序。

Python2.x Python使用计数器ticks计算字节码,当执行100个字节码的时候强制释放GIL,其他线程获取GIL继续执行。ticks可以看作是Python自己的计数器,专门作用于GIL,释放后归零,技术可以调整。

Python3.x Python使用计时器,执行时间达到阈值后,当前线程释放GIL。总体来说比Python3.x对CPU密集型任务更好,但是依然没有解决问题。

什么是 lambda 表达式?

简单来说,lambda表达式通常是当你需要使用一个函数,但是又不想费脑袋去命名一个函数的时候使用,也就是通常所说的匿名函数。

lambda表达式一般的形式是:关键词lambda后面紧接一个或多个参数,紧接一个冒号“:”,紧接一个表达式

什么是深拷贝和浅拷贝?

赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

浅拷贝 copy.copy:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变)

深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}​

以上がPython について話しましょう 8 部構成のエッセイの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

CentosのPytorchのGPUサポートはどのようにサポートされていますか CentosのPytorchのGPUサポートはどのようにサポートされていますか Apr 14, 2025 pm 06:48 PM

Pytorch GPUアクセラレーションを有効にすることで、CentOSシステムでは、PytorchのCUDA、CUDNN、およびGPUバージョンのインストールが必要です。次の手順では、プロセスをガイドします。CUDAおよびCUDNNのインストールでは、CUDAバージョンの互換性が決定されます。NVIDIA-SMIコマンドを使用して、NVIDIAグラフィックスカードでサポートされているCUDAバージョンを表示します。たとえば、MX450グラフィックカードはCUDA11.1以上をサポートする場合があります。 cudatoolkitのダウンロードとインストール:nvidiacudatoolkitの公式Webサイトにアクセスし、グラフィックカードでサポートされている最高のCUDAバージョンに従って、対応するバージョンをダウンロードしてインストールします。 cudnnライブラリをインストールする:

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

ミニオペンCentosの互換性 ミニオペンCentosの互換性 Apr 14, 2025 pm 05:45 PM

MINIOオブジェクトストレージ:CENTOSシステムの下での高性能展開Minioは、Amazons3と互換性のあるGO言語に基づいて開発された高性能の分散オブジェクトストレージシステムです。 Java、Python、JavaScript、Goなど、さまざまなクライアント言語をサポートしています。この記事では、CentosシステムへのMinioのインストールと互換性を簡単に紹介します。 Centosバージョンの互換性Minioは、Centos7.9を含むがこれらに限定されない複数のCentosバージョンで検証されています。

CentosでPytorchの分散トレーニングを操作する方法 CentosでPytorchの分散トレーニングを操作する方法 Apr 14, 2025 pm 06:36 PM

Pytorchの分散トレーニングでは、Centosシステムでトレーニングには次の手順が必要です。Pytorchのインストール:PythonとPipがCentosシステムにインストールされていることです。 CUDAバージョンに応じて、Pytorchの公式Webサイトから適切なインストールコマンドを入手してください。 CPUのみのトレーニングには、次のコマンドを使用できます。PipinstalltorchtorchtorchvisionTorchaudioGPUサポートが必要な場合は、CUDAとCUDNNの対応するバージョンがインストールされ、インストールに対応するPytorchバージョンを使用してください。分散環境構成:分散トレーニングには、通常、複数のマシンまたは単一マシンの複数GPUが必要です。場所

CentosでPytorchバージョンを選択する方法 CentosでPytorchバージョンを選択する方法 Apr 14, 2025 pm 06:51 PM

PytorchをCentosシステムにインストールする場合、適切なバージョンを慎重に選択し、次の重要な要因を検討する必要があります。1。システム環境互換性:オペレーティングシステム:Centos7以上を使用することをお勧めします。 Cuda and Cudnn:PytorchバージョンとCudaバージョンは密接に関連しています。たとえば、pytorch1.9.0にはcuda11.1が必要ですが、pytorch2.0.1にはcuda11.3が必要です。 CUDNNバージョンは、CUDAバージョンとも一致する必要があります。 Pytorchバージョンを選択する前に、互換性のあるCUDAおよびCUDNNバージョンがインストールされていることを確認してください。 Pythonバージョン:Pytorch公式支店

PytorchをCentosの最新バージョンに更新する方法 PytorchをCentosの最新バージョンに更新する方法 Apr 14, 2025 pm 06:15 PM

PytorchをCentosの最新バージョンに更新すると、次の手順に従うことができます。方法1:PIPでPIPを更新する:最初にPIPが最新バージョンであることを確認します。これは、PIPの古いバージョンがPytorchの最新バージョンを適切にインストールできない可能性があるためです。 pipinstall- upgradepipアンインストール古いバージョンのpytorch(インストールの場合):pipuninstorchtorchtorchvisiontorchaudioインストール最新

See all articles