Python基礎系列----函數,面向對象,異常

来源:http://www.cnblogs.com/zcy-xy/archive/2016/08/21/5634340.html
-Advertisement-
Play Games

1.前言 前面講了一些關於python的一些基本的語法及語句,在這個地方繼續講python的方法及其python核心概念的面向對象。我們都知道python被稱為面向對象的語言,那麼在這裡我們將正式的接觸 的python的核心。 2.函數 定義:是可調用的,執行某種行為並返回一個值。判斷一個函數是否可 ...


1.前言                                                                                              

  前面講了一些關於python的一些基本的語法及語句,在這個地方繼續講python的方法及其python核心概念的面向對象。我們都知道python被稱為面向對象的語言,那麼在這裡我們將正式的接觸 的python的核心。

2.函數                                                                                              

  定義:是可調用的,執行某種行為並返回一個值。判斷一個函數是否可以調用,可以使用內置的callable函數。在下麵的列子中,x返回false,cal返回true。  

1 def cal():
2     return 'function'
3 x=1
4 
5 print(callable(x))
6 print(callable(cal))

 

  在上面的函數中,我們可以在括弧中指定參數名稱,這樣就能把我們需要的參數傳遞到方法函數中。但在傳遞參數過程中,我們需要註意函數的作用域,即當前函數在某一段代碼中起作用,在其他中無法訪問。兩個相同的值的變數,在錶面現象,我們看起來吃相等的,但是實際在程式中他們是不等。對於在函數中賦值,同樣會存在一個這個問題。例如:  

1 names=['a','b','c']
2 n=names[:]
3 
4 print(n is names)
5 
6 print(n==names)

 

  在 ‘n is names’返回false,而‘n==names’返回true。錶面上我們看到的時候n和names的值相等,但是n不一定就是names,這裡會涉及到引用的一個問題,我們在創建一個變數時,系統會自動為他分配一個相當於是一個唯一的標識,同理,在這個地方,我們同時創建了n和names,系統會分配不同的標識,雖然n是通過names賦值的。但在這裡只能說他們的值相等,而不能說n就是names。

  現在我們在函數中傳遞的參數都叫做位置參數,因為他們的位置是不可變的,如果將位置改變之後,那在對應調用函數時,傳遞參數的值的位置也需要發生改變,否則會發生參數傳遞錯誤的現象。在python中,我們可以對函數的參數賦預設值,這樣當在調用函數時,如果不需要參入自己想要的參數,那麼可以不傳。方式為在參數後面緊跟預設值。

  遞歸

   在函數中,函數可以調用其它函數,但是也可以調用自己本身。對於調用自己本身的函數,我們一般稱之為為遞歸。

  在遞歸函數中主要包含兩部分:

    1.當函數之間返回值時,有基本實例

    2.遞歸實例,包括一個或者多個問題較小部分的遞歸引用

  關鍵在於將問題分解為小部分,遞歸不能永遠的執行下去,否則就成了所謂的死迴圈。因為在遞歸中總以最小可能性問題結束,而這些問題有存儲在基本實例中。    

 

 1 '''
 2 階乘
 3 '''
 4 def factorial(n):
 5     if n==1:
 6         return n
 7     else:
 8         return n*factorial(n-1)
 9     
10 '''
11 12 '''
13 def power(x,n):
14     if n==0:
15         return  1;
16     else:
17         return x*power(x,n-1)

 

3.面向對象                                                                                        

  對象:可以看作數據(特性)以及由一系列以存取/操作這樣數據的方法所組成的集合。使用對象替代全局變數和函數的原因有很多,其中對象最重要的優點主要在以下幾方面:

    1.多態,可以將不同類的對象使用同樣的操作

    2.封裝,對外部世界隱藏對象的工作細節

    3.繼承:以通用的類為基礎建立專門的類對象

  多態:不知道變數所引用的的對象類型是什麼,還是能對它進行操作,而它也會根據對象(或類)類型的不同而表現出不同的行為。isinstance進行類型/類的檢查

  方法:綁定到對象特性上面的函數

  封裝:向程式中的其他部分隱藏對象的具體實現細節的原則

    方法和函數的區別在於第一個參數是否為self。在類中的方法,預設第一個參數為self,特指當前的引用,而方法咋沒有。

