一、python是什么樣的語言
? ? ?1、編譯型語言和解釋型語言,python是解釋型語言
? ? ? ? ??1.1、編譯型語言就是把源程序代碼一次性翻譯成機器碼(計算機可識別的代碼),然后交給計算機去運行,一般需經過編譯(compile)、鏈接(linker)這兩個步驟。編譯是把源代碼編譯成機器碼,鏈接是把各個模塊的機器碼和依賴庫串連起來生成可 ? ? ? ? ? ? ? ? ? ? 執行文件。
? ? ? ? ? ? ? ?優點:編譯器一般會有預編譯的過程對代碼進行優化。?因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程序執行效率高?。可以脫離語言環境獨立運行。
? ? ? ? ? ? ? ? 缺點:編譯之后如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件。
? ? ? ? ? ? ? ? ? ? ?代表語言:C、C++、?Pascal、Object-C以及swift等
? ? ? ? ? ? ? ? ? ? ?
?
? ? ? ? ? ? 1.2、解釋型語言就是在程序執行到某個指令的時候在翻譯這段代碼,等于是一直在做翻譯代碼、執行代碼、翻譯代碼、執行代碼,直到代碼結束
? ? ? ? ? ? ? ? ? ?優點:有良好的平臺兼容性,在任何環境中都可以運行,前提是安裝了解釋器(虛擬機)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。
? ? ? ? ? ? ? ? ? ?缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。
? ? ? ? ? ? ? ? ? ?代表語言:JavaScript、Python、Erlang、PHP、Perl、Ruby等
? ? ??? ? ? ?1.3、混合型語言
? ? ? ? ? ? ? ? ? ? 混合語言就是綜合以上兩種的有點,先源代碼翻譯成字節碼文件(可以看成是中間碼,介于源碼和機器碼之間),然后交給虛擬機(如java的jvm),直接可以把編譯好的字節碼文件放在各個平臺上去運行,而不需要去改動,每個平臺 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(windows、linux、unix等)都有已經寫好的虛擬機,每個平臺的虛擬機會自動翻譯成對應平臺的機器碼文件,可以達到一次編譯,多次運行的目的
? ? ? ? ? ? ? ? ? ? 代表語言:Java等
? ? ? ? ? ? ? ? ? ??
?
? ? ? 2、靜態語言和動態語言
? ? ? ? ? ? ?2.1、靜態語言
? ? ? ? ? ? ? ? ? ? 靜態語言就是在編譯之前必須要確定語言的類型,多數靜態語言在聲明時必須寫變量類型
? ? ? ? ? ? ?2.2、動態語言
? ? ? ? ? ? ? ? ? ? 動態語言通常是在運行時才確定語言的類型,多數動態語言是不需要聲明類型的,變量的類型通常是賦值的值的類型,如:var = 'a',var就是字符型
? ? ? 3、強類型語言和弱類型語言
? ? ? ? ? ? ?3.1、強類型語言
? ? ? ? ? ? ? ? ? ? 強類型語言不能隨著環境改變而改變,只有同類型的才可以操作,需要使用函數或方法進行強制轉換類型,python就是強類型語言,如:a = 1 b = '2',str(a)+b或a+int(b)才可以進行操作,否則就會報錯必須要強制轉換一下
? ? ? ? ? ? ?3.2、弱類型語言
? ? ? ? ? ? ? ? ? ? 弱類型語言是可以隨時進行操作的,而不需要強制轉換類型后在進行操作,vbs就是弱類型語言,如:a = 1,b = '2',a+b,計算結果是12,a + 1,計算結果是2
? ? ? 4、python語言的優缺點
? ? ? ? ? ? ?4.1、python語言的優點
? ? ? ? ? ? ? ? ? ? 4.1.1、python語言被定位為“優雅”、“明確”、“簡單”,python入門很容易
? ? ? ? ? ? ? ? ? ? 4.1.2、開發效率高,python會提供非常多的三方類庫,也可以對基礎類庫進行二次開發,達到自己想要的效果 ? ? ? ? ? ? ? ? ? ? ? ? 4.1.3、python被稱為膠水語言,會很容易和其他語言結合,調用其他語言已經寫好的代碼,或是直接嵌入到其他語言中
? ? ? ? ? ? ? ? ? ? 4.1.3、python擁有較好的可移植性(不同平臺)和可擴展性
? ? ? ? ? ? 4.2、python語言的缺點
? ? ? ? ? ? ? ? ? ? 4.2.1、python語言運行速度慢,比c語言要慢很多,比java也要慢一些,但是一般感覺不出來,需要借助工具才能看到
? ? ? ? ? ? ? ? ? ? 4.2.2、python不支持多cpu處理,就是說多核cpu也起不到作用,同一時間只有一個線程在運行
? ? ? ? ? ? ? ? ? ? 4.2.3、python由于是解釋性語言,所以代碼不能加密
二、變量部分
? ? ? 變量概念:變量主要是提供為了其他代碼以后調用數據而存儲數據使用的
1、變量規則
1.1、變量由數字、字母下劃線組成,不能以數字開頭
? ? ? ? ? ?1.2、如果變量是有多個單詞組成的,使用駝峰式,如:myFristVar,就是從第二個單詞開始首字符是大寫,其余字母小寫;
? ? ? ? ? ?1.3、也可以是用全部都是首字母大寫,如:MyFristVar
? ? ? ? ? ?1.4、或是使用下劃線分隔,如:my_frist_var
? ? ? ? ? ?1.5、如果所有字符都是大寫,則代表是常量,不過這只是開發人員的規范,多個單詞用下劃線分隔,并不是python的規則,也是可以改變的,其他有的語言中有的可以用關鍵字明確聲明,如:c語言中的const
? ? ? ? ? ?1.6、有一些單詞是被python作為關鍵字占用了,有and, as, assert, break, class, continue, def, del, elif, else, ?except, exec, finally, for, from, global, if,import,in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield
? ? ? ? ? ?1.7、擴展
? ? ? ? ? ? ? ? ? ?1.7.1、實例變量用單下劃線開頭,其他和普通變量一樣,如:_myvar,類變量(就是上面1.3中的全部大寫的變量)是指一個類的變量,通常為靜態變量(類似于java的static),而實例變量通常是動態的類變量,和實例變量的區別在于:類變量是所有對象共有,其中一個對象將它值改變,其他對象得到的就是改變后的結果;而實例變量則屬對象私有,某一個對象將其值改變,不影響其他對象。類變量是公共變量
? ? ? ? ? ? ? ? ? ?
#!/usr/bin/env python class Test(object): num_of_instance = 0 # 類變量def __init__(self, name): self.name = name # 實例變量 Test.num_of_instance += 1 if __name__ == '__main__': print Test.num_of_instance # 此時是0t1 = Test('jack') # 調用了一次__init__,此時是1print Test.num_of_instance t2 = Test('lucy') # 再調用了一次,此時是2print t1.name , t1.num_of_instance print t2.name , t2.num_of_instance
?
? ? ? ? ? ? ? ? ? ?1.7.2、私有實例變量以雙下劃線開頭,其他和普通變量一樣,外部訪問會報錯,如__myvar
? ? ? ? ? ? ? ? ? ?1.7.3、專有變量,以雙下劃線開頭,以雙下劃線結尾,是python的自有變量,不要使用這種變量,如__myvar__
? ? ? 2、數據類型
? ? ? ? ? ? ?2.1、數字類型
? ? ? ? ? ? ? ? ? ?2.1.1、整型(int):在32為的機器上顯示的數值范圍是-231~231-1,即-2147483648~2147483647,就是32位二進制數能表示的范圍,在64位機器上顯示的數值是-263~263-1,即-9223372036854775808~9223372036854775807,就是32位二進制數能表示的范圍,可以使用int函數進行轉換,如:a='1',int(a),也可以int(a, base=10),這里的base雖然是轉為十進制,但是前提是a是10進制數,比如int('0b1010', base=2),0b開頭的是二進制數,這樣才可以轉換成二進制數,整型在內存中產生是通過int類,比如a=15,是a=15--->調用int類int(10)--->調用int類下的__init__方法
? ? ? ? ? ? ? ? ? ?2.1.2、長整型(long):c語言中的長整型有位寬限制,而python沒有位寬限制,但是由于內存的原因,數值不能無限放大,從2.2版本起,如果發生溢出,將自動轉換為長整型,不加L也沒有關系
? ? ? ? ? ? ? ? ? ?2.1.3、浮點型(float):主要是用來處理實數的,就是有小數點的數,在python中占64位,實數是有限小數和無限循環小數的集合(不包括無限不循環小數)
? ? ? ? ? ? ? ? ? ?2.1.4、復數(complex):是由實數和虛數組成的,虛數就是一些不是實際存在的數,虛數的單位是i,規定i2=-1
? ? ? ? ? ? 2.2、布爾型
? ? ? ? ? ? ? ? ? ?布爾型只有兩個值,就是真和假,0和1,0是假,1是真,在python中返回true為真,false為假,內置函數為bool()
? ? ? ? ? ? 2.3、字符串
? ? ? ? ? ? ? ? ? ?2.3.1、字符串用單引號或雙引號,這兩種方式沒有任何區別,使用時如果字符串中有單引號,則需要使用雙引號括起字符串,反之亦然,也可以用三引號來擴起來多行字符串,打印是也按照多行來打印
? ? ? ? ? ? ? ? ? ?2.3.2、字符串的拼接可以使用加號或是格式化方式,建議使用格式化方式,如果使用加號美每加一次,就會在內存中多開辟一塊空間,格式化中%s是字符串,%d是整數%f是浮點型
? ? ? ? ? ? ? ? ? ?2.3.3、字符串常用的方法有移除空白(strip)、分割(split)、長度(len)、索引(index)、切片
? ? ? ? ? ? 2.4、列表
? ? ? ? ? ? ? ? ? ?2.4.1、創建列表,一下兩種都可以創建列表
l = ['a1','b2','c3','d4'] l = list(['a1','b2','c3','d4'])
? ? ? ? ? ? ? ? ? ? 2.4.2、索引,l.index('b2'),返回b2所在的位置
? ? ? ? ? ? ? ? ? ? 2.4.3、切片,l[1:3],返回['b2','c3'],如果只寫開始位置,比如l[3:],就是從3的位置返回到最后,只寫結束,就是從開頭返回到結束的位置,都不寫,返回整個列表,負數是從有到左數,如l[0:-2],返回['a1','b2'],也可以加步長,比如只輸出偶數的索引所對應的值,l[0:3:2],2就是步長
? ? ? ? ? ? ? ? ? ? 2.4.4、追加,使用l.append(value),可追加到列表的最后
? ? ? ? ? ? ? ? ? ? 2.4.5、插入,使用l.insert(索引,字符串),索引指的是要插入的位置,插入位置的原字符串及之后的位置全都加1
? ? ? ? ? ? ? ? ? ? 2.4.6、刪除,可以使用del l[索引],可以使用l.remove[字符串],也可以使用l.pop()可以刪除最后一個值,并返回該值
? ? ? ? ? ? ? ? ? ? 2.4.7、查找字符串,l.index[要查找的字符串,開始位置,結束位置],開始位置和結束位置不是必填,意思就是比如列表中有10個值,要查找a1這個字符串,開始位置是3,結束位置是8,就是在3到8的位置內查找a1,其他位置有a1也不會查找,如果列表中有重復的字符串,則顯示第一個查找到的位置
? ? ? ? ? ? ? ? ? ? 2.4.8、統計字符串在一個列表中的個數,l.count()
? ? ? ? ? ? ? ? ? ? 2.4.9、排序,l.sort(),按照字符集中的順序進行排序
? ? ? ? ? ? ? ? ? ? 2.4.10、反轉,l.reverse()
? ? ? ? ? ? ? ? ? ? 2.4.11、清空,l.clear()
? ? ? ? ? ? ? ? ? ? 2.4.12、拷貝,l.copy()
? ? ? 2.5元組、
? ? ? 2.6字典、
三、字符集
? ? ? 1、二進制和ascll的由來
? ? ? ? ? ?計算機只識別二進制數據,就是0和1,只有一位時只能表示0和1,所以要使用更多位數表示,規定8個二進制位是一個字節(共可以表示256種字符),最開始字符集合是ascll碼,ascll碼分為兩部分,由于計算機是美國人發明的,所以他們在計算機中一共定義了128個字符,就是ascll的前半張表,后半張表是空的,留給其他國家使用
? ? ? 2、中文字符集的演變
? ? ? ? ? ?剩下的128個字符空間根本不夠漢字的使用,之后用了一個辦法,就是如果讀到了一個字節是表示漢字的(并不是實際存儲漢字,只是一個空間),就把這個空間映射出一張表,這張表才是存儲的真正的漢字,這樣就可以用很少的空間來表示很多的字符,而這個首先產生的就是GB2312和表示繁體中的big5,GB2312一共收錄了7445個字符,包括6763個漢字和682個其它符號,之后又完善了字符集,出現了GBK,收錄了21886個符號,它分為漢字區和圖形符號區,漢字區包括21003個字符,最后出現了GB18030,收錄了27484個漢字
? ? ? 3、萬國碼
? ? ? ? ? ?很多國家都是用的自己的字符集,這樣對于程序的移植性不是很好,就需要把這些字符全部收集起來,組成了萬國碼,就是unicode,但是unicode太占用存儲空間,因為ascll只要1個字節,就是8個二進制位就是可以存儲,而unicode最少的字符都需要2個字節,所以有的國家就不同意了,然后就演變成了UTF-16,雖然比unicode要節省一些空間,但還是有國家不滿意,最后演變成了UTF-8,所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存
? ? ? 4、python2和python所使用的字符集
? ? ? ? ? ?python2默認的是使用ascll碼,使用中文時需要指定字符集,而python3默認的編碼是UTF-8,在使用中文的可以直接使用,不用去指定字符集
四、注釋
? ? ?1、單行注釋可以使用#號寫在要注釋的行開頭
? ? ?2、多行注釋可以使用三引號來注釋,其實就是上面提到過的字符串多行的表示,只是沒有賦給變量而已,在pycharm中選中要注釋的行,使用ctrl+/也可以進行多行注釋,就是在每一行前面加上#號
五、運算符
? ? 2、比較運算:
? ? 3、賦值運算:
? ? ?4、邏輯運算:
? ? 5、成員運算:
? ? 6、身份運算:
? ? 7、位運算:
a?
=
?60
? ? ? ? ?60 = 0011 1100
b?
=
?13
?????????13 = 0000 1101
? ? ? ? ? 7.1、按位與運算就是兩個數的二進制的同一位都為1時則為1,比如149(10010101)和201(11001001),運算后就是129(10000001)
? ? ? ? ? 7.2、按位或運算就是兩個數的二進制的同一位有一位為1就是1
? ? ? ? ? 7.3、按位異或運算,兩個數的二進制的同一位均為0或1則結果中該位為0,不一致則為1
? ? ? ? ? 7.4、按位取反運算,是針對一個數的運算,有符號采用補碼形式,是針對一個數的運算,即把該數的二進制形式,是0的位為1,是1的位為0,就是正數加1取反,負數是補碼形式(就是非符號位取反)
? ? ? ? ? 7.5、左移動運算符,每一個二進制位都向左移動,右面補0
? ? ? ? ? 7.6、右移動運算符,每一個二進制位都向右移動