


Mari kita bercakap tentang karangan lapan bahagian Python
Hai rakan-rakan, hari ini saya akan membawa anda menyemak isu asas dalam ular sawa Kita semua tahu bahawa ular sawa adalah bahasa yang ditafsirkan, dan kecekapannya lebih rendah daripada bahasa lain, bagaimanapun, kadar yang lebih rendah ini , membeli ini adalah remeh dalam banyak senario
Dengan sintaks yang mudah difahami dan dipelajari, lebih banyak kerja boleh disiapkan dalam masa yang singkat, dan kecekapan pembangunan juga akan menjadi Lebih Tinggi
Pada masa yang sama, python datang dengan pelbagai perpustakaan siap sedia untuk kita gunakan dalam membangunkan program, dan python juga lebih mudah untuk diselenggara
Python menyediakan kita dengan asas yang sangat lengkap asas kod merangkumi sejumlah besar kandungan seperti rangkaian, fail, GUI, pangkalan data, teks, dll. Ia dipanggil dengan jelas "termasuk bateri". Dibangunkan dalam Python, banyak fungsi tidak perlu ditulis dari awal, hanya gunakan yang sudah siap.
Selain perpustakaan terbina dalam, Python juga mempunyai sejumlah besar perpustakaan pihak ketiga, yang merupakan perkara yang dibangunkan oleh orang lain untuk anda gunakan secara langsung. Sudah tentu, jika kod yang anda bangunkan dikemaskan dengan baik, ia juga boleh digunakan sebagai perpustakaan pihak ketiga untuk digunakan oleh orang lain.
Apakah penjana Python?
penjana, terdapat dua cara untuk menjana objek penjana: satu ialah penjanaan senarai dengan kurungan:
g1 = (x untuk x dalam julat(10) )
Salah satunya ialah memasukkan kata kunci hasil dalam definisi fungsi:
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)
Untuk objek penjana g1 dan g2, anda boleh terus mendapatkan elemen seterusnya melalui nilai seterusnya(g1), jika tiada lagi elemen, ralat StopIteration
akan dilaporkan Nilai elemen juga boleh diperolehi melalui gelung for.
Kelebihan generator ialah ia tidak mengambil banyak memori, anda hanya perlu mengira nilai elemen semasa menggunakannya.
Apakah iterator Python?
Apa yang boleh digunakan dalam untuk gelung dalam Python dipanggil Iterable Iterable, termasuk senarai/set/tuple/str/dict dan struktur dan penjana data lain anda boleh menggunakan pernyataan berikut untuk menilai objek sama ada ia boleh lelar:
from collections import Iterableisinstance(x, Iterable)
Iterator Iterator bermakna ia boleh dipanggil oleh fungsi next() dan terus mengembalikan nilai seterusnya sehingga StopIteration; Generator adalah semua Iterator, tetapi struktur data seperti senarai tidak; >
Penjana kesemuanya Penyalur, tetapi penyalur tidak semestinya penjana.iter([1,2,3,4,5])
Apakah perbezaan antara senarai dan tupel?
panjang senarai berubah-ubah, tetapi tuple tidak boleh diubah; >senarai disokong Tambah; masukkan; pop dan kaedah lain tidak disokong oleh tuple.
Senarai: Ia pada asasnya adalah senarai berurutan, tetapi pengembangan jadual adalah eksponen setiap kali, oleh itu, apabila data ditambah dan dipadamkan secara dinamik, struktur fizikal jadual tidak akan berubah dengan kerap, dan pada masa yang sama, ia akan mendapat manfaat daripada jujukan Kecekapan tinggi traversal jadual (mengira kedudukan elemen sasaran melalui subskrip sudut dan alamat fizikal pengepala jadual) menjadikan senarai python mempunyai prestasi keseluruhan yang sangat baik.
- dikt: Ia pada asasnya ialah senarai berurutan, Walau bagaimanapun, indeks lokasi storan setiap elemen tidak ditentukan oleh susunan sisipan, tetapi dijana secara dinamik oleh kunci melalui algoritma hash dan mekanisme lain, iaitu kunci dicincang melalui pencincangan untuk menjana lokasi di mana nilai harus disimpan, jadi kerumitan masa pertanyaan dict ialah O(1); 🎜> Oleh itu, kunci dict hanya boleh menjadi objek yang boleh dicincang, iaitu jenis yang tidak berubah; CPU teras dalam Python?
Terdapat sesuatu yang dipanggil Global Interpreter Lock (GIL) dalam Python, yang akan memastikan bahawa hanya satu daripada berbilang urutan anda dilaksanakan pada bila-bila masa.
Kelajuan pelaksanaan utas adalah sangat pantas, yang akan membuatkan anda tersalah anggap bahawa utas dilaksanakan secara selari, tetapi sebenarnya semuanya dilaksanakan mengikut giliran. Selepas pemprosesan tahap GIL, overhed pelaksanaan akan dinaikkan.
Tugas berbilang teras boleh dicapai melalui pelbagai proses.
Perbezaan antara py3 dan py2
print ialah fungsi dalam py3, tetapi hanya kata kunci dalam py2
Pengekodan lalai bagi fail py3 ialah utf8 dan pengekodan lalai bagi fail py2 ialah ascii
String py3 ialah rentetan unikod, manakala str bagi py2 ialah bait
julat py3() mengembalikan objek boleh lelar, julat py2() mengembalikan senarai, xrange() mengembalikan objek boleh lelar, bahagian py3 mengembalikan terapung, bahagian py2 mengembalikan int
Objek boleh ubah dan objek tidak berubah
Objek boleh ubah: senarai, dict, set
Objek tidak berubah: bool , int, float, tuple, str…
Perbezaan antara iterator dan objek boleh lelar
Objek boleh lelar Kelas, anda mesti menyesuaikan __iter__( ) kaedah sihir. Objek julat dan kelas senarai yang diinstakan ialah semua objek boleh lelar
Kelas Iterator, anda mesti menyesuaikan kaedah ajaib __iter__() dan _ _next__(), gunakan iter() fungsi untuk mencipta lelaran objek boleh lelar
Penutupan
Penutupan ialah pembenaman Satu set fungsi, fungsi dalamannya menggunakan pembolehubah atau parameter fungsi luaran, dan fungsi luarannya mengembalikan fungsi dalaman
可以保存外部函数内的变量,不会随着外部函数调用完而销毁
什么是装饰器?
装饰器是一个接收函数作为参数的闭包函数
它可以在不修改函数内部源代码的情况下,给函数添加额外的功能
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()函数}
Atas ialah kandungan terperinci Mari kita bercakap tentang karangan lapan bahagian Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PS "Memuatkan" Masalah disebabkan oleh akses sumber atau masalah pemprosesan: Kelajuan bacaan cakera keras adalah perlahan atau buruk: Gunakan CrystaldiskInfo untuk memeriksa kesihatan cakera keras dan menggantikan cakera keras yang bermasalah. Memori yang tidak mencukupi: Meningkatkan memori untuk memenuhi keperluan PS untuk imej resolusi tinggi dan pemprosesan lapisan kompleks. Pemandu kad grafik sudah lapuk atau rosak: Kemas kini pemandu untuk mengoptimumkan komunikasi antara PS dan kad grafik. Laluan fail terlalu panjang atau nama fail mempunyai aksara khas: Gunakan laluan pendek dan elakkan aksara khas. Masalah PS sendiri: Pasang semula atau membaiki pemasang PS.

