99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

python入口函數 python 程序入口

python語言基礎知識有哪些?

python語言基礎知識有:

創新互聯是一家專業提供云陽企業網站建設,專注與網站設計、成都網站設計、html5、小程序制作等業務。10年已為云陽眾多企業、政府機構等服務。創新互聯專業網站建設公司優惠進行中。

1、Python是一個動態類型語言,可以為變量賦任意值,也可以修改變量的值。

2、字符串:表示一段文本信息,必須使用引號引起來;不能同時混用。

3、導入是將python的一些功能函數放到當前的腳本中使用,不導入的功能無法直接在當前腳本使用。

4、python腳本的入口叫主函數main。

5、每個變量被定義后存入一個內存塊。

在Python中定義Main函數

目錄

許多編程語言都有一個特殊的函數,當操作系統開始運行程序時會自動執行該函數。這個函數通常被命名為main(),并且依據語言標準具有特定的返回類型和參數。另一方面,Python解釋器從文件頂部開始執行腳本,并且沒有自動執行的特殊函數。

盡管如此,為程序的執行定義一個起始點有助于理解程序是如何運行的。Python程序員提出了幾種方式對此進行實現。

本文結束時,您將了解以下內容:

Python中的基本main()函數

一些Python腳本中,包含一個函數定義和一個條件語句,如下所示:

此代碼中,包含一個main()函數,在程序執行時打印Hello World!。此外,還包含一個條件(或if)語句,用于檢查__name__的值并將其與字符串"__main__"進行比較。當if語句為True時,Python解釋器將執行main()函數。更多關于Python條件語句的信息可以由此獲得。

這種代碼模式在Python文件中非常常見,它將作為腳本執行并導入另一個模塊。為了幫助理解這段代碼的執行方式,首先需要了解Python解釋器如何根據代碼的執行方式設置__name__。

Python中的執行模式

Python解釋器執行代碼有兩種方式:

更多內容可參考如何運行Python腳本。無論采用哪種方式,Python都會定義一個名為__name__的特殊變量,該變量包含一個字符串,其值取決于代碼的使用方式。

本文將如下示例文件保存為execution_methods.py,以 探索 代碼如何根據上下文改變行為:

在此文件中,定義了三個對print()函數的調用。前兩個打印一些介紹性短語。第三個print()會先打印短語The value __name__ is,之后將使用Python內置的repr()函數打印出__name__變量。

在Python中,repr()函數將對象轉化為供解釋器讀取的形式。上述示例通過使用repr()函數來強調__name__的值為字符串。更多關于repr()的內容可參考Python文檔。

在本文中,您將隨處可見文件(file),模塊(module)和腳本(script)這三個字眼。實際上,三者之間并無太大的差別。不過,在強調代碼目的時,還是存在細微的差異:

“如何運行Python腳本”一文也討論了三者的差別。

基于命令行執行

在這類方法中,Python腳本將通過命令行來執行。

執行腳本時,無法與Python解釋器正在執行的代碼交互。關于如何通過命令行執行代碼的詳細信息對本文而言并不重要,但您可以通過展開下框閱讀更多有關Windows,Linux和macOS之間命令行差異的內容。

命令行環境

不同的操作系統在使用命令行執行代碼時存在細微的差異。

在Linux和macOS中,通常使用如下命令:

美元符號($)之前的內容可能有所不同,具體取決于您的用戶名和計算機名稱。您鍵入的命令位于$之后。在Linux或macOS上,Python3的可執行文件名為python3,因此可以通過輸入python3 script_name.py來運行python腳本。

在Windows上,命令提示符通常如下所示:

根據您的用戶名,之前的內容可能會有所不同,您輸入的命令位于之后。在Windows上,Python3的可執行文件通常為python。因此可以通過輸入python script_name.py來運行python腳本。

無論哪種操作系統,本文的Python腳本的輸出結果都是相同的。因此本文以Linux和macOS為例。

使用命令行執行execution_methods.py,如下所示:

