通過5個知識點輕松搞定Python的作用域

來源:本網整理

學習python可以從幾個方面入手:學習基本的語法,包括數據結構(數組,字典等)。了解數據類型,以及他的類型轉換。學會流程控制-選擇,循環。函數,模塊,熟練使用常用的內建函數。class類多線程www.anxorj.tw防采集請勿采集本網。

s">

通過5個知識點輕松搞定Python的作用域

投稿:daisy 字體:[增加 減小] 類型:轉載 時間:2016-09-09 我要評論 網上關于python的作用域介紹有很多,那么小編今天給大家分享的這篇文章是讓大家通過學習這5個知識點,可以輕松搞定Python的作用域,有需要的朋友們可以參考借鑒。 ">

1、塊級作用域

第五個就是責任: 一個人不在于年齡的大小,而在于責任的大小,企業團隊中要求訓練團隊對責任的認識,加入團隊就要有團隊榮譽感,真正對團隊負起責任來,做一個團隊中有擔當,有承擔能力,能夠為團隊貢獻

想想此時運行下面的程序會有輸出嗎?執行會成功嗎?

對于傳統的數據庫需求,Python 提供了對所有主流關系數據庫系統的接口,Python 定義了一種通過Python 腳本存取SQL 數據庫系統的可移植的數據庫API,這個API 對于各種底層應用的數據庫系統都是統一的。

#塊級作用域 if 1 == 1: name = "lzl" print(name) for i in range(10): age = i print(age)

做個網絡爬蟲吧。這是一個很好的例子,綜合使用了大部分python常用的功能;蛘呤怯胮ython做一個文件統計或者是文件轉換。比如統計找出當前目錄下內容最多的那個目錄。python寫一個分形算法,

我們先看下執行結果

我就是完全通過網上資源自學python的。從在校時候用python接活賺零花錢,到在創業公司用python開發商業網站和游戲后臺。所有遇到的問題,幾乎都可以從互聯網上的公開資源找到答案。關于自學python,個人

C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.pylzl9 Process finished with exit code 0

書中首先介紹了Python的基礎知識,然后逐漸深入多種主題,結合教程和攻略式風格來講解Python 3中的概念。每章結尾的練習可以幫助你鞏固所學的知識。本書會為你學習Python打下堅實的基礎,包括測試、調試、

代碼執行成功,沒有問題;在Java/C#中,執行上面的代碼會提示name,age沒有定義,而在Python中可以執行成功,這是因為在Python中是沒有塊級作用域的,代碼塊里的變量,外部可以調用,所以可運行成功;  

 2、局部作用域

回顧之前學過的知識,我們學函數的時候,函數是個單獨的作用域,Python中沒有塊級作用域,但是有局部作用域;看看下面的代碼

#局部作用域 def func(): name = "lzl" print(name)

運行這段代碼,想想會不會有輸出?

Traceback (most recent call last): File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module> print(name)NameError: name 'name' is not defined

運行報錯,我相信這個大家都能理解,name變量只在func()函數內部中生效,所以在全局中是沒法調用的;對上面代碼做個簡單調整,再看看結果如何?

#局部作用域 def func(): name = "lzl" func() #執行函數print(name)

對之前的代碼添加了一句代碼,在變量name打印之前,執行了一下函數,此時打印會不會有變化?

Traceback (most recent call last): File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module> print(name)NameError: name 'name' is not defined

執行依然報錯,還是回到剛才那句話:即使執行了一下函數,name的作用域也只是在函數內部,外部依然無法進行調用;把前兩個知識點記住,接下來要開始放大招了

3、作用域鏈

對函數做下調整,看看下面的代碼執行結果如何?

#作用域鏈 name = "lzl"def f1(): name = "Eric" def f2(): name = "Snor" print(name) f2()f1()

學過函數,肯定知道最后f1()執行完會輸出Snor;我們先記住一個概念,Python中有作用域鏈,變量會由內到外找,先去自己作用域去找,自己沒有再去上級去找,直到找不到報錯

4、終極版作用域

好,鋪墊了夠了,終極版的來了~~

#終極版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2()

想想最后f2()執行結果是打印“lzl”呢,還是打印“eric”?記住自己的答案,現在先不把答案貼出來,先看看下面這段代碼:

#終極版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" return f1 ret = f2()ret() #輸出:lzl

執行結果為“lzl”,分析下上面的代碼,f2()執行結果為函數f1的內存地址,即ret=f1;執行ret()等同于執行f1() ,執行f1()時與f2()沒有任何關系,name=“lzl”f1()在一個作用域鏈,函數內部沒有變量是會向外找,所以此時變量name值為“lzl”;理解了這個,那么剛才沒給出答案的那個終極代碼你也知道答案了

#終極版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2() # 輸出:lzl

是的,輸出的是“lzl”,記住在函數未執行之前,作用域已經形成了,作用域鏈也生成了

5、新浪面試題

