一、Python介紹
Python的創始人是吉多?范羅蘇姆。1989年圣誕節期間為打發時間決心開發一個新的解釋程序,作為ABC語言的一種繼承。
Python的應用廣泛及重要性不再多說,總之,人生苦短,我用Python!
Python是什么語言呢?
編程語言主要從以下幾個角度進行分類,編譯型和解釋型,靜態語言和動態語言,強類型語言和弱類型語言。
編譯型VS解釋型
編譯型
優點:編譯器一般會有預編譯的過程對代碼進行優化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程序執行效率高。可以脫離語言環境獨立運行。
缺點:編譯之后如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據不同的操作系統環境編譯不同的可執行文件。
解釋型
優點:有良好的平臺兼容性,在任何環境中都可以運行,前提是安裝了解釋器(虛擬機)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。
動態語言和靜態語言
通常我們說的動態語言、靜態語言是指動態類型語言和靜態類型語言。
動態類型語言:動態類型語言是指運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時在內部將數據類型記錄下來。Python就是典型的動態類型語言。
靜態類型語言:靜態類型語言與動態類型語言剛好相反,他的數據類型實在編譯期間檢查的,也就是說在寫程序時要聲明所以變量的數據類型,C/C++是靜態語言的典型代表。
強類型定義語言和弱類型定義語言
強類型定義語言:強制數據類型定義的語言,也就是說,一旦一個變量被指定了某個數據類型,如果不經過強制轉換,那么它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變量a,那么程序根本不可能將a當做字符串處理,強類型定義語言是類型安全的語言。
弱類型定義語言:數據類型可以被忽略的語言,他與強類型定義語言相反,一個變量可以賦不同數據類類型的值。
強類型語言在速度上可能略遜于弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。
通過上邊的知識我們可以知道,Python是一門動態解釋性的強類型定義語言。
Python的優缺點
優點:
1、Python的定位就是“優雅”、“明確”、“簡單”。
2、三方庫強大,開發效率高。
3、高級語言——無需考慮諸如如何管理你的程序使用的內存一類底層細節
4、可移植性
5、可擴展性——如需要某段關鍵代碼運行更快或不公開,可把部分程序用C或C++編寫,在Python程序中使用。
6、可嵌入性。
缺點
1、速度慢
2、代碼不能加密
3、線程不能利用多CPU。GIL即全局解釋器鎖,是計算機程序設計語言解釋器用于同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是操作系統的原生線程。
注:開發工具使用PyCharm
二、輸入輸出
Python中輸出使用'print()',在括號中可以寫入想要輸出的內容
print('Helllo , world')
Python中input()
函數可以讓用戶輸入并存放到一個變量里
>>> name = input()
Michael
>>> name
'Michael'
注:
Python2.x中raw_input相當于Python3.x中的input
Python2.x中不要用input
那什么是變量?
三、變量
聲明變量
name = "LZ"
上述代碼聲明了一個變量,變量名為:name ,變量name的值為:“LZ”
變量定義的規則:
?變量名只能是字母、數字、下劃線的任意組合
?變量名的第一個字符不能為數字
?以下關鍵字不能聲明為變量名
['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’]
另:變量名應可能有含義,如,name、age
如果單詞較多可用下劃線,如:name_of_dog
變量賦值
a = "ABC"
b = a
a = "XYZ"
print(b)
執行a=‘ABC’,解釋器創建了字符串’ABC’和變量a,并把a指向’ABC’:
執行b=a,解釋器創建了變量b,并把b指向a指向的字符串’ABC’:
執行’a=‘XYZ’’,解釋器創建例如字符串’XYZ’,并把a的指向改為’XYZ’,但b并沒有更改:
所以打印b變量是abc。
空值
空值是Python中一個特殊的值,用None
表示。None
不能理解為0,因為0是有意義的而None
是一個特殊的空值。
代碼注釋
當行注釋用:#
多行注釋用:’’’ ’’’
編碼問題
Python2.x中如果有中文需要在文件開頭
# -*- coding: utf-8 -*-
Python3.x中默認引入,所以直接就可表示中文
四、數據類型初識
數字
int(整型)
在32位機器上,整數的位數為32位,取值范圍為-231~231-1,即-2147483648~2147483647
在64位系統上,整數的位數為64位,取值范圍為-263~263-1,即-9223372036854775808~9223372036854775807
long(長整型)
跟C語言不同,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由于機器內存有限,我們使用的長整數數值不可能無限大。
注意,自從Python2.2起,如果整數發生溢出,Python會自動將整數數據轉換為長整數,所以如今在長整數數據后面不加字母L也不會導致嚴重后果了。
float(浮點型)
浮點數用來處理實數,即帶有小數的數字。類似于C語言中的double類型,占8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(復數)
復數由實數部分和虛數部分組成,一般形式為x+yj,其中的x是復數的實數部分,y是復數的虛數部分,這里的x和y都是實數。
注:Python中存在小數字池:-5 ~ 257
布爾值
一個布爾值只有True、False兩種值,要么是True,要么是False。在Python中可以直接用True、False表示布爾值(注意大小寫),也可以通過布爾運算and 、or、和not 計算出來。
布爾運算在計算機中用來做條件判斷,根據計算結果為True或False,計算機可以自動執行不同的后續代碼。
a = True
print a and 'a=T' or 'a=F’
輸出結果是字符串’a=T’。
解釋:Python把0、空字符串和None看成False,去他數值和非空字符串都看成True。
and 和 or 運算的一條重要法則:短路計算
- 在計算 a and b 時,如果 a 是 False,則根據與運算法則,整個結果必定為 False,因此返回 a;如果 a 是 True,則整個計算結果必定取決與 b,因此返回 b。
- 在計算 a or b 時,如果 a 是 True,則根據或運算法則,整個計算結果必定為 True,因此返回 a;如果 a 是 False,則整個計算結果必定取決于 b,因此返回 b。
字符串
字符串可以用單引號''或雙引號”"括起來表示。如果字符串中含有 ‘ ,比如 I’m OK.我們用雙引號括起來表示。類似的,如果字符串中有雙引號,我們就用單引號括起來表示。
如果字符串中既包含雙引號又包含單引號,就需要對字符串的某些字符進行“轉義”,Python字符串用 \ 進行轉義。
要表示字符串 Bob said "I'm OK”.
由于 ' 和 " 會引起歧義,因此,我們在它前面插入一個 \ 表示這是一個普通字符,不代表字符串的起始,因此,這個字符串又可以表示為 'Bob said "I'm OK\”.'
計算字符串的字符數用len()
函數
注意:轉義字符 \ 不計入字符串的內容中。
常用轉義符:\n換行 \t 制表符 \表示 \ 字符本身
PS: 字符串是 %s;整數 %d;浮點數%f
列表
Python內置的一種數據類型是列表list,list是一種有序的結合,可以隨時添加和刪除其中元素。
構造list很簡單,直接用[ ]把list的所有元素都括起來就是一個list對象。
由于Python是動態語言,所以list中包含的元素并不要求都必須是同一數據類型。
L = ['Michael', 100, True]
一個元素都沒有的list就是空list。empty_list = []
用len()
函數可以獲得list元素的個數。
用索引來訪問list中每一個位置的元素,索引是從0開始的。
>>> L[0]
'Michael'
>>> L[1]
100
索引可以使用負數,例如可以用L(-1)
來獲得最后一個元素。
當索引超出范圍時Python會報一個IndexError的錯誤。
list是一個可變的有序表,所以可以往list中追加元素到末尾:
>>> L.append('Adam')
>>> L
['Michael', 100, True, 'Adam']
刪除末尾的元素:
>>> L.pop('Adam')
>>> L
['Michael', 100, True]
刪除指定位置的元素:
>>> L.pop(1)
100
>>> L
['Michael', True]
替換某個元素:
>>> L(1)='haha'
>>> L
['Michael', 'haha']
list中元素也可以是list
s = ['python', 'java', ['asp', 'php'], 'scheme']
想獲得'asp'可以用s[2][0]
獲得。
元組
tuple是另一種有序列表,中文翻譯為元組。tuple和list非常相似,但是tuple一旦創建完畢就不能修改了。
創建tuple和和創建list唯一不同之處就是用( )代替[ ].
tuple和list一樣可以包含0個、1個和任意多個元素。
包含0個元素的tuple就是空tuple,t=()。
創建一個元素的tuple時,因為小括號既可以表示tuple又可以作為括號表示運算的優先級所以t=(1)被Python解釋器計算結果是1而不是tuple。所以Python規定,單元素tuple要多加一個逗號這樣就避免了歧義:t=(1,)
元組中的元素如果是列表,列表中元素是可變的。
字典
d={
'LZ':95,
'SY':86,
'HB':90
}
用花括號{}表示一個字典,冒號之前叫key,之后叫value.
字典是一個無序的集合。
可以根據key查找相應的value
>>>d['LZ']
95
如果key不存在就會報錯,可以通過in
判斷是否存在
>>>'haha' in d
False
還可以通過dict提供的get方法,如果key不存在可以返回None或自己指定value
>>> d.get('haha')
>>> d.get('haha', 100)
100
刪除一個key用pop(key)
,對應的value也會刪除
>>> d.pop('haha')
100
>>> d
{ 'LZ':95, 'SY':86,'HB':90}
注:key不能為可變對象
set
set和dict類似,也是一組key的集合,但不存儲value。由于key不能重復,所以,在set中,沒有重復的key。
要創建一個set,需要提供一個list作為輸入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
重復元素在set中自動被過濾:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
通過add(key)
方法可以添加元素到set中,可以重復添加,但不會有效果:
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
通過remove(key)
方法可以刪除元素:
>>> s.remove(4)
>>> s
{1, 2, 3}
set可以看成數學意義上的無序和無重復元素的集合,因此,兩個set可以做數學意義上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
set和dict的唯一區別僅在于沒有存儲對應的value,但是,set的原理和dict一樣,所以,同樣不可以放入可變對象。
格式化
name=input("name=")
age=input("age=")
job=input("job=")
info='''
--------info of %s--------
name:%s
age:%s
job:%s
'''%(name,name,age,job)
# print(info)
info2='''
---------info of {_name} ---------
name:{_name}
age:{_age}
job:{_job}
'''.format(
_name=name,
_age=age,
_job=job
)
# print(info2)
info3='''
---------info of {0}--------
name:{0}
age:{1}
job:{2}
'''.format(name,age,job)
print(info3)
%
運算符就是用來格式化字符串的,在字符串內部有幾個%s
后邊就對應幾個變量或值,順序要對應好。
常用的占位符:%d ---整數 %f---浮點數 %s---字符串 %x---十六進制整數
五、數據運算
算數運算
比較運算
邏輯運算
賦值運算
成員運算
身份運算
位運算
六、判斷表達式 if ···elif···else···
#給定一個年齡
#讓用戶輸入一個年齡,與給定的進行判斷
ge_of_mine=15
guess_age= int (input("guess_age="))
if guess_age==age_of_mine:
print("yes,you got it")
elif guess_age>age_of_mine:
print("think smaller")
else:
print("think older")
七、循環
for循環
#簡單的循環輸出
for i in range(10):
print (i)
#從1開始,隔一個數打印一個,10以內
for i in range(1,10,2):
print(i)
While循環
count = 0
while True:
print(count)
count +=1
continue:跳出當前本次循環,進行下一次循環
break:直接跳出整個循環
八、循環及條件判斷綜合運用
#猜年齡,最多猜三次
age_of_mine=15
for i in range(3):
guess_age = int(input("guess_age="))
if guess_age == age_of_mine:
print("yes,you got it")
break
elif guess_age > age_of_mine:
print("think smaller")
else:
print("think older")
else:
print("you have tried too many times...fuck off")