Inhaltsverzeichnis
Generator, es gibt zwei Möglichkeiten, Generatorobjekte zu generieren: Eine ist die Listengenerierung mit Klammern:
Was in Python in For-Schleifen verwendet werden kann, wird als iterierbar bezeichnet. Iterierbar, einschließlich list/set/tuple/str/dict und anderen Datenstrukturen und Generatoren, können Sie die folgende Anweisung verwenden, um zu bestimmen, ob ein Objekt iterierbar ist:
什么是元类? 使用场景
GIL(Global Interpreter Lock)
全局解释器锁
GIL的设计初衷?
为什么要加在解释器,而不是在其他层?
GIL的实现是线程不安全?为什么?
什么是 lambda 表达式?
什么是深拷贝和浅拷贝?
Heim Backend-Entwicklung Python-Tutorial Lassen Sie uns über den achtteiligen Python-Aufsatz sprechen

Lassen Sie uns über den achtteiligen Python-Aufsatz sprechen

Apr 13, 2023 pm 03:10 PM
python 文件 网络

​Hallo Genossen, heute werde ich Sie auf die grundlegenden Probleme in Python eingehen. Wir alle wissen, dass Python eine interpretierte Sprache ist und seine Effizienz geringer ist als bei anderen Sprachen. Dies bedeutet jedoch nur eine etwas geringere Laufzeit Dies ist in vielen Szenarien trivial

Mit der leicht verständlichen und erlernbaren Syntax können Sie mehr Arbeit in kurzer Zeit erledigen und die Entwicklungseffizienz wird höher

Gleichzeitig wird Python mit verschiedenen fertigen Funktionen geliefert. Die erstellten Bibliotheken stehen uns zur Verwendung bei der Entwicklung von Programmen zur Verfügung. Python bietet uns außerdem eine sehr vollständige Basiscodebibliothek, die eine große Anzahl von Inhalten wie Netzwerk, Dateien, GUI, Datenbank, Text usw. abdeckt . Es wird anschaulich als „eingebaute Batterien (Batterien im Lieferumfang enthalten)“ bezeichnet. Viele in Python entwickelte Funktionen müssen nicht von Grund auf geschrieben werden, sondern können einfach vorgefertigte Funktionen verwenden.

Zusätzlich zu den integrierten Bibliotheken verfügt Python auch über eine große Anzahl von Bibliotheken von Drittanbietern, bei denen es sich um von anderen entwickelte Dinge handelt, die Sie direkt verwenden können. Wenn der von Ihnen entwickelte Code gut gekapselt ist, kann er natürlich auch als Bibliothek eines Drittanbieters für die Nutzung durch andere verwendet werden.

Was ist ein Python-Generator?

Generator, es gibt zwei Möglichkeiten, Generatorobjekte zu generieren: Eine ist die Listengenerierung mit Klammern:

g1 = (x für x in range(10))

Die andere ist in der Funktionsdefinition Enthält das Schlüsselwort 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)
Nach dem Login kopieren

Für die Generatorobjekte g1 und g2 können Sie den Wert des nächsten Elements kontinuierlich über next(g1) abrufen, wenn kein Element mehr vorhanden ist. Es wird ein StopIteration-Fehler gemeldet

Sie können den Wert des Elements auch über eine for-Schleife abrufen.

Der Vorteil des Generators besteht darin, dass er nicht viel Speicher beansprucht. Sie müssen bei der Verwendung nur den Wert des Elements berechnen.

Was sind Python-Iteratoren?

Was in Python in For-Schleifen verwendet werden kann, wird als iterierbar bezeichnet. Iterierbar, einschließlich list/set/tuple/str/dict und anderen Datenstrukturen und Generatoren, können Sie die folgende Anweisung verwenden, um zu bestimmen, ob ein Objekt iterierbar ist:

from collections import Iterableisinstance(x, Iterable)
Nach dem Login kopieren

Iterator Iterator bedeutet, dass er von der Funktion next() aufgerufen werden kann und kontinuierlich den nächsten Wert zurückgibt, bis StopIteration alle Iteratoren sind, Datenstrukturen wie Listen jedoch nicht

Durch die folgende Anweisung wird Liste zum Iterator:

iter([1,2,3,4,5])
Nach dem Login kopieren

Generatoren sind alle Iteratoren, aber Iteratoren sind nicht unbedingt Generatoren.

Was ist der Unterschied zwischen Liste und Tupel?

list hat eine variable Länge, aber

list kann den Wert von Elementen ändern, aber
  • list unterstützt append;
  • Wie werden Liste und Diktat in Python implementiert?

