python學習筆記(一),python學習筆記(
一. 第一個小程式:
python文法比較簡單,採用縮排的方式,如下所示:
a = 100if a >= 0: print aelse: print -a
使用#進行注釋,其他的每一行都是一個語句,當語句以冒號“:”結尾時,縮排的語句視為代碼塊。
按照約定俗成,一般使用Tab鍵縮排,或按四個空格。
注意:python程式是大小寫敏感的。
二. 資料類型和變數
(1) 資料類型:
a. 整數:
python可以處理任意大小的整數
可以使用十六進位表示整數:0x首碼和0-9,a-f。如0xff00,0xa5b4c3d2
b. 浮點數:
浮點數就是小數,按照科學計數法表示時,一個浮點數的小數點位置是可變的。比如:1.23x109和12.3x108是相等的
對於很大或很小的浮點數,就需要用科學計數法表示,把10用e替代,1.23x109就是1.23e9或者12.3e8
c. 字串:
python中字串用單引號 ‘ ’ 或雙引號“ ” 括起來。
如果單引號 ’ 本身也是一個字元,那就可以用雙引號“ ” 括起來,如:print “I'm ok”
如果字串內部既包含單引號 ‘ 又包含雙引號“ ,那就用逸出字元 \ 來標識,如:print "I\'m \"ok\""
右斜杠 \ 可以轉義很多字元,比如 \n 表示換行, \t 表示定位字元,\\ 表示 \
如果字串裡面有很多字元都需要轉義,那就需要加很多 \ ,為了簡化,python還允許用r' '表示‘ ’內部的字串預設不轉義。如:print r'\\\t\\'
>>> print '\\\t\\'\ \>>> print r'\\\t\\'\\\t\\
如果字串內部有很多換行,用\n寫在一行裡不好閱讀,為了簡化,python允許用''' ''' 的格式表示多行內容,如:
print '''line1line2line3'''
d. 布爾值:
一個布爾值只有True、False兩種值,要麼是True,要麼是False,請注意大小寫
在Python中,可以直接用True、False表示布爾值
>>> 3 > 2True>>> 3 > 5False
布爾值可以用and、or、not運算
>>> True and TrueTrue>>> True and FalseFalse>>> False and FalseFalse>>> True or TrueTrue>>> True or FalseTrue>>> False or FalseFalse>>> not TrueFalse>>> not FalseTrue
e. 空值
空值是python裡一個特殊的值,用None表示。None不能理解為0,因為0時有意義的,而None是一個特殊的空值。
(2) 變數
變數名必須是字母、數字、和底線的組合,且不能以數字開頭。
可以把任意資料類型賦值給變數,同一個變數可以反覆賦值,而且可以是不同類型的變數,例如:
a = 123 # a是整數a = ‘ABC’ # a變為字串
這種變數本身類型不固定的語言成為動態語言,和JS很像,而Java是靜態語言,因為它在定義變數時必須指定變數類型,
如:int a = 123;
(3) 常量
所謂常量就是不能變得變數,在python中,通常常量全部大寫,這個和Java一樣
如 PI = 3.1415926,但事實上PI仍然是一個變數,Python根本沒有任何機制保證PI不會被改變。
三. 字串和編碼
1. 編碼
ASCII編碼:只有127個字母被編碼到電腦中,即大小寫英文字母、數字和一些符號,只使用一個位元組儲存。
Unicode編碼:把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了,一般用兩個位元組儲存一個字元。但是如果所有的語言都統一成Unicode
編碼,亂碼問題就此消失了,但是,如果我們寫的文本基本上都是英文的話,用Unicode編碼會比ASCII編碼多出一倍的儲存空間,在儲存和傳輸上就
不划算了。本著節約的精神,又出現了把Unicode編碼轉為可變長編碼的UTF-8編碼
由於python原始碼是一個文字檔,所以,當源碼中包含中文的時候,在儲存源碼時,需要指定儲存為utf-8編碼。當python解析器讀取原始碼時,
為了讓它按utf-8讀取,我們通常在檔案開頭寫上這兩行:
#!/usr/bin/env python# -*- coding: utf-8 -*-
第一行注釋是為了告訴linux系統,這是一個python可執行程式。
第二行注釋是為了告訴python解譯器,按照utf-8編碼讀取原始碼,否則,你在源碼中寫的中文輸出可能會有亂碼。
2. 格式化字串:
在python中,使用%來格式化字串,%s表示用字串替換,%d表示用整數替換,%f表示浮點數。有幾個%?預留位置,後面就跟幾個變數或者值,
順序要對應好。如果只有一個%?,括弧可以省略。
>>> 'Hello, %s' % 'world''Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)'Hi, Michael, you have $1000000.'有些時候,字串裡面的%是一個一般字元怎麼辦?這個時候就需要轉義,用%%來表示一個%
>>> 'growth rate: %d %%' % 7'growth rate: 7 %'
四. 使用list和tuple
(1) list
list是python中內建的一種有序集合,可以隨時添加和刪除其中的元素。
比如,列出班裡所有同學的名字,可以用一個list表示。變數classmates就是一個list
>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classmates['Michael', 'Bob', 'Tracy']
a. 擷取list元素個數:len(classmates)
b. 通過索引訪問list中每個位置的元素(從0開始): classmates[0]
如果要取最後一個元素,也可以用-1:classmates[-1],倒數第二個就是classmates[-2]
c. 往list中追加元素到末尾:classmates.append('jim')
d. 插入元素到指定位置:classmates.insert(1, 'tom')
e. 刪除list末尾的元素:classmates.pop()
f. 刪除指定位置的元素:classmates.pop(2)
g. 把某個元素替換成別的元素,可以直接賦值給對應索引位置:classmates[2] = 'jack'
list裡面可以嵌套另一個list,比如:
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']>>> len(s)4
我們可以把s看成一個二維數組,如果要拿到‘php’,可以寫s[2][1]
(2) tuple
tuple和list很相似,但是tuple一旦初始化就不能修改。所以tuple中沒有添加元素或刪除元素的方法。
>>> classmates = ('Michael', 'Bob', 'Tracy')
不可變的tuple有什麼用?
因為tuple不可變,所以代碼更安全,如果可能,能用tuple代替list就盡量用tuple吧。
使用tuple需要小心一點,以防掉入它的陷阱:
** 陷阱1:只有1個元素的tuple定義時必須加一個逗號,以消除歧義,因為括弧會讓解析器以為它是數學公式中的小括弧
>>> t = (1,)>>> t(1,)
** 陷阱2:tuple不可變,但是如果tuple裡面存了一個list的話,那這個list卻是可變的。
>>> t = ('a', 'b', ['A', 'B'])>>> t[2][0] = 'X'>>> t[2][1] = 'Y'>>> t('a', 'b', ['X', 'Y'])
五. 條件判斷和迴圈
(1) 條件判斷:
根據使用者年齡列印不同的內容:
age = 3if age >= 18: print 'adult'elif age >= 6: print 'teenager'else: print 'kid'
if 判斷條件可以簡寫,比如:
if x: print 'True'
只要x是非零數值、非Null 字元串、非空list就判斷為True,否則為False
(2) 迴圈
a. for迴圈
sum = 0for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + xprint sum
如果求1-100的整數之和,可以使用range()函數,它可以產生一個整數序列
b. while迴圈
求100以內奇數之和:
sum = 0n = 99while n > 0: sum = sum + n n = n - 2print sum
六. 使用dict和set
(1) dict
和java中的map一樣,使用key - value儲存
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}>>> d['Michael']95a. 存入一個值:d['Adam'] = 67
b. 一個key對應一個value,如果key不存在會報錯, 為了避免錯誤,有兩種方法判斷key是否存在
一是通過in判斷key是否存在:‘Tracy’ in d # 返回True
二是通過dict提供的get方法:d.get('jim') # 返回None
c. 刪除一個key: d.pop('Bob')
(2) set
set和java中的set也一樣,key不能重複,不儲存value
>>> s = set([1, 2, 3])>>> sset([1, 2, 3])
1. 添加元素到set中: s.add(4)
2. 從set中刪除元素:s.remove(4)
3. set可以做數學意義上的交集、並集操作
>>> s1 = set([1, 2, 3])>>> s2 = set([2, 3, 4])>>> s1 & s2set([2, 3])>>> s1 | s2set([1, 2, 3, 4])
原文請參考:廖雪峰