作為腳本,python具備了弱類型語言的靈活性,便捷性。這在日常的開發使用中能夠大幅度的減輕開發人員的編碼負擔,開發者也能夠將精力集中在程式的邏輯管理和總體構架設計上。一般而言,隨著經驗的積累,開發人員都能使用python寫出漂亮的代碼,簡潔而美觀。 python也是嚴謹的,從對各類預定義錯誤的設定 ...
作為腳本,python具備了弱類型語言的靈活性,便捷性。這在日常的開發使用中能夠大幅度的減輕開發人員的編碼負擔,開發者也能夠將精力集中在程式的邏輯管理和總體構架設計上。一般而言,隨著經驗的積累,開發人員都能使用python寫出漂亮的代碼,簡潔而美觀。
python也是嚴謹的,從對各類預定義錯誤的設定我們就可以發現python具備著編譯語言具備的嚴密的邏輯結構。可以這麼講,隨著對python的深入理解,就越能感受到python在提供各類便捷操作的同時依然保持了編譯語言具有的嚴密邏輯,只是很多“隱藏”了。
那麼,python具有著哪些值得稱道的特性呢?
(一) python具有著強有力的粘連性,能夠同c,c++,java等一同工作。
這是其他大多數語言所不具備的強有力的功能,這使得python能夠同其他語言的功能代碼以更好、更便捷的方式聯合。將需要大量計算的部分通過編譯語言來完成來提高程式的運行速度。
(二)python具備著跨平臺的特性,並支持各類通用操作
python的強大與他的跨平臺有著密不可分的聯繫。可以這麼講,現如今除了底層開發,如果一門語言或工具無法跨平臺是很難在當下環境中獲得普及與擴展的。python的優秀後臺處理能力,將各類不同的平臺,各類不同的工具以一致的介面方式實現了一次編寫到處運行的目標(當然,部分需要適配各平臺的註明)。
(三)也可以說,python是一款優秀的軟體工具!
python通過c語言實現了核心語言,這部分包括著python的解釋器。解釋器起到的作用是將符合python語法規則的文本文件解釋成python這款語言能夠識別的指令,然後這類指令通過python這款軟體實現目標功能。python的核心功能就是一個軟體主體,而軟體的各類功能以python規定的文本格式呈現。在大型的軟體中,我們將很多關於界面配置等功能通過文本配置文件來控制,而python無疑在這方面做的更好。
(四)python的語法設計上的優勢
python在語法設計上做了其他語言不具有的大膽開拓。
1.python的作用於不是通過花括弧和結尾的分號,而是通過縮進,這使得整體代碼變得簡潔而小巧。
2.python通過字典和類實現了很多語法功能,這使得很多操作變得統一,雖然開始理解上有些彆扭,但在操作上卻是變得異常的簡單。
比如命名空間的實現就是通過字典來實現的
#命名空間scope scope ={} #在命名空間中預設變數 code ,值為namespace scope['code'] = 'namespace' #字元串中為可執行的python腳本 pass #設定代碼 Sstring = """ a =12 b = 'new' print('hello,world') """ pass #執行那段字元串代碼,並放入命名空間scope中 exec(Sstring,scope)
在沒有執行exec(Sstring,scope)這行代碼之前,變數scope就是一個普通的字典,但是經過這行代碼之後,scope雖然仍然是字典,但是具備有很多額外的鍵值,很顯然已經被python格式化為python的命名空間了。
python通過字典實現命名空間從而實現了變數名污染問題解決的一種方式,並且通過字典這類基礎結構和通用的字典方法,初級開發人員能夠很容易駕馭它。
當然,另一些其他語言不具備的變數名污染解決方法是globals(),locals(),nonlocals()函數。這類函數分別以字典的形式提供了所有全局變數,局部變數,外部局部變數。看到這裡,你相比也已經被python強大的能力所折服了吧。
python基本的序列和字典結構其實都是python的類。
python的列表[],元組(),字典{}其實都是類。
1 >>> list.__bases__ 2 (<class 'object'>,) 3 >>> tuple.__bases__ 4 (<class 'object'>,) 5 >>> dict.__bases__ 6 (<class 'object'>,) 7 >>> object 8 <class 'object'> 9 >>> object.__bases__ 10 () 11 >>> help(object) 12 Help on class object in module builtins: 13 14 class object 15 | The most base type
通過上面我們會發現,其實在python中,很多基本都東西在python底層都是通過類的形式來實現的。所以很多類可以使用list,tuple,dict作為基類。而object是沒有基類的類,也是pythond頂級超類。
我們那list列表來說,他作為類存在通過__dict__可以獲得所含有的變數
1 >>> list.__dict__ 2 >>>{'__add__': <slot wrapper '__add__' of 'list' objects>, 3 '__contains__': <slot wrapper '__contains__' of 'list' objects>, 4 '__delitem__': <slot wrapper '__delitem__' of 'list' objects>, 5 '__doc__': 'list() -> new empty list\n' 6 'list(iterable) -> new list initialized from ' 7 "iterable's items", 8 '__eq__': <slot wrapper '__eq__' of 'list' objects>, 9 '__ge__': <slot wrapper '__ge__' of 'list' objects>, 10 '__getattribute__': <slot wrapper '__getattribute__' of 'list' objects>, 11 '__getitem__': <method '__getitem__' of 'list' objects>, 12 '__gt__': <slot wrapper '__gt__' of 'list' objects>, 13 '__hash__': None, 14 '__iadd__': <slot wrapper '__iadd__' of 'list' objects>, 15 '__imul__': <slot wrapper '__imul__' of 'list' objects>, 16 '__init__': <slot wrapper '__init__' of 'list' objects>, 17 '__iter__': <slot wrapper '__iter__' of 'list' objects>, 18 '__le__': <slot wrapper '__le__' of 'list' objects>, 19 '__len__': <slot wrapper '__len__' of 'list' objects>, 20 '__lt__': <slot wrapper '__lt__' of 'list' objects>, 21 '__mul__': <slot wrapper '__mul__' of 'list' objects>, 22 '__ne__': <slot wrapper '__ne__' of 'list' objects>, 23 '__new__': <built-in method __new__ of type object at 0x000000005BAFF530>, 24 '__repr__': <slot wrapper '__repr__' of 'list' objects>, 25 '__reversed__': <method '__reversed__' of 'list' objects>, 26 '__rmul__': <slot wrapper '__rmul__' of 'list' objects>, 27 '__setitem__': <slot wrapper '__setitem__' of 'list' objects>, 28 '__sizeof__': <method '__sizeof__' of 'list' objects>, 29 'append': <method 'append' of 'list' objects>, 30 'clear': <method 'clear' of 'list' objects>, 31 'copy': <method 'copy' of 'list' objects>, 32 'count': <method 'count' of 'list' objects>, 33 'extend': <method 'extend' of 'list' objects>, 34 'index': <method 'index' of 'list' objects>, 35 'insert': <method 'insert' of 'list' objects>, 36 'pop': <method 'pop' of 'list' objects>, 37 'remove': <method 'remove' of 'list' objects>, 38 'reverse': <method 'reverse' of 'list' objects>, 39 'sort': <method 'sort' of 'list' objects>}
我們發現我們list中所能用到的方法append,clear,copy,count,extend,index,insert等方法都是類list的對象方法,而前面添加了雙下劃線的__的方法都是類的“私有方法”,這類方法很多是在我們使用通用的操作setatter,getatter時python為我們自動連接並調用的方法。而對於自定義的類想改變這些自動的功能只需要重寫這部分函數即可。通過方括弧[]取值,分片取值等操作就是__getitem__在起作用
1 >>> getattr(list,'append',None) 2 <method 'append' of 'list' objects>
python中的類,模塊,變數本質上將可以歸結為記憶體中的功能化的地址塊(指針)
這些是腳本語言的通用方式,弱語言的本質不是不對值做類型檢查和限定,而是他們在設計上為了便捷使用,而將這部分類型轉換和類型判斷通過隱形轉換和記憶體指針在我們背後默默做了大量工作。正是因為所有的所有在底層指針化,我們可以通過=符號能夠進行賦值、函數引用(複製指針地址),創建對象(複製創建的對象地址)等等。所以,要想瞭解python內部的記憶體回收和底層功能需要對指針,記憶體有著足夠的理解。