4.異常                                                                                              

  在程式中,我們經常會遇到一些臨界的界點情況,比如除數為0等情況。預設的解決辦法是在進行操作之前,對數據進行判斷篩選,但是當情況比較多的時候,這個時候做驗證時就比較麻煩,而且不易於可讀。在python中,存在一種異常處理的機制,使用try ..............  except來進行異常的捕獲處理。在正常的程式中,我們也可以使用raise來觸發一個異常,結束當前的操作。

  python中自置了比較常用的幾種異常,但是它的基類為exception,我們可以手動的擴展異常的類型,來豐富我們的異常處理。當然我們也可以直接使用基類exception直接捕獲異常,通過try............except Exception, e    使用對象e來輸出異常的信息。

  在異常處理中,先執行try中的語句塊,若觸發了異常,則執行except中的語句塊。但是在我們讀取文件時,我們會打開一系列的對象,若這時觸發了異常,不手動關閉這些對象時,會造成記憶體一定的損耗。為了避免這種情況,可以在except後添加finally。即不管前面執行如何,最後都會執行finally的語句塊。這樣就避免了記憶體的損耗。           

5.寫在最後                                                                                        

  由於前期的文章都是先前自己看完的,在這之前的文章,都只是走馬觀花的看了一次,並再一次對自己做了一個總結。對於後續的文章,需要自己邊看邊思考邊理解,可能文章更新的進度比較慢,儘量保證每周2篇,還請大家諒解。若在文中有什麼沒講清楚或者存在錯誤的地方,希望大家多多批評指出,多多交流,大家共同進步。

  如果對你有一定的幫助,麻煩點個

 

 

    若需要轉載,請標明出處!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開發Java程式之前,需要在電腦行安裝並配置Java開發環境。一種是直接安裝Myeclipse,利用其自帶的JDK編譯運行;另一種是在我們的Windows或者Linux平臺下安裝JDK,配置環境變數。(隨著JDK版本的更新,Myeclipse預設JDK是不變的,除非升級最新版的Myeclipse) ...
  • CvSize 矩形框大小,以像素為精度 GetSize返回矩陣或圖像ROI的大小 CvSize cvGetSize( const CvArr* arr );arr 數組頭。 函數 cvGetSize 返回圖像或矩陣的行數和列數,如果是圖像就返回ROI的大小 註意: IplImage* src1=cv ...
  • 一. 準備工作 1. 點擊此下載相關開發工具 2. 將poi-3.8、jxls-core-1.0兩個jar包放到工程中,並引用 3. 將excel模板runRecord.xls放到RunRecordBSImpl.java類路徑下 二. RunRecordBSImpl.java類 1 import j ...
  • 一、概述 為了讓web伺服器和web應用程式進行訪問交互,servlet是這個交互的標準介面,web伺服器必須符合servlet標準,web應用應該實現servlet介面。 tomcat是一個符合servlet標準的servlet容器。如下圖所示。 二、tomcat作為servlet容器的基本功能 ...
  • 1.什麼是php PHP,即“Hypertext Preprocessor”,是一種被廣泛應用的開源通用腳本語言,尤其適用於 Web 開發並可嵌入 HTML 中去。它的語法利用了 C、Java 和 Perl,易於學習。該語言的主要目標是允許 web 開發人員快速編寫動態生成的 web 頁面。對於像微 ...
  • scjson純c json引擎, 補充了可以在json串或文件中添加註釋的功能. window和linux測試完畢. ...
  • Python中的變數不需要聲明,每個變數使用前必須賦值,變數賦值後才會被創建,在Python中變數就是變數,它沒有類型。我們所說的"類型"是變數所指的記憶體中對象的類型。 等號(=)用來給變數賦值,等號(=)運算符左邊是變數名,等號(=)運算符右邊是存儲在變數名中的值。例如: 執行以上程式會輸出以下結 ...
  • 好不容易寫出來一些程式,最後各種錯誤,就是運行不了。最後還得乖乖的 打斷點 ,運用 輸出語句,找出問題具體在什麼地方,進行修改。 1、從本地找cookie。IE-工具-Internet選項-瀏覽歷史紀錄-設置-查看文件。和從C盤找結果是一樣的。 2、簡單設置編碼。 Myeclipse-Windows ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...