二、簡介
適用於:
1、網絡應用,包括網站、後臺服務等等;
2、日常需要的小工具;
3、把其他語言開發的程序再包裝起來。
優點:
開源免費、強大的基礎代碼庫、簡單。
缺點:
1、運行速度慢。
2、代碼不能加密。
三、數據類型:
1
,100
,-8080
,0
,等等。
計算機由於使用二進制,所以,有時候用十六進制表示整數比較方便,十六進制用0x
前綴和0-9,a-f表示,例如:0xff00
,0xa5b4c3d2
,等等。
浮點數也就是小數,之所以稱爲浮點數,是因爲按照科學記數法表示時,一個浮點數的小數點位置是可變的,比如,1.23x109和12.3x108是相等的。浮點數可以用數學寫法,如1.23
,3.14
,-9.01
,等等。但是對於很大或很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23x109就是1.23e9
,或者12.3e8
,0.000012可以寫成1.2e-5
,等等。
整數和浮點數在計算機內部存儲的方式是不同的,整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四捨五入的誤差。
r''
表示''
內部的字符串默認不轉義。\n
寫在一行裏不好閱讀,爲了簡化,Python允許用'''...'''
的格式表示多行內容。u'...'
表示。
兩種字符串如何相互轉換?字符串'xxx'
雖然是ASCII編碼,但也可以看成是UTF-8編碼,而u'xxx'
則只能是Unicode編碼。
把u'xxx'
轉換爲UTF-8編碼的'xxx'
用encode('utf-8')
方法:
>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
\xe4
就是其中一個字節,因爲它的值是228
,沒有對應的字母可以顯示,所以以十六進制顯示字節的數值。len()
函數可以返回字符串的長度:>>> len(u'ABC')
3
>>> len('ABC')
3
>>> len(u'中文')
2
>>> len('\xe4\xb8\xad\xe6\x96\x87')
6
反過來,把UTF-8編碼表示的字符串'xxx'
轉換爲Unicode字符串u'xxx'
用decode('utf-8')
方法:
>>> 'abc'.decode('utf-8')
u'abc'
>>> '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
u'\u4e2d\u6587'
>>> print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
中文
由於Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存爲UTF-8編碼。當Python解釋器讀取源代碼時,爲了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
第一行註釋是爲了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個註釋;
第二行註釋是爲了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。
%
實現,舉例如下:>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%
運算符就是用來格式化字符串的。在字符串內部,%s
表示用字符串替換,%d
表示用整數替換,有幾個%?
佔位符,後面就跟幾個變量或者值,順序要對應好。如果只有一個%?
,括號可以省略。
常見的佔位符有:
%d | 整數 |
%f | 浮點數 |
%s | 字符串 |
%x | 十六進制整數 |
其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數:
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'
如果你不太確定應該用什麼,%s
永遠起作用,它會把任何數據類型轉換爲字符串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
對於Unicode字符串,用法完全一樣,但最好確保替換的字符串也是Unicode字符串:
>>> u'Hi, %s' % u'Michael'
u'Hi, Michael'
有些時候,字符串裏面的%
是一個普通字符怎麼辦?這個時候就需要轉義,用%%
來表示一個%
:
>>> 'growth rate: %d %%' % 7
True
、False
兩種值,要麼是True
,要麼是False
,在Python中,可以直接用True
、False
表示布爾值(請注意大小寫)。and(&)
、or(|)
和not
運算。
空值是Python裏一個特殊的值,用None
表示。None
不能理解爲0
,因爲0
是有意義的,而None
是一個特殊的空值。
6、列表(list)
類似java的數組,可以使用len獲取長度,使用pop方法刪除元素,使用insert插入元素,使用append添加元素:
>>> array = ['a', 'b', 'c']
>>> array
['a', 'b', 'c']
>>> len(array)
3
>>> array.append('d')
>>> array
['a', 'b', 'c', 'd']
>>> array.pop()
'd'
>>> array
['a', 'b', 'c']
>>> array[-1]
'c'
>>> array[-3]
'a'
>>> array.insert(1,'d')
>>> array
['a', 'd', 'b', 'c']
>>> array.append(['e', 'f'])
>>> array
['a', 'd', 'b', 'c', ['e', 'f']]
>>> array[4][1]
'f'
>>>
>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
>>> t = ('a', 'b', 'c')
>>> t[0]
'a'
>>> t[0] = 'd'
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
t[0] = 'd'
TypeError: 'tuple' object does not support item assignment
>>> t = ('a', 'b', 'c', ['d', 'e'])
>>> t
('a', 'b', 'c', ['d', 'e'])
>>> t[3][1] = 'f'
>>> t
('a', 'b', 'c', ['d', 'f'])
>>>
8、字典
8、字符編碼:
如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不划算。
所以,本着節約的精神,又出現了把Unicode編碼轉化爲“可變長編碼”的UTF-8
編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間:
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
A | 01000001 | 00000000 01000001 | 01000001 |
中 | x | 01001110 00101101 | 11100100 10111000 10101101 |
從上面的表格還可以發現,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續工作。
搞清楚了ASCII、Unicode和UTF-8的關係,我們就可以總結一下現在計算機系統通用的字符編碼工作方式:
在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換爲UTF-8編碼。
用記事本編輯的時候,從文件讀取的UTF-8字符被轉換爲Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換爲UTF-8保存到文件:
瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器:
所以你看到很多網頁的源碼上會有類似<meta
charset="UTF-8" />
的信息,表示該網頁正是用的UTF-8編碼。
四、變量
動態語言,變量類型不固定。
var = 123
print ('var =', var)
var = 'abc'
print ('var =', var)
五、常量
通常全部大寫表示常量,實際上也是一個變量。例如:PI = 3.14
六、條件語句
if 條件:
處理語句
elif 條件:
處理語句
else
處理語句
elif是else if的縮寫,用於進行分支條件判斷,例如:
#~ 條件判斷語句
# 將輸入的字符串轉爲int
a = int(input('please enter a number :'));
if a > 0:
print ('a > 0')
elif a < 0:
print ('a < 0')
else :
print ('a = 0')
七、循環語句
for 變量 in 循環對象:
處理語句
#~ 循環語句
# for in循環
arr = ['a', 'b', 'c']
for v in arr:
print (v)
# 求1 + 2 + 3 + ... + 100
sum = 0
for v in range(101):
sum += v
print ('sum = ', sum)
while 條件:
處理語句
# while循環
n = 100
sum = 0
while True:
if n == 0:
break
sum += n
n = n - 1
print ('sum = ', sum)
八、dict:
>>> map = {'a' : 1, "b" : 2}
>>> map
{'a': 1, 'b': 2}
>>> map["b"]
2
>>> map["c"] = 3
>>> map
{'a': 1, 'c': 3, 'b': 2}
>>> map["d"] = 4
>>> map
{'a': 1, 'c': 3, 'd': 4, 'b': 2}
>>>
>>> "a" in map
True
>>> map.get("a")
1
>>> map.get("e")
>>> map["e"]
Traceback (most recent call last):
File "<pyshell#102>", line 1, in <module>
map["e"]
KeyError: 'e'
>>>
>>> map.get("e") == None
True
>>> map.get("e") == ""
False
dict中存放的key不能重複,且一個key只能有一個value與之對應,後賦的值會覆蓋前邊的值:
>>> map["e"] = 5
>>> map
{'a': 1, 'c': 3, 'd': 4, 'b': 2, 'e': 5}
>>> map["e"] = 6
>>> map
{'a': 1, 'c': 3, 'd': 4, 'b': 2, 'e': 6}
>>>
九、set:
>>> list = [1, 2, 3]
>>> s = set(list)
>>> s
{1, 2, 3}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.remove(2)
>>> s
{1, 3, 4}
>>> s1 = set(1,2,3)
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
s1 = set(1,2,3)
TypeError: set expected at most 1 arguments, got 3
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 - s2
{1}
>>> s2 - s1
{4}
>>> s1 | s2
{1, 2, 3, 4}
>>> s1 ^ s2
{1, 4}
>>>