CPython: 安裝Python後,官方提供了一個Python解釋器CPython,是通過C語言寫的,在命令行下運行Python就是啟動Cpython解釋器,運用最廣泛的一個。 Ipython: 基於Cpython之上的一個解釋器,跟Cpython差不多,只不過在互動式上有所增強; Jpython ...
- Python的解釋器種類:
- CPython:
安裝Python後,官方提供了一個Python解釋器CPython,是通過C語言寫的,在命令行下運行Python就是啟動Cpython解釋器,運用最廣泛的一個。
- Ipython:
基於Cpython之上的一個解釋器,跟Cpython差不多,只不過在互動式上有所增強;
- Jpython:
用Java語言寫的一個python解釋器,可以直接將python編譯成Java位元組碼運行;
- PyPy:
它的目標是使python代碼執行速度快,使用JIT技術實現的,對python動態編譯,
- ironPython
運行在微軟的.net平臺上
2.Pythong變數:
Python 中的變數不需要聲明。每個變數在使用前都必須賦值,變數賦值以後該變數才會被創建。
Python中的,全部大寫的變數名代表常量
3.python數據類型:
- 布爾值: (ture|false)
- 數字:
整型(int):
在32位機器上,整數的位數為32位,即:-2**31~~2**31-1,即:-2147483648——2147483647
在64位機器上,整數的位數為64位,即:-2**63~~2**63-1,即:-2147483648——2147483647
長整型(long):
python中沒有指定位寬,理論上可以無限大,但受限於記憶體;但是到python3中沒有long了,全部都是正型了。
- 浮點型(float):
是有理數的一個特定子集的集合,Python中精度預設只能是17位精度,所有的語言都是這樣的,跟浮點數的存儲結構有關係
Python中的工具箱,有個decimal模塊,getcontext(),其中prec定義的是精度,預設是28,改之可以調。
1 >>>from decimal import getcontext 2 >>> from decimal import Decimal 3 >>>getcontext() 4 Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero, Overflow, InvalidOperation]) 5 >>> b = Decimal(1)/Decimal(3) 6 >>> b 7 Decimal('0.3333333333333333333333333333') ///28個精度值 8 >>> getcontext().prec = 50 9 >>> b = Decimal(1)/Decimal(3) 10 >>> b 11 Decimal('0.33333333333333333333333333333333333333333333333333') ////50個精度值。decimal模塊--擴大浮點數精度
- 字元串
在python中,加了引號的字元都被認為字元串,多行用多引號(''' '''),註意字元串的拼接只能是雙方都是字元串,不能跨數據類型;
- 列表
列表是數據的集合,可以存任何數據,可以增刪改查:
>>> name = [] >>> name [] >>> name = list() >>> name [] ////定義空列表的兩個方法; >>> name = ['ming','long','mng','ting','jun','fei','xiang','fei','alex'] //創建列表 >>> name[0] 'ming' >>> name[3] 'ting' >>> name[4] 'jun' ////以上是查詢列表裡的值,其中0、3、4是列表裡數據的索引,從0開始; >>> name.index('ming') 0 >>> name.index('fei') 5 ////查詢列表裡的數據位於列表哪個索引位置; >>> name.count('ming') 1 >>> name.count('fei') 2 ////count() 是查詢列表裡某個數據重覆了多少次; >>> name.append('xiangmin') >>> name ['ming', 'long', 'mng', 'ting', 'jun', 'fei', 'xiang', 'fei', 'alex', 'xiangmin'] ////append()在列表最後邊附加數據; >>> name.insert(0,'qing') >>> name ['qing', 'ming', 'long', 'mng', 'ting', 'jun', 'fei', 'xiang', 'fei', 'alex', 'xiangmin'] >>> name.insert(-1,'wu') >>> name ['qing', 'ming', 'long', 'mng', 'ting', 'jun', 'fei', 'xiang', 'fei', 'alex', 'wu', 'xiangmin'] ////insert()向索引的前面添加值 >>> name.pop(0) 'qing' >>> name ['ming', 'long', 'mng', 'ting', 'jun', 'fei', 'xiang', 'fei', 'alex', 'wu', 'xiangmin'] ////pop() 刪除指定索引處的數據 >>> name.remove('tong') >>> name ['ming', 'mng', 'ting', 'jun', 'fei', 'xiang', 'fei', 'alex', 'wu', 'xiangmin'] /////reomve()刪除指定的數據; >>> name ['mng', 'ting', 'tong', 'wu', 'wu', 'xiang', 'xiangmin', ['JOHN', 'JAckson', 'a'], 'kun', 'fei', 'fei', 'alex'] >>> del name[2] >>> name ['mng', 'ting', 'wu', 'wu', 'xiang', 'xiangmin', ['JOHN', 'JAckson', 'a'], 'kun', 'fei', 'fei', 'alex'] >>> del name >>> name Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'name' is not defined ////del是全局刪的,可以刪列表裡的值,也可以刪列表; >>> name ['alex', 'fei', 'fei', 'kun', ['JOHN', 'JAckson'], 'mng', 'ting', 'tong', 'wu', 'wu', 'xiang', 'xiangmin'] >>> name.reverse() >>> name ['xiangmin', 'xiang', 'wu', 'wu', 'tong', 'ting', 'mng', ['JOHN', 'JAckson'], 'kun', 'fei', 'fei', 'alex'] ////reverse() 反轉,sort()排序; >>> name ['ming', 'ting', 'wu', 'wu', 'xiang', 'xiangmin', ['JOHN', 'JAckson'], 'kun', 'fei', 'fei', 'alex'] >>> name2 = name.copy() >>> name2 ['ming', 'ting', 'wu', 'wu', 'xiang', 'xiangmin', ['JOHN', 'JAckson'], 'kun', 'fei', 'fei', 'alex'] ////copy() 拷貝列表內容 >>> name[0] = 'hong' >>> name[6][0] = 'john' >>> name ['hong', 'ting', 'wu', 'wu', 'xiang', 'xiangmin', ['john', 'JAckson'], 'kun', 'fei', 'fei', 'alex'] >>> name2 ['ming', 'ting', 'wu', 'wu', 'xiang', 'xiangmin', ['john', 'JAckson'], 'kun', 'fei', 'fei', 'alex'] ////我們會奇怪發現,name2是name1的複製品,當name的索引為0處和嵌套的列表都有變化,為何name2的嵌套列表也會變化呢??不應該都不變嗎?這是因為copy()只是淺淺copy,它只copy列表第一層的數據,至於嵌套的列表它複製的不是數據,是嵌套列表的記憶體地址空間,或者是一個記憶體指針;所以,當name嵌套列表數據變化時,name2里的找的是這個嵌套列表記憶體空間的值,所以name2的值也會發生變化。