Python 對象(type/object/class) 作用域 一等函數 (慕課--Python高級,IO併發 第二章)

来源:https://www.cnblogs.com/Adobe_fans/archive/2018/08/22/9515414.html
-Advertisement-
Play Games

在python中一共有兩種作用域:全局作用域和函數作用域全局作用域:在全局都有效,全局作用域在程式執行時創建,在程式執行結束時銷毀;所有函數以外的區域都是全局作用域;在全局作用域中定義的變數,都屬於全局變數,全局變數可以在程式的任意位置被訪問; 函數作用域:函數作用域在函數調用時創建,在調用結束時銷 ...


在python中一共有兩種作用域:全局作用域和函數作用域
全局作用域:在全局都有效,全局作用域在程式執行時創建,在程式執行結束時銷毀;所有函數以外的區域都是全局作用域;在全局作用域中定義的變數,都屬於全局變數,全局變數可以在程式的任意位置被訪問;

函數作用域:函數作用域在函數調用時創建,在調用結束時銷毀,函數每調用一次就會產生一個新的函數作用域;在函數作用域中定義的變數,都是局部變數,只能在函數內部被訪問;在函數中為變數賦值時,預設都是為局部變數賦值;如果需要在函數內部修改全局變數,則需要使用global關鍵字來 聲明 使用全局變數。

變數的查找規則:當我們使用一個變數時,會優先在當前作用域中尋找該變數,如果有則使用;如果沒有則繼續去上一級作用域中尋找,如果有則使用;如果依然沒有則繼續去上一級作用尋找,依次類推,直到找到全局作用域,依然沒有找到的話,則會拋出異常;

函數式編程:函數先定義,再使用
一等對象一般都會具有如下特點:(函數)對象是在運行時創建的;(函數)能賦值給變數或者作為數據結構中的元素;(函數)能作為參數傳遞;(函數)能作為返回值返回;

高階函數:高階函數至少要符合以下兩個特點中的一個:接收一個或多個函數作為參數;將函數作為返回值(閉包,通過閉包可以創建一些只有當前函數(嵌套的內部函數)能訪問的變數,可以將一些私有的數據藏到閉包中。形成閉包的條件:1.函數嵌套;2.將內部函數作為返回值返回;3.內部函數必須要使用到外部函數的變數;);

匿名函數:lambda函數表達式(只是函數的簡寫,語法糖),專門用來創建一些簡單的函數,他是函數創建的一種方式;語法:lambda 參數列表:返回值

在定義函數時,可以通過"@"裝飾器,來使用指定的裝飾器,來裝飾當前的函數,可以同時為一個函數指定多個裝飾器,這樣函數將會按照從內向外的順序被裝飾。

尚學堂的Python視頻教程 https://pan.baidu.com/s/1dGCBKx7 密碼:ofml

python對象==========================
對象是記憶體中專門用來存儲數據的一塊區域,對象可以用來存放各種數據(數字,布爾值,代碼),對象由三部分組成:對象的標識id,對象的類型type,對象的值value,當用一個變數去保存變數的時候,保存的是對象的id(記憶體地址),一個對象一旦創建它的id和type就永遠不能改變了,而對象的值value,可變對象的值可以改變,不可變對象的值不可以改變。

面向對象oop:python語言中的所有操作都是通過對象來進行的。面向對象的編程語言,關註的是對象,而不關註過程;對於面向對象的語言來說,一切都是對象;面向對象的編程思想,將所有的功能統一保存到對應的對象中。

慕課網--Python高級編程和非同步IO併發編程 https://www.bilibili.com/video/av26982371/?p=5

第二章:
在python一切皆對象,(在靜態語言java中,有兩個概念:object和class,object只是class的生成的一個實例而已),在python中class也是對象,函數也是對象,python中的代碼和模塊也是對象,python可以動態的修改類的屬性;(在python中,函數和類都是對象,屬於一等公民,這裡的一等公民可以進行以下操作:1、可以賦值給一個變數,2、可以添加到集合對象中,3、可以作為參數傳遞給函數,4、可以當做函數的返回值;)(list是一個集合;)

type、object和class的關係:
type可以用來返回(一個變數指向的)對象的類型,(也可通過type生成一個類,元類編程)。type->class->object:type可以生成class,class可以生成object;(type是用來生成class對象的,我們平時使用的實例,就是自己定義的類或者是內置的類來生成的一些實例。)object是所有對象都要繼承的最頂層的基礎類;(類名.__bases__:查看類的基類),如果一個類沒有繼承任何類的話,預設是繼承自object類的。type本身也是一個類,同時type也是一個對象,type.__bases__是object;type(object)是type,表明object是由type生成一個對象,type和object形成一個環路,object.__bases__是空,最頂層基類object的基類是空;