PS yang tersangkut pada "memuatkan" apabila boot boleh disebabkan oleh pelbagai sebab: Lumpuhkan plugin yang korup atau bercanggah. Padam atau namakan semula fail konfigurasi yang rosak. Tutup program yang tidak perlu atau menaik taraf memori untuk mengelakkan memori yang tidak mencukupi. Naik taraf ke pemacu keadaan pepejal untuk mempercepatkan bacaan cakera keras. Pasang semula PS untuk membaiki fail sistem rasuah atau isu pakej pemasangan. Lihat maklumat ralat semasa proses permulaan analisis log ralat.

"Memuatkan" gagap berlaku apabila membuka fail pada PS. Sebab-sebabnya mungkin termasuk: fail yang terlalu besar atau rosak, memori yang tidak mencukupi, kelajuan cakera keras perlahan, masalah pemacu kad grafik, versi PS atau konflik plug-in. Penyelesaiannya ialah: Semak saiz fail dan integriti, tingkatkan memori, menaik taraf cakera keras, mengemas kini pemacu kad grafik, menyahpasang atau melumpuhkan pemalam yang mencurigakan, dan memasang semula PS. Masalah ini dapat diselesaikan dengan berkesan dengan memeriksa secara beransur -ansur dan memanfaatkan tetapan prestasi PS yang baik dan membangunkan tabiat pengurusan fail yang baik.

Artikel ini memperkenalkan operasi pangkalan data MySQL. Pertama, anda perlu memasang klien MySQL, seperti MySqlworkbench atau Command Line Client. 1. Gunakan perintah MySQL-Uroot-P untuk menyambung ke pelayan dan log masuk dengan kata laluan akaun root; 2. Gunakan CreateTatabase untuk membuat pangkalan data, dan gunakan Pilih pangkalan data; 3. Gunakan createtable untuk membuat jadual, menentukan medan dan jenis data; 4. Gunakan InsertInto untuk memasukkan data, data pertanyaan, kemas kini data dengan kemas kini, dan padam data dengan padam. Hanya dengan menguasai langkah -langkah ini, belajar menangani masalah biasa dan mengoptimumkan prestasi pangkalan data anda boleh menggunakan MySQL dengan cekap.

Kunci kawalan bulu adalah memahami sifatnya secara beransur -ansur. PS sendiri tidak menyediakan pilihan untuk mengawal lengkung kecerunan secara langsung, tetapi anda boleh melaraskan radius dan kelembutan kecerunan dengan pelbagai bulu, topeng yang sepadan, dan pilihan halus untuk mencapai kesan peralihan semula jadi.

Pengoptimuman prestasi MySQL perlu bermula dari tiga aspek: konfigurasi pemasangan, pengindeksan dan pengoptimuman pertanyaan, pemantauan dan penalaan. 1. Selepas pemasangan, anda perlu menyesuaikan fail my.cnf mengikut konfigurasi pelayan, seperti parameter innodb_buffer_pool_size, dan tutup query_cache_size; 2. Buat indeks yang sesuai untuk mengelakkan indeks yang berlebihan, dan mengoptimumkan pernyataan pertanyaan, seperti menggunakan perintah menjelaskan untuk menganalisis pelan pelaksanaan; 3. Gunakan alat pemantauan MySQL sendiri (ShowProcessList, ShowStatus) untuk memantau kesihatan pangkalan data, dan kerap membuat semula dan mengatur pangkalan data. Hanya dengan terus mengoptimumkan langkah -langkah ini, prestasi pangkalan data MySQL diperbaiki.

Antara muka pemuatan kad PS mungkin disebabkan oleh perisian itu sendiri (fail rasuah atau konflik plug-in), persekitaran sistem (pemacu yang wajar atau fail sistem rasuah), atau perkakasan (rasuah cakera keras atau kegagalan tongkat memori). Pertama semak sama ada sumber komputer mencukupi, tutup program latar belakang dan lepaskan memori dan sumber CPU. Betulkan pemasangan PS atau periksa isu keserasian untuk pemalam. Mengemas kini atau menewaskan versi PS. Semak pemacu kad grafik dan kemas kini, dan jalankan semak fail sistem. Jika anda menyelesaikan masalah di atas, anda boleh mencuba pengesanan cakera keras dan ujian memori.

MySQL mempunyai versi komuniti percuma dan versi perusahaan berbayar. Versi komuniti boleh digunakan dan diubahsuai secara percuma, tetapi sokongannya terhad dan sesuai untuk aplikasi dengan keperluan kestabilan yang rendah dan keupayaan teknikal yang kuat. Edisi Enterprise menyediakan sokongan komersil yang komprehensif untuk aplikasi yang memerlukan pangkalan data yang stabil, boleh dipercayai, berprestasi tinggi dan bersedia membayar sokongan. Faktor yang dipertimbangkan apabila memilih versi termasuk kritikal aplikasi, belanjawan, dan kemahiran teknikal. Tidak ada pilihan yang sempurna, hanya pilihan yang paling sesuai, dan anda perlu memilih dengan teliti mengikut keadaan tertentu.
