learn-python3

来源:http://www.cnblogs.com/cyanlong/archive/2016/07/27/5712319.html
-Advertisement-
Play Games

learn python3   這是我初學Python時寫的一套Python基礎示常式序.主要基於廖雪峰老師的Python3教程和<<深入理解Python>>. 感謝! 下麵是這些示常式序的目錄總結:  Chapter1:容器/集合/C ...


# learn-python3

  這是我初學Python時寫的一套Python基礎示常式序.主要基於廖雪峰老師的Python3教程和<<深入理解Python>>. 感謝!

下麵是這些示常式序的目錄總結:

 Chapter1:容器/集合/Collection

   1.字典/哈希表/dictionary/map

   2.鏈表/list

   3.無序表/set/tuple

   4.格式化字元串和字元串連接


 Chapter2:Python函數和函數式編程

   1.Python參數(*args, **kw ..)

   2.(多)返回值 - tuple

   3.函數式編程          

      1).高階函數(map,reduce,filter)

      2).匿名函數(lambda表達式)

      3).閉包(Closure)

      4).裝飾器(decorator)


閉包(Closure):

  在python中,函數是對象,函數名作為對此對象的引用。像其他數據結構一樣,函數也可以賦值給變數,並且我們可以在函數中定義對象,將對象作為參數和將對象作為返回值。

 在這裡,我們舉一個例子來說明。

def make_printer(msg):
    def printer():
        print(msg)
    return printer

printer = make_printer('Foo!')
printer() #Foo          

  閉包是指 內部函數(nested function) 訪問外圍函數(enclosing)作用域的變數,並且外圍函數已經執行完畢。

  當 make_printer 被調用,一個新的棧幀入棧,printer 函數作為其常量,msg 的值作為局部變數被保存。然後創建並返回了函數 printer因為函數 printer 引用了msg 變數,當 make_printer 函數返回(return)之後它依舊存活(kept alive)。

  這裡面有兩個關鍵點:存在內部函數,並且內部函數訪問了外圍局部變數。只有同時滿足這兩點,才稱為閉包。


裝飾器(decorator):

  首先,裝飾器是一種設計模式。在不改變原有代碼的基礎上,將其功能模塊進行包裝(wrapper),構建出更加複雜的功能模塊。通常,增強了的功能模塊會調用被增強的(即原有的)功能邏輯。AOP(Aspect Oriented Programming) 就是使用這種編程思想。

  從技術上講,Python的裝飾器是使用閉包來實現的。並提供了簡潔的語法糖支持。

  裝飾器函數接收函數作為參數,並且在內部通過定義 wrapper 函數來實現增強的邏輯。通常情況下,這個函數會調用原函數,並且,這個函數的參數列表應該和被增強的函數保持一致。最終,我們將這個增強了的函數(wrapper)作為返回值。

def decorator(func):
    def wrapper(*args, **kwargs):
        maybe some code..
        func(*args, **kwargs)
        maybe some code...
    return wrapper

wrapper_origin_func = decorator(origin_func)
wrapper_origin_func(*args, **kwargs)

語法糖支持:

@decorator1(args)
@decorator2
def func(): pass

#is equivalent to:
def func(): pass
func = decorator1(args)(decorator2(func))

 關於裝飾器帶參數的解釋:

def decorator1(args):
    def real-decorator(func):
        def wrapper(*args, **kwargs):
            some code..
            func(*args, **kwargs)
            some code access args
        return wrapper
    return real-decorator   

 Chapter3:面向對象(Oritented-Object)

   1.繼承和多態(extends and polymorphic)

   2.成員(mumber)

      1).類成員

      2).實例成員

   3.訪問許可權

   4.專有方法(special method)

   5.動態修改類和slots.

   6.Python中的類型(type)

   7.元類(metaclass)


Chapter4:協程 -- yield

  我們考慮自己來實現一個數字生成器(此生成器是廣義的),即 range() 函數的功能。

  首先,我們藉助 list 通過定義最簡單,最直接的函數來實現。

def MyRange(n):
    num, list = 0, []
    for num < n:
        list.append(num)
        num += 1
    return list

 上面的代碼藉助了 list 對象簡單粗暴的將所有可能的值都載入到記憶體中。這種實現方式當n很大時對記憶體的消耗極高甚至會發生記憶體溢出。為此,我們可以定義一個迭代器類,通過維護兩個變數值而不是整個元素來實現延遲計算。


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

-Advertisement-
Play Games
更多相關文章
  • 函數值對消除代碼重覆有很大的幫助。但是像函數值這樣直接將一個函數作為另一個函數的參數卻不太利於函數值本身的重用。 來看一個例子: class Equipment(val routine: Int => Int) { def simulate(input: Int) = { print("Runnin... ...
  • 工廠方法模式適用於“大量的產品需要頻繁創建,並且具有同樣的介面時使用”。 一、普通工廠模式 對於實現了同一個介面的一些類進行統一實例的創建,把這個統一創建的工作交給一個類來實現,這個類就叫做工廠類。 Job介面 (定義了要做的事情) 1 public interface Job { 2 public ...
  • ...
  • 在 Delphi Berlin 10.1 IDE 里雖然提供了 Style 編輯功能(TStyleBook),但遍尋不到更換 Style 底圖功能,於是花了一點時間,寫了一個小工具: 編譯版本:Delphi Berlin 10.1 下載工具:[工具]OneStyleEdit_Style換圖工具_by ...
  • 本書介紹 你是不是對Django的學習感到迷茫?是不是對網上零星的教程感到絕望?是不是苦於沒有可以迅速上手的實例而發愁?如果你同我一樣有這些感受,那麼《Django.By.Example》這本書將是你指路的明燈。 本書基於Django1.8 + Python3.4的環境,裡面包含了個人博客、社交網站 ...
  • HttpSession HttpServletRequest.getSession() HibernateSessionFactory.getSession() HttpSession的生命周期是以上三者中最長的,存在於整次對話(瀏覽器關閉後被銷毀),用於存儲單個用戶在本次會話中所用到的數據。 Ht ...
  • 1.錯誤: 在eclipse中使用run->run on server的時候,選擇tomcat6會報錯誤:The server does not support version 3.0 of the J2EE Web module specification 如下所示: 2.原因: Tomcat 6 ...
  • R語言中的機器學習程式包主要如下所示: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...