python入門筆記(一)
1、概述
最近在學tensorflow,使用的是python語言,因為我會的語言比較多,所以,在沒有學習python的情況下也能看得懂,並且也能寫一些示例和爬蟲程式碼。但是,總感覺,在繼續學下去之前,有必要先花幾天系統的學一下python。雖然程式語言是相通的,但是,每個語言都有自己的特色,磨刀不誤砍柴工。
2、python資料型別
python主要內建物件型別如下表所示,
物件型別 | 例子 |
數字 | 123,3.12,3+2j,Decimal,Fraction |
字串 | ‘wei’,“fang’s”,b’a\xolc’ |
列表 | [1, [2, ‘weifang’], 4] |
字典 | {‘key1’:’value’, ‘key2’:’value2’} |
元組 | (1, ‘fang’, ‘wei’, 2) |
檔案 | fd = open(‘wf.txt’, ‘r’) |
集合 | set(‘abc’),{‘a’, ‘b’, ‘c’} |
其他型別 | None、布林型 |
程式設計單元型別 | 函式、模組、類 |
下面,就一一學習這些型別。
2.1、數字
python的加減乘除運算就不說了,這裡跟其他語言不一樣的是雙星號(**),它表示乘方。例如,計算2的8次方可以這樣表達,2**8,執行結果如下,
>>> 2**8
256
>>>
如果需要使用一些常用的數學模組,則可以匯入math工具包,如下,
>>> import math
>>> math.pi
3.141592653589793
>>> math.sqrt(81)
9.0
>>>
或者使用random模組來生成隨機數,如下,
>>> import random
>>> random.random()
0.05280198929624913
>>> random.choice([1, 109, 'wei','fang'])
'fang'
>>>
2.2、字串
字串,沒什麼好說的,不過,python有個特有的運算是,字串*n,(其中,n是數字),得到的結果是n個重複的字串。有點繞口,上程式碼比較容易理解,
>>> 'weifang'*3
'weifangweifangweifang'
>>>
字串其實可以理解為一串單字元的序列,還是擼程式碼吧,
>>> a = 'wei'
>>> len(a)
3
>>> a[0]
'w'
>>> a[2]
'i'
>>>
大部分語言的序列索引都是從0開始,我就遇到過一個語言的索引是從1開始的,是什麼語言我也忘了。
python還能反向索引,從最後一個開始,
>>> a[-1]
'i'
>>> a[-2]
'e'
>>>
當然,索引是萬萬不能超出序列範圍的,下面的程式碼就會出錯,
>>> a[-5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>>
python序列還能支援分片操作,如下,
>>> a = 'weifang'
>>> a[2:5]
'ifa'
>>> a = 'weifang'
>>> a[3:7]
'fang'
>>> a[3:]
'fang'
>>> a[:2]
'we'
>>> a[:-1]
'weifan'
>>> a[:]
'weifang'
>>>
字串提供find函式,用於查詢子字串的操作,它返回子字串的偏移量,如果找不到,則返回-1,
>>> a = 'weifang'
>>> a.find('fang')
3
>>> a.find('fg')
-1
>>>
還可以用replace函式對子字串進行檢索和替換,
>>> a = 'weifang'
>>> a.replace('fang', 'hehe')
'weihehe'
>>>
split函式通過分隔符將字串拆分,
>>> a = 'aa,12,bb,99'
>>> a.split(',')
['aa', '12', 'bb', '99']
>>>
字串還有格式化操作,
>>> '%s fang kk %s'%('wei', 123)
'wei fang kk 123'
>>> '{0} fang kk {1}'.format('wei', 123)
'wei fang kk 123'
>>>
python還有很多關於字串的操作的函式,我們就不一一舉例了。
python還提供了dir函式,它返回一個列表,包含了物件的所有屬性。假設我們想了解字串有哪些屬性,用法如下,
>>> a = '213'
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>>
linux想查某個函式的用法可以用man命令,python也有類似的函式-----help函式。例如,我們想查replace函式的用法,
>>> help(a.replace)
Help on built-in function replace:
replace(...)
S.replace(old, new[, count]) -> string
Return a copy of string S with all occurrences of substring
old replaced by new. If the optional argument count is
given, only the first count occurrences are replaced.
2.3、列表
python的列表沒有固定型別(一個列表可以同時包含字串、整數等)的約束,也沒有固定大小。
>>> a = [123,'abc',1.2]
>>> a[1]
'abc'
>>> a[:]
[123, 'abc', 1.2]
>>> a[:-1]
[123, 'abc']
>>> a + ['wei','fang']
[123, 'abc', 1.2, 'wei', 'fang']
>>> a.append('wei')
>>> a
[123, 'abc', 1.2, 'wei']
>>> a.pop(2)
1.2
>>> a
[123, 'abc', 'wei']
>>>
還可以對列表進行排序和翻轉,
>>> a = ['8','2','6']
>>> a.sort()
>>> a
['2', '6', '8']
>>> a.reverse()
>>> a
['8', '6', '2']
>>>
2.4、字典
字典用大括號括起來,裡面包含一系列“鍵:值”對,例如,
>>> a = {'animal':'dog','color':'blue','qty':3}
>>> a['color']
'blue'
>>> a['qty'] -= 1
>>> a
{'color': 'blue', 'animal': 'dog', 'qty': 2}
>>> list(a.keys())
['color', 'animal', 'qty']
>>>
遍歷字典,
>>> for key in list(a.keys()):
... print(a[key])
...
blue
dog
2
>>>
2.5、元組
元組(tuple),是一個不可改變的列表。元組是序列,但是具有不可變性,用圓括號括起來。
>>> a = (1,'a',1.2)
>>> a
(1, 'a', 1.2)
>>> len(a)
3
>>> a + ('b',123)
(1, 'a', 1.2, 'b', 123)
>>> a[2]
1.2
>>>
2.6、檔案
直接上程式碼吧,
>>> fd = open('test.txt', 'w')
>>> fd.write('wei fang!')
>>> fd.close()
>>> fd = open('test.txt', 'r')
>>> text = fd.read()
>>> text
'wei fang!'
>>> fd.close()
>>>
2.7、類
python的類也是用class關鍵字定義,程式碼如下,
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def getName(self):
return self.name
def getScore(self):
return self.score
stuA = Student('wei fang', 60)
stuB = Student('mo mo', 100)
print(stuA.getName())
print(stuA.getScore())
print(stuB.getName())
print(stuB.getScore())
執行結果,
$ python demo1.py
wei fang
60
mo mo
100
2.8、集合
集合(set)是一些唯一的、不可變的物件的無序集合,一個項在集合中只能出現一次,不管將它新增多少次。如下,
>>> a = set('abcdefgabcdefg')
>>> a
set(['a', 'c', 'b', 'e', 'd', 'g', 'f'])
>>>
>>> b = set('ab123456')
>>> '6' in b
True
>>>
集合還支援一般的數學集合運算,
>>> a = set('abcdefg')
>>> b = set('ab123456')
>>> a - b
set(['c', 'e', 'd', 'g', 'f'])
>>> a | b
set(['a', 'c', 'b', 'e', 'd', 'g', 'f', '1', '3', '2', '5', '4', '6'])
>>> a & b
set(['a', 'b'])
>>> a ^ b
set(['c', 'e', 'd', 'g', 'f', '1', '3', '2', '5', '4', '6'])
>>>
3、語句和語法
最討厭學語法了,沒勁,但是,繼續吧。
3.1、if語句
a = 1
b = 2
if a > b:
print('a > b')
elif a < b:
print('a < b')
else:
print('a == b')
執行結果:
$ python demo1.py
a < b
c語言、java等語言,條件判斷中,都是以”&&”表示“與”,“||”表示“或”,“!”表示“取反”,python則用“and”、“or”和”not”,
a = 1
b = 2
if a == 1 and b ==1:
print('a')
elif a == 0 or b == 2:
print('b')
else:
print('c')
a = 0
if not a:
print('not a')
執行結果,
$ python demo1.py
b
not a
3.2、while和for迴圈
python的while和else可以組合使用,
a = 1
b = 4
while b > a:
print('%d ' % b),
b -= 1
else:
print('heihei')
執行結果:
4 3 2 heihei
else只有在while迴圈正常退出時才會執行,下面的程式碼就不會執行else,
a = 1
b = 4
while True:
if a > b:
break;
print('%d ' % b),
b -= 1
else:
print('heihei')
執行結果,
$ python demo1.py
4 3 2 1
python迴圈中,還有continue語句,跟其他語言的continue用法一樣。還有pass語句,就是一個空佔位而已,什麼都不做。
接下來講for迴圈,
>>> for x in ['1',2,3,'abc']:
... print(x)
...
1
2
3
abc
>>>
>>> a = 'weifang'
>>> for x in a:
... print(x)
...
w
e
i
f
a
n
g
>>>
很神奇吧?字串也可以直接這樣for迴圈,因為我們前面說過,字串也是序列。
獲取下標的程式碼如下,
>>> for index,val in enumerate(['1',2,3,'abc']):
... print('index:%s val:%s'%(index,val))
...
index:0 val:1
index:1 val:2
index:2 val:3
index:3 val:abc
>>>
或者,
>>> a=['1',2,3,'abc']
>>> for index in range(len(a)):
... print('index:%s val:%s'%(index,a[index]))
...
index:0 val:1
index:1 val:2
index:2 val:3
index:3 val:abc
>>>
如果要實現像c語言中的
for(i = 4;i<9;i+=2)
怎麼辦?還是用range函式,
>>> for i in range(4,9,2):
... print(i)
...
4
6
8
>>>
for也可以跟else組合使用,用法跟while/else類似,
>>> for i in range(4,9,2):
... print(i)
... else:
... print('heiheihei')
...
4
6
8
heiheihei
>>>