li = [lambda :x for x in range(10)]

判斷下li的類型?li里面的元素為什么類型?

print(type(li))print(type(li[0])) # <class 'list'># <class 'function'>

可以看到li為列表類型,list里面的元素為函數,那么打印list里面第一個元素的返回值,此時返回值為多少?

#lambada 面試題 li = [lambda :x for x in range(10)] res = li[0]()print(res) #輸出:9

li第一個函數的返回值為9還不是0,記。汉瘮翟跊]有執行前,內部代碼不執行;博客里面的代碼可以自己練練,加深下印象

總結

以上就是這篇文章的全部內容了,不知道對大家的學習和工作能不能帶來一些幫助,如果大家有疑問可以留言交流。

從入門級選手到專業級選手都在做的—爬蟲用 Python 寫爬蟲的教程網上一抓一大把,據我所知很多初學 Python 的人都是使用它編寫爬蟲程序。小到抓取一個小黃圖網站,大到一個互聯網公司的商業應用。通過 Python 入門爬蟲比較簡單易學,不需要在一開始掌握太多太基礎太底層的知識就可以很快上手,而且很快可以做出成果,非常適合小白一開始想做出點看得見的東西的成就感。除了入門,爬蟲也被廣泛應用到一些需要數據的公司、平臺和組織,通過抓取互聯網上的公開數據,來實現一些商業價值是非常常見的做法。當然這些選手的爬蟲就要厲害的多了,需要處理包括路由、存儲、分布式計算等很多問題,與小白的抓黃圖小程序,復雜度差了很多倍。Web 程序除了爬蟲,Python 也廣泛應用到了 Web 端程序,比如你現在正在使用的知乎,主站后臺就是基于 Python 的 tornado 框架,豆瓣的后臺也是基于 Python。除了 tornado(Tornado Web Server),Python 常用的 Web 框架還有 Flask(Welcome|Flask(A Python Microframework)),Django(The Web framework for perfectionists with deadlines)等等。通過上述框架,你可以很方便實現一個 Web 程序,比如我認識的一些朋友,就通過 Python 自己編寫了自己的博客程序,包括之前的 zhihu.photo,我就是通過 Flask 實現的后臺(出于版權等原因,我已經停掉了這個網站)。除了上述框架,你也可以嘗試自己實現一個 Web 框架。桌面程序Python 也有很多 UI 庫,你可以很方便地完成一個 GUI 程序(話說我最開始接觸編程的時候,就覺得寫 GUI 好炫酷,不過搞了好久才在 VC6 搞出一個小程序,后來又輾轉 Delphi、Java等,最后接觸到 Python 的時候,我對 GUI 已經不感興趣了)。Python 實現 GUI 的實例也不少,包括大名鼎鼎的 Dropbox,就是 Python 實現的服務器端和客戶端程序。人工智能(AI)與機器學習人工智能是現在非;鸬囊粋方向,AI熱潮讓Python語言的未來充滿了無限的潛力,F在釋放出來的幾個非常有影響力的AI框架,大多是Python的實現,為什么呢?因為Python足夠動態、具有足夠性能,這是AI技術所需要的技術特點。比如基于Python的深度學習庫、深度學習方向、機器學習方向、自然語言處理方向的一些網站基本都是通過Python來實現的。機器學習,尤其是現在火爆的深度學習,其工具框架大都提供了Python接口。Python在科學計算領域一直有著較好的聲譽,其簡潔清晰的語法以及豐富的計算工具,深受此領域開發者喜愛。早在深度學習以及Tensorflow等框架流行之前,Python中即有scikit-learn,能夠很方便地完成幾乎所有機器學習模型,從經典數據集下載到構建模型只需要簡單的幾行代碼。配合Pandas、matplotlib等工具,能很簡單地進行調整。而Tensorflow、PyTorch、MXNet、Keras等深度學習框架更是極大地拓展了機器學習的可能。使用Keras編寫一個手寫數字識別的深度學習網絡僅僅需要寥寥數十行代碼,即可借助底層實現,方便地調用包括GPU在內的大量資源完成工作。值得一提的是,無論什么框架,Python只是作為前端描述用的語言,實際計算則是通過底層的C/C++實現。由于Python能很方便地引入和使用C/C++項目和庫,從而實現功能和性能上的擴展,這樣的大規模計算中,讓開發者更關注邏輯于數據本身,而從內存分配等繁雜工作中解放出來,是Python被廣泛應用到機器學習領域的重要原因?茖W計算Python 的開發效率很高,性能要求較高的模塊可以用 C 改寫,Python 調用。同時,Python 可以更高層次的抽象問題,所以在科學計算領域也非常熱門。包括 scipy、numpy 等用于科學計算的第三方庫的出現,更是方便了又一定數學基礎,但是計算機基礎一般的朋友內容來自www.anxorj.tw請勿采集。

免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
Copyright © 2017 www.anxorj.tw All Rights Reserved
陕西快乐10分下载