在這個示例中,__name__具有值'__main__',其中引號(')表明該值為字符串類型。

請記住,在Python中,使用單引號(')和雙引號(")定義的字符串沒有區別。更多關于字符串的內容請參考Python的基本數據類型。

如果在腳本中包含"shebang行"并直接執行它(./execution_methods.py),或者使用IPython或Jupyter Notebook的%run,將會獲取相同的結果。

您還可以通過向命令行添加-m參數的方法實現以模塊的方式執行。通常情況下,推薦如下方式pip: python3 -m pip install package_name。

添加-m參數將會運行包中__main__.py的代碼。更多關于__main__.py文件的內容可參考如何將開源Python包發布到PyPI中。

在三種情況中,__name__都具有相同的值:字符串'__main__'。

技術細節:Python文檔中具體定義了__name__何時取值為'__main__'。

當通過標準輸入,腳本或者交互提示中讀取數據時,模塊的__name__將取值為'__main__'。(來源)

__name__與__doc__,__package__和其他屬性一起存儲在模塊的全局命名空間。更多關于屬性的信息可參考Python數據模型文檔,特別是關于模塊和包的信息,請參閱Python Import文檔。

導入模塊或解釋器

接下來是Python解釋器執行代碼的第二種方式:導入。在開發模塊或腳本時,可以使用import關鍵字導入他人已經構建的模塊。

在導入過程中,Python執行指定模塊中定義的語句(但僅在第一次導入模塊時)。要演示導入execution_methods.py文件的結果,需要啟動Python解釋器,然后導入execution_methods.py文件:

在此代碼輸出中,Python解釋器執行了三次print()函數調用。前兩行由于沒有變量,在輸出方面與在命令行上作為腳本執行時完全相同。但是第三個輸出存在差異。

當Python解釋器導入代碼時,__name__的值與要導入的模塊的名稱相同。您可以通過第三行的輸出了解這一點。__name__的值為'execution_methods',是Python導入的.py文件。

注意如果您在沒有退出Python時再次導入模塊,將不會有輸出。

注意:更多關于導入在Python中如何工作的內容請參考官方文檔和Python中的絕對和相對導入。

Main函數的最佳實踐

既然您已經了解兩種執行方式上的差異,那么掌握一些最佳實踐方案還是很有用的。它們將適用于編寫作為腳本運行的代碼或者在另一個模塊導入的代碼。

如下是四種實踐方式:

將大部分代碼放入函數或類中

請記住,Python解釋器在導入模塊時會執行模塊中的所有代碼。有時如果想要實現用戶可控的代碼,會導致一些副作用,例如:

在這種情況下,想要實現用戶控制觸發此代碼的執行,而不是讓Python解釋器在導入模塊時執行代碼。

因此,最佳方法是將大部分代碼包含在函數或類中。這是因為當Python解釋器遇到def或class關鍵字時,它只存儲這些定義供以后使用,并且在用戶通知之前不會實際執行。

將如下代碼保存在best_practices.py以證明這個想法:

在此代碼中,首先從time模塊中導入sleep()。

在這個示例中,參數以秒的形式傳入sleep()函數中,解釋器將暫停一段時間再運行。隨后,使用print()函數打印關于代碼描述的語句。

之后,定義一個process_data()函數,執行如下五項操作:

在命令行中執行

當你將此文件作為腳本用命令行執行時會發生什么呢?

Python解釋器將執行函數定義之外的from time import sleep和print(),之后將創建函數process_data()。然后,腳本將退出而不做任何進一步的操作,因為腳本沒有任何執行process_data()的代碼。

如下是這段腳本的執行結果:

我們在這里看到的輸出是第一個print()的結果。注意,從time導入和定義process_data()函數不產生結果。具體來說,調用定義在process_data()內部的print()不會打印結果。

導入模塊或解釋器執行

在會話(或其他模塊)中導入此文件時,Python解釋器將執行相同的步驟。

Python解釋器導入文件后,您可以使用已導入模塊中定義的任何變量,類或函數。為了證明這一點,我們將使用可交互的Python解釋器。啟動解釋器,然后鍵入import best_practices:

導入best_practices.py后唯一的輸出來自process_data()函數外定義的print()。導入模塊或解釋器執行與基于命令行執行類似。

使用__name__控制代碼的執行

如何實現基于命令行而不使用Python解釋器導入文件來執行呢?

您可以使用__name__來決定執行上下文,并且當__name__等于"__main__"時才執行process_data()。在best_practices.py文件中添加如下代碼:

這段代碼添加了一個條件語句來檢驗__name__的值。當值為"__main__"時,條件為True。記住當__name__變量的特殊值為"__main__"時意味著Python解釋器會執行腳本而不是將其導入。

條件語塊內添加了四行代碼(第12,13,14和15行):

現在,在命令行中運行best_practices.py,并觀察輸出的變化:

首先,輸出顯示了process_data()函數外的print()的調用結果。

之后,data的值被打印。因為當Python解釋器將文件作為腳本執行時,變量__name__具有值"__main__",因此條件語句被計算為True。

接下來,腳本將調用process_data()并傳入data進行修改。當process_data執行時,將輸出一些狀態信息。最終,將輸出modified_data的值。

現在您可以驗證從解釋器(或其他模塊)導入best_practices.py后發生的事情了。如下示例演示了這種情況:

注意,當前結果與將條件語句添加到文件末尾之前相同。因為此時__name__變量的值為"best_practices",因此條件語句結果為False,Python將不執行process_data()。

創建名為main()的函數來包含要運行的代碼

現在,您可以編寫作為腳本由從命令行執行并導入且沒有副作用的Python代碼。接下來,您將學習如何編寫代碼并使其他程序員能輕松地理解其含義。

許多語言,如C,C++,Java以及其他的一些語言,都會定義一個叫做main()的函數,當編譯程序時,操作系統會自動調用該函數。此函數通常被稱為入口點(entry point),因為它是程序進入執行的起始位置。

相比之下,Python沒有一個特殊的函數作為腳本的入口點。實際上在Python中可以將入口點定義成任何名稱。

盡管Python不要求將函數命名為main(),但是最佳的做法是將入口點函數命名為main()。這樣方便其他程序員定位程序的起點。

此外,main()函數應該包含Python解釋器執行文件時要運行的任何代碼。這比將代碼放入條件語塊中更好,因為用戶可以在導入模塊時重復使用main()函數。

修改best_practices.py文件如下所示:

在這個示例中,定義了一個main()函數,它包含了上面的條件語句塊。之后修改條件語塊執行main()。如果您將此代碼作為腳本運行或導入,將獲得與上一節相同的輸出。

在main()中調用其他函數

另一種常見的實現方式是在main()中調用其他函數,而不是直接將代碼寫入main()。這樣做的好處在于可以實現將幾個獨立運行的子任務整合。

例如,某個腳本有如下功能:

如果在單獨的函數中各自實現這些子任務,您(或其他用戶)可以很容易地實現代碼重用。之后您可以在main()函數中創建默認的工作流。

您可以根據自己的情況選擇是否使用此方案。將任務拆分為多個函數會使重用更容易,但會增加他人理解代碼的難度。

修改best_practices.py文件如下所示:

在此示例代碼中,文件的前10行具有與之前相同的內容。第12行的第二個函數創建并返回一些示例數據,第17行的第三個函數模擬將修改后的數據寫入數據庫。

第21行定義了main()函數。在此示例中,對main()做出修改,它將調用數據讀取,數據處理以及數據寫入等功能。

首先,從read_data_from_web()中創建data。將data作為參數傳入process_data(),之后將返回modified_data。最后,將modified_data傳入write_data_to_database()。

腳本的最后兩行是條件語塊用于驗證__name__,并且如果if語句為True,則執行main()。

在命令行中運行如下所示:

根據執行結果,Python解釋器在執行main()函數時,將依次執行read_data_from_web(),process_data()以及write_data_to_database()。當然,您也可以導入best_practices.py文件并重用process_data()作為不同的數據輸入源,如下所示:

在此示例中,導入了best_practices并且將其簡寫為bp。

導入過程會導致Python解釋器執行best_practices.py的全部代碼,因此輸出顯示解釋文件用途的信息。

然后,從文件中存儲數據而不是從Web中讀取數據。之后,可以重用best_practices.py文件中的process_data()和write_data_to_database()函數。在此情況下,可以利用代碼重寫來取代在main()函數中實現全部的代碼邏輯。

實踐總結

以下是Python中main()函數的四個關鍵最佳實踐:

結論

恭喜!您現在已經了解如何創建Python main()函數了。

本文介紹了如下內容:

現在,您可以開始編寫一些非常棒的關于Python main()函數代碼啦!

python關閉主頁面返回登錄界面

有很多種方法,但是很多方法要么這個有問題,要么那個有問題,最后終于找到一種沒問題的方法。記錄一下:

Login.py(登錄窗口)文件

import sys

from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtCore import *

from PyQt5.QtWidgets import QFileDialog, QMessageBox, QDockWidget, QListWidget

from PyQt5.QtGui import *

from Ui_Login import Ui_Login_Window #由.UI文件生成.py文件后,導入創建的GUI類

from Main import * # Main.py為 主窗口代碼文件

from class_MSSQL import MSSQL

#QtWidgets.QMainWindow:繼承該類方法

class Login_window(QtWidgets.QMainWindow,Ui_Login_Window):

#__init__: 析構函數,也就是類被創建后就會預先加載的項目。

# 馬上運行,這個方法可以用來對你的對象做一些你希望的初始化。

def __init__(self):

#這里需要重載一下Login_window,同時也包含了QtWidgets.QMainWindow的預加載項。

super(Login_window, self).__init__()

self.setupUi(self)

# 將點擊事件與槽函數進行連接

self.btn_login.clicked.connect(self.btn_login_fuc)

#登錄按鈕 函數

def btn_login_fuc(self):

#1 獲取輸入的賬戶和密碼

account = self.txt_1.text() # 記得text要打括號()!

password = self.txt_2.text()

if account == "" or password == "":

reply = QMessageBox.warning(self,"警告","賬號密碼不能為空,請輸入!")

return

#2 查詢數據庫,判定是否有匹配

ms = MSSQL()

result = ms.Login_result(account, password)

if(len(result) 0):

#1打開新窗口

Ui_Main.show()#2關閉本窗口

self.close()

else:

reply = QMessageBox.warning(self,"警告","賬戶或密碼錯誤,請重新輸入!")

if __name__ == '__main__': #如果這個文件是主程序。

app = QtWidgets.QApplication(sys.argv) #QApplication相當于main函數,也就是整個程序(很多文件)的主入口函數。對于GUI程序必須至少有一個這樣的實例來讓程序運行。

window = Login_window() #生成一個實例(對象)

Ui_Main = Ui_Main() #生成主窗口的實例

window.show() #有了實例,就得讓它顯示。這里的show()是QWidget的方法,用來顯示窗口。

sys.exit(app.exec_()) # 調用sys庫的exit退出方法,條件是app.exec_()也就是整個窗口關閉。

Main.py(主窗口)文件

import sys

from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtCore import *

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

from Ui_Main import Ui_MainWindow #由.UI文件生成.py文件后,導入創建的GUI類

import math

from PIL import Image, ImageDraw, ImageFont

import numpy as np

import os

import cv2 as cvcv

from class_Detection import Detection

class Ui_Main(QtWidgets.QMainWindow,Ui_MainWindow):

def __init__(self):

super(Ui_Main, self).__init__()

self.setupUi(self)

# 將點擊事件與槽函數進行連接

self.btn_video.clicked.connect(self.btn_video_fuc)

def btn_video_fuc(self):

filename = QFileDialog.getOpenFileName(self,'open file','./')

self.timer_camera = QTimer(self)

self.cap = cvcv.cv2.VideoCapture(filename[0])

self.timer_camera.timeout.connect(self.show_pic)

self.timer_camera.start(10) #1毫秒

def show_pic(self):

dc = Detection()

success,frame = self.cap.read()

if success:

show = dc.process_image(frame)

showImage = QImage(show.data, show.shape[1], show.shape[0],QImage.Format_RGB888)

self.label.setPixmap(QPixmap.fromImage(showImage))

self.label.setScaledContents(True) #圖片自適應

self.timer_camera.start(10)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

window = Ui_Main()

window.show()

sys.exit(app.exec_())

為什么Python源碼中的入口函數是Py

不了方便記憶,沒有其它特別的含義。 還有眾多的庫名也是以PY開頭。也是區別于其它語言的標志。

Python3基礎

默認情況下,Python 3 源碼文件以 UTF-8 編碼,所有字符串都是 unicode 字符串。 當然你也可以為源碼文件指定不同的編碼:

在 Python 3 中,非 ASCII 標識符也是允許的了。

保留字即關鍵字,我們不能把它們用作任何標識符名稱。Python 的標準庫提供了一個 keyword 模塊,可以輸出當前版本的所有關鍵字:

Python中單行注釋以 # 開頭,實例如下:

執行以上代碼,輸出結果為:

多行注釋可以用多個 # 號,還有 ''' 和 """:

執行以上代碼,輸出結果為:

python最具特色的就是使用縮進來表示代碼塊,不需要使用大括號 {} 。

縮進的空格數是可變的,但是同一個代碼塊的語句必須包含相同的縮進空格數。實例如下:

以下代碼最后一行語句縮進數的空格數不一致,會導致運行錯誤:

以上程序由于縮進不一致,執行后會出現類似以下錯誤:

Python 通常是一行寫完一條語句,但如果語句很長,我們可以使用反斜杠()來實現多行語句,例如:

在 [], {}, 或 () 中的多行語句,不需要使用反斜杠(),例如:

python中數字有四種類型:整數、布爾型、浮點數和復數。

實例

輸出結果為:

函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數入口之間也用一行空行分隔,以突出函數入口的開始。

空行與代碼縮進不同,空行并不是Python語法的一部分。書寫時不插入空行,Python解釋器運行也不會出錯。但是空行的作用在于分隔兩段不同功能或含義的代碼,便于日后代碼的維護或重構。

記住: 空行也是程序代碼的一部分。

執行下面的程序在按回車鍵后就會等待用戶輸入:

以上代碼中 ," "在結果輸出前會輸出兩個新的空行。一旦用戶按下 enter 鍵時,程序將退出。

Python可以在同一行中使用多條語句,語句之間使用分號(;)分割,以下是一個簡單的實例:

執行以上代碼,輸出結果為:

縮進相同的一組語句構成一個代碼塊,我們稱之代碼組。

像if、while、def和class這樣的復合語句,首行以關鍵字開始,以冒號( : )結束,該行之后的一行或多行代碼構成代碼組。

我們將首行及后面的代碼組稱為一個子句(clause)。

如下實例:

print 默認輸出是換行的,如果要實現不換行需要在變量末尾加上 end="" :

以上實例執行結果為:

在 python 用 import 或者 from...import 來導入相應的模塊。

將整個模塊(somemodule)導入,格式為: import somemodule

從某個模塊中導入某個函數,格式為: from somemodule import somefunction

從某個模塊中導入多個函數,格式為: from somemodule import firstfunc, secondfunc, thirdfunc

將某個模塊中的全部函數導入,格式為: from somemodule import *

import sys print ( ' ================Python import mode========================== ' ) ; print ( ' 命令行參數為: ' ) for i in sys . argv : print ( i ) print ( ' python 路徑為 ' , sys . path )

from sys import argv , path # 導入特定的成員 print ( ' ================python from import=================================== ' ) print ( ' path: ' , path ) # 因為已經導入path成員,所以此處引用時不需要加sys.path

很多程序可以執行一些操作來查看一些基本信息,Python可以使用-h參數查看各參數幫助信息:

新聞標題:python入口函數 python 程序入口
文章分享:http://www.yijiale78.com/article28/dodcojp.html

成都網站建設公司_創新互聯,為您提供響應式網站外貿建站全網營銷推廣App開發網站排名企業建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設