Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Semasa menulis skrip Python, pastikan anda menambah ini!

Semasa menulis skrip Python, pastikan anda menambah ini!

PHPz
PHPzke hadapan
2023-04-14 19:40:011345semak imbas

Orang yang menggunakan Python sering menulis beberapa skrip sama ada untuk meningkatkan kecekapan kerja atau untuk memenuhi keperluan tertentu, skrip Python adalah perkara biasa dan berguna.

Namun, baru-baru ini saya menemui masalah yang saya tidak perasan sebelum ini, iaitu sama ada menambah jika __name__ == "__main__":
Kenyataan ini sebenarnya memberi impak yang besar terhadap penggunaan skrip. Dan terdapat banyak ilmu di dalamnya.

Salah Faham Biasa

Ramai rakan lebih bersahaja apabila menulis skrip ringkas ditulis terus tanpa fungsi dan dilaksanakan secara berurutan. Untuk skrip yang lebih kompleks, fungsi boleh ditambah. Cara penulisan ini kurang boleh dibaca, dan orang ramai selalunya tidak dapat mencari entri dan urutan pelaksanaan program sepintas lalu.

Cara yang disyorkan oleh komuniti Python adalah dengan menambah pernyataan berikut semasa menulis skrip:

def main():
# do something
print("do something.")

if __name__ == "__main__":
main()

Apabila kebanyakan orang melihat ini, mereka akan berkata, apakah ini? penting sama ada menambah atau tidak!

Jangan terlalu sibuk dan meremehkan, mari kita bincangkan dengan teliti bersama-sama!

Apa gunanya?

Terangkan secara terperinci jika Sebelum ini __name__ == '__main__' berfungsi, mari kita rasakan secara intuitif daripada contoh mudah.

# const.py
 
PI = 3.14
 
def train():
print("PI:", PI)
 
train()
# area.py
 
from const import PI
 
def calc_round_area(radius):
return PI * (radius ** 2)
 
def calculate():
print("round area: ", calc_round_area(2))
 
calculate()

Mari kita lihat hasil larian area.py: Pembolehubah PI

PI: 3.14
round area:12.56

, apabila berjalan, fungsi train() dalam const. py juga dibawa, tetapi kami hanya merujuk pembolehubah dan bukan fungsi, jadi inilah yang kami tidak mahu lihat.

Penyelesaian kepada masalah ini juga sangat mudah Kita hanya perlu menambah ayat pada const.py:

PI = 3.14

def train():
 print("PI:", PI)

if __name__ == "__main__":
 train()
Jalankan area.py sekali lagi, outputnya adalah seperti. berikut:

round area:12.56
Inilah yang kami jangkakan.

Program berjalan masuk

Daripada contoh di atas, anda boleh mendapati bahawa jika tiada if __name__=="__main__":, apabila mengimport fail sebagai area.py, semua kod dalam const.py

akan dilaksanakan, dan selepas menambahkannya, hanya bahagian kod yang diimport akan dijalankan.

Ini adalah kesan yang jelas jika __name__=="__main__": Sebenarnya, jika __name__=="__main__": adalah bersamaan dengan kemasukan program

Simulasi Python. Oleh kerana modul merujuk antara satu sama lain, modul yang berbeza mungkin mempunyai takrifan sedemikian, tetapi hanya terdapat satu program kemasukan yang dipilih bergantung pada nilai __name__.

Mari kita lihat program kecil sekali lagi:

print("look here")
print(__name__)
 
if __name__ == '__main__':
print("I'm test.py")
Keputusan larian program adalah seperti berikut:

look here
__main__
I'm test.py
Boleh didapati bahawa nilai pembolehubah __name__ pada masa ini ialah __main__, jadi cetak "Saya

test.py". Jika anda menjalankan fail lain dan memanggil fail ini melalui fail yang sedang berjalan, penyata tidak akan dicetak kerana kemasukan program tidak betul dan penyata tidak akan dilaksanakan.

Spesifikasi kod

Dengan if __name__=="__main__": setara dengan Python

Atur cara ini juga mempunyai fungsi kemasukan Kita boleh mengetahui dengan jelas bahawa logik program bermula dengan Di mana, sudah tentu kita perlu secara sedar meletakkan logik permulaan program di sini. Malah, ini juga pendekatan yang disyorkan oleh PyCharm
.

Mengapa banyak bahasa pengaturcaraan yang sangat baik, seperti C, Java, Golang dan C++, mempunyai fungsi kemasukan

utama, saya fikir sebab yang sangat penting ialah kemasukan program adalah bersatu dan mudah dibaca.

Senario berbilang proses berguna

Jika anda menggunakan berbilang proses untuk pengkomputeran selari, kod yang serupa dengan ini:

import multiprocessing as mp

def useful_function(x):
return x * x

print("processing in parallel")
with mp.Pool() as p:
results = p.map(useful_function, [1, 2, 3, 4])
print(results)
Jalankan kod ini dan kawal stesen akan terus mencetak:

processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
dan program akan terus melaporkan RuntimeError.

Jika anda menambah if __name__=="__main__": , atur cara akan diteruskan seperti yang dijangkakan:

import multiprocessing as mp

def useful_function(x):
return x * x

if __name__ == '__main__':
print("processing in parallel")
with mp.Pool() as p:
results = p.map(useful_function, [1, 2, 3, 4])
print(results)
Python berbilang program adalah untuk memulakan berbilang jurubahasa Python , setiap jurubahasa Python akan mengimport skrip anda dan salin salinan pembolehubah global dan fungsi untuk proses anak Jika terdapat jika

__name__=="__main__":, maka kod di belakangnya tidak akan dilaksanakan berulang kali. Jika tidak, kod yang mencipta berbilang proses akan
diimport dan dilaksanakan, dengan itu mencipta proses anak secara rekursif tak terhingga

Ringkasan

jika __name__==" __main__": Walaupun ia tidak wajib, saya amat mengesyorkan anda mengikut spesifikasi ini semasa menulis skrip.

Atas ialah kandungan terperinci Semasa menulis skrip Python, pastikan anda menambah ini!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam