1. 程式人生 > >python入門筆記(一)

python入門筆記(一)

1、概述

最近在學tensorflow,使用的是python語言,因為我會的語言比較多,所以,在沒有學習python的情況下也能看得懂,並且也能寫一些示例和爬蟲程式碼。但是,總感覺,在繼續學下去之前,有必要先花幾天系統的學一下python。雖然程式語言是相通的,但是,每個語言都有自己的特色,磨刀不誤砍柴工。

2、python資料型別

python主要內建物件型別如下表所示,

物件型別

例子

數字

1233.123+2jDecimalFraction 

字串

‘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的加減乘除運算就不說了,這裡跟其他語言不一樣的是雙星號(**),它表示乘方。例如,計算28次方可以這樣表達,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.1if語句

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.2whilefor迴圈

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

>>>