Liste: Es handelt sich im Wesentlichen um eine sequentielle Tabelle, aber die Erweiterung der Tabelle erfolgt jedes Mal exponentiell. Daher ändert sich die physische Struktur der Tabelle nicht häufig. Es profitiert von der Effizienz der sequentiellen Tabellendurchquerung (durch Winkel) Der Index wird mit der physischen Adresse des Tabellenkopfes kombiniert, um die Position des Zielelements zu berechnen), was die Gesamtleistung der Python-Liste relativ gut macht

dict: Es handelt sich im Wesentlichen um eine sequentielle Liste, aber der Index des Speicherorts jedes Elements wird nicht durch die Reihenfolge der Einfügung bestimmt, sondern dynamisch durch den Schlüssel durch den Hash-Algorithmus und andere Mechanismen generiert, dh der Schlüssel wird durchgehasht Hashing, um den Ort zu generieren, an dem der Wert gespeichert werden soll, sodass die Abfragezeitkomplexität von dict O (1) ist. Daher kann der Schlüssel von dict nur ein hashbares Objekt sein ist ein unveränderlicher Typ;

Können Multi-Core-CPUs mithilfe von Multithreading in Python zusammen verwendet werden?

In Python gibt es etwas namens Global Interpreter Lock (GIL), das sicherstellt, dass immer nur einer Ihrer mehreren Threads ausgeführt wird.

Die Ausführungsgeschwindigkeit von Threads ist sehr hoch, was dazu führt, dass Sie fälschlicherweise denken, dass Threads parallel ausgeführt werden, aber tatsächlich werden sie alle nacheinander ausgeführt. Nach der Verarbeitung auf GIL-Ebene erhöht sich der Ausführungsaufwand.

Multi-Core-Aufgaben können durch mehrere Prozesse erreicht werden.

Der Unterschied zwischen py3 und py2

print ist eine Funktion in py3, aber nur ein Schlüsselwort in py2

Die Standardkodierung von py3-Dateien ist utf8 und die Standardkodierung von py2-Dateien ist ascii

py3s str ist ein Unicode-String, während py2s str Bytes sind

py3s range() gibt ein iterierbares Objekt zurück, py2s range() gibt eine Liste zurück, xrange() gibt ein iterierbares Objekt zurück, py3s Division gibt Float zurück, py2s Die Division gibt int zurück. Variable Objekte und unveränderliche Objekte iterierbare Objekte

Iterierbare Objektklassen, Sie müssen die magische Methode __iter__() anpassen, und die instanziierten Objekte der Bereichs- und Listenklassen sind alle iterierbare Objekte

Iteration Iter-Klasse, Sie müssen die __iter__() und __next__ anpassen () magische Methoden. Verwenden Sie die Funktion iter(), um einen Iterator iterierbarer Objekte zu erstellen.

Closure ist eine verschachtelte Funktion. Die innere Funktion verwendet die Variablen oder Parameter der äußeren Funktion und ihrer äußeren Funktion gibt die innere Funktion zurück

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

什么是装饰器?

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

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

import time
def calc_time(func):
def inner():
t1 = time.time()
func()
t2 = time.time()
print('cost time: {}s'.format(t2-t1))
return inner
Nach dem Login kopieren

什么是元类? 使用场景

元类是创建类的类,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()函数}​

Das obige ist der detaillierte Inhalt vonLassen Sie uns über den achtteiligen Python-Aufsatz sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP und Python: Code Beispiele und Vergleich PHP und Python: Code Beispiele und Vergleich Apr 15, 2025 am 12:07 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

Python gegen JavaScript: Community, Bibliotheken und Ressourcen Python gegen JavaScript: Community, Bibliotheken und Ressourcen Apr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Wie ist die GPU -Unterstützung für Pytorch bei CentOS? Wie ist die GPU -Unterstützung für Pytorch bei CentOS? Apr 14, 2025 pm 06:48 PM

Aktivieren Sie die Pytorch -GPU -Beschleunigung am CentOS -System erfordert die Installation von CUDA-, CUDNN- und GPU -Versionen von Pytorch. Die folgenden Schritte führen Sie durch den Prozess: Cuda und Cudnn Installation Bestimmen Sie die CUDA-Version Kompatibilität: Verwenden Sie den Befehl nvidia-smi, um die von Ihrer NVIDIA-Grafikkarte unterstützte CUDA-Version anzuzeigen. Beispielsweise kann Ihre MX450 -Grafikkarte CUDA11.1 oder höher unterstützen. Download und installieren Sie Cudatoolkit: Besuchen Sie die offizielle Website von Nvidiacudatoolkit und laden Sie die entsprechende Version gemäß der höchsten CUDA -Version herunter und installieren Sie sie, die von Ihrer Grafikkarte unterstützt wird. Installieren Sie die Cudnn -Bibliothek:

