python基礎(chǔ)之?dāng)?shù)據(jù)類型和變量
一边灭、整數(shù)
Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù)健盒,在程序中的表示方法和數(shù)學(xué)上的寫法一模一樣存筏,例如:1,100味榛,-8080,0予跌,等等搏色。
二、浮點數(shù)
浮點數(shù)也就是小數(shù)券册,之所以稱為浮點數(shù)频轿,是因為按照科學(xué)記數(shù)法表示時,一個浮點數(shù)的小數(shù)點位置是可變的烁焙,比如航邢,1.23x109和12.3x108是相等的。浮點數(shù)可以用數(shù)學(xué)寫法骄蝇,如1.23膳殷,3.14,-9.01九火,等等赚窃。但是對于很大或很小的浮點數(shù),就必須用科學(xué)計數(shù)法表示岔激,把10用e替代勒极,1.23x109就是1.23e9,或者12.3e8虑鼎,0.000012可以寫成1.2e-5辱匿,等等。
整數(shù)和浮點數(shù)在計算機內(nèi)部存儲的方式是不同的炫彩,整數(shù)運算永遠是精確的(除法難道也是精確的匾七?是的!)江兢,而浮點數(shù)運算則可能會有四舍五入的誤差乐尊。
三、字符串
字符串是以單引號''
或雙引號""
括起來的任意文本划址,比如'abc'扔嵌,"xyz"等等限府。
'''...'''
三引號可以用來顯示多行字符串內(nèi)容,如:
>>> print '''line1
... line2
... line3'''
line1
line2
line3
如涉及到中文字符痢缎,盡量在字符串前面加u胁勺,如u'張三'
%s表示用字符串替換,%d表示用整數(shù)替換独旷,有幾個%?占位符署穗,后面就跟幾個變量或者值,順序要對應(yīng)好嵌洼。
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
format()
另一種格式化字符串的方法是使用字符串的format()
方法案疲,它會用傳入的參數(shù)依次替換字符串內(nèi)的占位符{0}
、{1}
……麻养,不過這種方式寫起來比%要麻煩得多:
'Hello, {0}, 成績提升了 {1:.1f}%'.format('小明', 17.125)
字符串拼接直接對兩字符串相加即可
>>> 'hello' + ' world!'
'hello world!'
注意:
由于Python源代碼也是一個文本文件褐啡,所以,當(dāng)你的源代碼中包含中文的時候鳖昌,在保存源代碼時备畦,就需要務(wù)必指定保存為UTF-8編碼。當(dāng)Python解釋器讀取源代碼時许昨,為了讓它按UTF-8編碼讀取懂盐,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
四、布爾值
布爾值只有True
糕档、False
兩種值莉恼。
五、空值
空值是Python里一個特殊的值速那,用None
表示类垫。None
不能理解為0
,因為0
是有意義的琅坡,而None
是一個特殊的空值
六悉患、操作符
算術(shù)運算符: +(加), -(減), *(乘), /(除), %(求余),
**
(指數(shù)運算)比較運算符: == , != , > , >= , < , <=
賦值運算符: =, += , -= , *= , /= , %= , **= , //=
邏輯運算符: and , or , not
成員運算符: in , not in
身份運算符: is / is not
七、變量
變量在程序中就是用一個變量名表示了榆俺,變量名必須是大小寫英文售躁、數(shù)字和_
的組合,且不能用數(shù)字開頭茴晋。
如:
a = 1
變量a
是一個整數(shù)陪捷。
t_007 = 'T007'
變量t_007
是一個字符串。
Answer = True
變量Answer
是一個布爾值True
诺擅。
這種變量本身類型不固定的語言稱之為動態(tài)語言市袖,與之對應(yīng)的是靜態(tài)語言。靜態(tài)語言在定義變量時必須指定變量類型,如果賦值的時候類型不匹配苍碟,就會報錯酒觅。例如Java是靜態(tài)語言,賦值語句如下(// 表示注釋):
int a = 123; // a是整數(shù)類型變量
a = "ABC"; // 錯誤:不能把字符串賦給整型變量
和靜態(tài)語言相比微峰,動態(tài)語言更靈活舷丹,就是這個原因。
也可以把一個變量a
賦值給另一個變量b
蜓肆,這個操作實際上是把變量b
指向變量a
所指向的數(shù)據(jù)颜凯,例如下面的代碼:
a = 'ABC'
b = a
a = 'XYZ'
print b
最后打印的b即是:'ABC'
常量
所謂常量就是不能變的變量,比如常用的數(shù)學(xué)常數(shù)π就是一個常量仗扬。在Python中症概,通常用全部大寫的變量名表示常量:
PI = 3.14159265359
但事實上PI
仍然是一個變量,Python根本沒有任何機制保證PI
不會被改變早芭,所以彼城,用全部大寫的變量名表示常量只是一個習(xí)慣上的用法,如果你一定要改變變量PI
的值逼友,也沒人能攔住你。
在計算機內(nèi)部秤涩,可以把任何數(shù)據(jù)都看成一個“對象”帜乞,而變量就是在程序中用來指向這些數(shù)據(jù)對象的,對變量賦值就是把數(shù)據(jù)和變量給關(guān)聯(lián)起來筐眷。
八黎烈、List和tuple
List
這就是Java或C中的數(shù)組.它是一個容器,能用來順序的,以整數(shù)索引方式檢索, 存儲一組對象. List 用 [] 來表示,如 [1, 2, 3] 就是一個List;而 Tuple 用 () 來表示,如 (3, 4, 5) 就是一個 Tuple .
它們的區(qū)別在于List是可變的匀谣;而Tuple是不可變的.也就是說不可以增,刪和改.
索引方式除了與Java一樣的以一個整數(shù)下標(biāo)方式外,還可以指定開始,結(jié)束和步長,和使用負(fù)索引來分割List:
通用語法格式是: list[start: end: step]
list[index] --- 返回第(index+1)個元素,下標(biāo)從0開始
list[start:end] --- 返回從start開始,到end-1,也就是list[start], list[start+1].....list[end-1]
list[start:end:step] --- 與上面類似,只不過每隔step取一個
list[:end] ---- 缺省的開端是0
list[start:] ---- 缺省的結(jié)尾是len(list),或者-1
負(fù)數(shù)索引更是方便,它與正數(shù)的對應(yīng)關(guān)系為:
正數(shù)索引 0 1 2 3
數(shù)組元素 [1] [3] [5] [7]
負(fù)數(shù)索引 -4 -3 -2 -1
實例:
>>> a = [1, 3, 5, 7];
>>> a[0]
1
>>> a[3]
7
>>> a[-1]
7
>>> a[-2]
5
>>> a[0:3]
[1, 3, 5]
>>> a[1:3:2]
[3]
>>> a[0:3:2]
[1, 5]
>>> a[0:-1:2]
[1, 5]
>>>
list增刪查改:
//list是一個可變的有序表照棋,所以,可以往list中追加元素到末尾:
list.append('Adam')
//也可以把元素插入到指定的位置武翎,比如索引號為1的位置:
list.insert(1, 'Jack')
//要刪除list末尾的元素烈炭,用pop()方法:
list.pop()
//要刪除指定位置的元素,用pop(i)方法宝恶,其中i是索引位置:
list.pop(i)
list里面的元素的數(shù)據(jù)類型也可以不同
list里面也可以包含list
list的遍歷:
for item in sequence:
process(item)
#如果要取到某個item的位置符隙,可以這樣寫:
for index in range(len(sequence)):
process(sequence[index])
for index,item in enumerate(sequence):
print index,item
tuple
tuple和list非常類似,但是tuple一旦初始化就不能修改垫毙,比如同樣是列出同學(xué)的名字:
classmates = ('Michael', 'Bob', 'Tracy')
現(xiàn)在霹疫,classmates這個tuple不能變了,它也沒有append()综芥,insert()這樣的方法丽蝎。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0]膀藐,classmates[-1]屠阻,但不能賦值成另外的元素红省。
tuple里面的元素如果是一個可變對象,那么這個對象的子屬性是可以被改變的栏笆,對象本身的索引是不可改變的类腮。
如tuple里面包含一個listA,我們可以往listA里面append蛉加,insert蚜枢,但是你不能對listA賦值,不能刪掉listA针饥。
九厂抽、dict和set
dict
dict全稱dictionary,在其他語言中也稱為map丁眼,使用鍵-值(key-value)存儲筷凤,具有極快的查找速度。
例:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
>>> d['Michael'] = 90
>>> d['Michael']
90
- 多次對一個key放入value苞七,后面的值會把前面的值沖掉
- 如果key不存在藐守,dict就會報錯
要避免key不存在的錯誤,有兩種辦法蹂风,一是通過in判斷key是否存在:
>>> 'Thomas' in d
False
二是通過dict提供的get方法卢厂,如果key不存在,可以返回None惠啄,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
- pop(key) 刪除并返回該條目值(鍵值對)
- del d[key] 也可以刪除指定元素
遍歷dict
# 方法一
for key in d:
n = d[key]
# 方法二:最慢
for k,v in d.items():
n = v
# 方法三: 最快慎恒,推薦方法
for k,v in d.iteritems():
n = v
# 方法四
for k,v in zip(d.iterkeys(),d.itervalues()):
n = v
set
set和dict類似,也是一組key的集合撵渡,但不存儲value融柬。由于key不能重復(fù),所以趋距,在set中粒氧,沒有重復(fù)的key。
要創(chuàng)建一個set节腐,需要提供一個list作為輸入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
重復(fù)元素在set中自動被過濾:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
通過add(key)方法可以添加元素到set中靠欢,可以重復(fù)添加,但不會有效果
>>> 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可以看成數(shù)學(xué)意義上的無序和無重復(fù)元素的集合铜跑,因此门怪,兩個set可以做數(shù)學(xué)意義上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
十锅纺、分支語句
格式為:
if expression:
blocks;
elif expression2:
blocks;
else:
blocks;
十一掷空、循環(huán)
for循環(huán)
格式:
for x in list:
break;
# 取出下標(biāo)和值
for index,value in enumerate(A):
print index
例:
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
//或者
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
print(x)
while循環(huán)
格式:
while expression:
blocks