在python中一個對象有三個特征:1、身份:對象在記憶體中的地址,通過id()函數查看一個對象的身份,任意生成一個對象都會有一個id, 2、類型:任何一個對象都是有類型的, 3、值:比如:a=1 ,1就是a變數的值,1會被python解釋器用int類型來封裝,封裝後用a這個變數指向1這個對象。

python中的常用內置類型:
None:python解釋器在啟動的時候,會用None類型來生成None的對象,a=None b=None:a和b都指向Python解釋器中唯一的None對象,id(a)=id(b)返回true;所以None對象在全局只有一個。
數值類型:int,float,complex(複數),bool;
迭代類型:可以用for迴圈來進行遍歷;
序列類型:list,tuple,str,array,range,bytes/bytearray/memoryview(二進位序列)
映射類型:dict字典,映射類型有key和map,
集合類型:set和frozenset;set和dict在Python里的實現原理是一致的,所以它們在Python里的性能都非常高。
上下文管理類型:with語句;
其他:模塊類型,class和實例,函數類型,方法類型(class裡面定義的函數),代碼類型(代碼本身也會被Python解釋器變成一個對象類型),object類型,type類型,ellipsis類型(省略號的類型),notimplemented類型(做面向對象的高級設計時會用到);

java,C#這類編譯型語言在運行前編譯的時候,就可以做一些類型的檢測,但Python一切皆對象的概念,使得Python沒有編譯過程,那麼很多代碼的錯誤只有在代碼運行起來的時候,才會知道我們的錯誤,這就是動態語言帶來的一些弊端。 (第二章 完結)


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

-Advertisement-
Play Games
更多相關文章
  • Element.getBoundingClientRect()返回元素的大小及相對於視窗的位置 語法: rectObject=object.getBoundingClientRect(); 返回值是一個DOMRect對象,即DOMRect={x:scrollLeft,y:scrollY,width: ...
  • 開發環境: 安裝JDK8 安裝STS http://spring.io/tools/sts/ 安裝MySql 伺服器 https://www.mysql.com/downloads/ 客戶端 Navicat Premium 12 ...
  • 一、什麼是分散式系統 分散式系統是建立在網路之上的系統。分散式系統背後是由一系列的電腦組成的,但用戶感知不到背後的邏輯,就像訪問單個電腦一樣。 特征: 最開始一臺伺服器上存儲著文件,數據,應用程式。隨著流量的增多,瓶頸出現,應用程式需要更快CPU,資料庫伺服器要更大記憶體(緩存)和硬碟,文件伺服器 ...
  • 熟悉TCP變成的可以知道,無論是客戶端還是服務端,但我們讀取或者發送消息的時候,都需要考慮TCP底層粘包/拆包機制,下麵我們先看一下TCP 粘包/拆包和基礎知識,然後模擬一個沒有考慮TCP粘包/拆包導致功能異常的案例,最後,通過正確的常式來談談Netty是如何實現的。 主要內容: TCP粘包/拆包的 ...
  • 工廠模式出現的原因 在java中,創建一個對象最簡單的方法就是使用new關鍵字。但在一些複雜的業務邏輯中,創建一個對象不只需要new一行代碼就成了,可能需要一些列的初始化設置,或先創建一些輔助對象來創建這個對象。 在這種場景中,如果需要多次創建這種對象,那每次都要寫很多代碼。工廠模式的產生就是為瞭解 ...
  • 大家好,這裡是「聊聊系統優化 」,併在下列地址同步更新 博客園:http://www.cnblogs.com/changsong/ 知乎專欄:https://zhuanlan.zhihu.com/youhua 思否專欄:https://segmentfault.com/blog/youhua 全網私 ...
  • 問題描述: 由於工作需要,需要在spring中配置兩個數據源,有一天突然發現@Transactional註解失效 環境框架: springmvc+spring+spring jdbcTemplate 資料庫: Oracle資料庫 解決方法: 百度獲得三種可能原因及相應解決方案: 第一種 spring ...
  • 題目:加一 給定一個非負整數組成的非空數組,在該數的基礎上加一,返回一個新的數組。 最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 變數註釋: 思路: 這一題主要是處理 加一 後所可能引發的進位操作 //只有carry > 0時,才 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...