Detaillierte Erklärung des Docker -Prinzips Detaillierte Erklärung des Docker -Prinzips Apr 14, 2025 pm 11:57 PM

Docker verwendet Linux -Kernel -Funktionen, um eine effiziente und isolierte Anwendungsumgebung zu bieten. Sein Arbeitsprinzip lautet wie folgt: 1. Der Spiegel wird als schreibgeschützte Vorlage verwendet, die alles enthält, was Sie für die Ausführung der Anwendung benötigen. 2. Das Union File System (UnionFS) stapelt mehrere Dateisysteme, speichert nur die Unterschiede, speichert Platz und beschleunigt. 3. Der Daemon verwaltet die Spiegel und Container, und der Kunde verwendet sie für die Interaktion. 4. Namespaces und CGroups implementieren Container -Isolation und Ressourcenbeschränkungen; 5. Mehrere Netzwerkmodi unterstützen die Containerverbindung. Nur wenn Sie diese Kernkonzepte verstehen, können Sie Docker besser nutzen.

Miniopen CentOS -Kompatibilität Miniopen CentOS -Kompatibilität Apr 14, 2025 pm 05:45 PM

Minio-Objektspeicherung: Hochleistungs-Bereitstellung im Rahmen von CentOS System Minio ist ein hochleistungsfähiges, verteiltes Objektspeichersystem, das auf der GO-Sprache entwickelt wurde und mit Amazons3 kompatibel ist. Es unterstützt eine Vielzahl von Kundensprachen, darunter Java, Python, JavaScript und Go. In diesem Artikel wird kurz die Installation und Kompatibilität von Minio zu CentOS -Systemen vorgestellt. CentOS -Versionskompatibilitätsminio wurde in mehreren CentOS -Versionen verifiziert, einschließlich, aber nicht beschränkt auf: CentOS7.9: Bietet einen vollständigen Installationshandbuch für die Clusterkonfiguration, die Umgebungsvorbereitung, die Einstellungen von Konfigurationsdateien, eine Festplattenpartitionierung und Mini

Wie man eine verteilte Schulung von Pytorch auf CentOS betreibt Wie man eine verteilte Schulung von Pytorch auf CentOS betreibt Apr 14, 2025 pm 06:36 PM

Pytorch Distributed Training on CentOS -System erfordert die folgenden Schritte: Pytorch -Installation: Die Prämisse ist, dass Python und PIP im CentOS -System installiert sind. Nehmen Sie abhängig von Ihrer CUDA -Version den entsprechenden Installationsbefehl von der offiziellen Pytorch -Website ab. Für CPU-Schulungen können Sie den folgenden Befehl verwenden: PipinstallTorChTorChVisionTorChaudio Wenn Sie GPU-Unterstützung benötigen, stellen Sie sicher, dass die entsprechende Version von CUDA und CUDNN installiert ist und die entsprechende Pytorch-Version für die Installation verwenden. Konfiguration der verteilten Umgebung: Verteiltes Training erfordert in der Regel mehrere Maschinen oder mehrere Maschinen-Mehrfach-GPUs. Ort

So wählen Sie die Pytorch -Version auf CentOS aus So wählen Sie die Pytorch -Version auf CentOS aus Apr 14, 2025 pm 06:51 PM

Bei der Installation von PyTorch am CentOS -System müssen Sie die entsprechende Version sorgfältig auswählen und die folgenden Schlüsselfaktoren berücksichtigen: 1. Kompatibilität der Systemumgebung: Betriebssystem: Es wird empfohlen, CentOS7 oder höher zu verwenden. CUDA und CUDNN: Pytorch -Version und CUDA -Version sind eng miteinander verbunden. Beispielsweise erfordert Pytorch1.9.0 CUDA11.1, während Pytorch2.0.1 CUDA11.3 erfordert. Die Cudnn -Version muss auch mit der CUDA -Version übereinstimmen. Bestimmen Sie vor der Auswahl der Pytorch -Version unbedingt, dass kompatible CUDA- und CUDNN -Versionen installiert wurden. Python -Version: Pytorch Official Branch

So aktualisieren Sie Pytorch auf die neueste Version von CentOS So aktualisieren Sie Pytorch auf die neueste Version von CentOS Apr 14, 2025 pm 06:15 PM

Das Aktualisieren von PyTorch auf der neuesten Version von CentOS kann die folgenden Schritte ausführen: Methode 1: Aktualisieren von PIP mit PIP: Stellen Sie zunächst sicher, dass Ihr PIP die neueste Version ist, da ältere Versionen von PIP möglicherweise nicht in der Lage sind, die neueste Version von PyTorch ordnungsgemäß zu installieren. Pipinstall-upgradePip Die alte Version von Pytorch (falls installiert): PipuninstallTorChTorChVisionTorChaudio-Installation Neueste

See all articles