天天看點

python讀書筆記

1.常用函數

abs(x) 傳回指定值的絕對值

bytes(string,encoding[,errors]) 對指定字元串進行編碼,并以指定的方式處理錯誤

pow(a,b) a的b次方

pow(x,y[,z]) 傳回x的y次方對z求模的結果

round(x) 将浮點數圓整為與之最接近的整數

round(number[,ndigits]) 四舍五入為指定的精度,正好為5時舍入到偶數

float(x) 将字元串或數字轉換為浮點數

help([object]) 提供互動式幫助

input(x) 以字元串的方式擷取使用者輸入

import math

math.floor(x) 以浮點數的方式傳回向下圓整的結果

math.ceil(x) 以浮點數的方式傳回向上圓整的結果

math.sqrt(x) 求給定數的平方根,可用于複負數

通過使用指令import 的變種 from moudle import function,可在調用函數時不指定子產品字首

nan具有特殊含義,指的是非數值(not a number)

注釋: # xxx

字元串拼接 +

str(obj):将指定的值轉換為字元串。用于轉換bytes時,可指定編碼和錯誤處理方式

repr(obj):傳回指定值的字元串表示

長字元串('''xxx'''):若要表示很長的字元串需要用三引号

(正常字元串也可以跨多行,在行尾加上反斜杠即可)

原始字元串:字首前加 r 即可

2、清單和元組

  不同之處:清單可以修改元組不可以

  兩種主要的容器:序列、映射、集合(set)

  序列:清單和元組

  映射:字典

  淺談序列:索引、切片、相加、相乘、成員資格審查

  1.索引:序列中所有元素都有編号從0開始,使用負索引時将從右往左數(-1 是最右邊元素)

  2.切片:用切片通路特定範圍内的元素。為此,可使用兩個索引,并用冒号分隔開

    第一個索引是包含的第一個元素的編号,第二個索引是切片後餘下的第一個元素的編号

    第一個索引指定的元素包含在切片内,但第二個索引指定的元素不包含在切片内

  3.簡寫:

    若切片作用于序列末尾,可省略第二個索引;若切片始于序列開頭可省略第一個索引

    若複制整個序列可将兩個索引都省略

  4.步長:執行切片操作時可以顯式或隐式的指定起點和終點,但通常省略另一個參數:步長。在普通切片中步長為1,也可顯式指定步長。注:步長不能為0,但可為負數,即從右向左提取元素

  5.序列相加:相加序列為同類型,不同類型會報錯。

  6.乘法:将序列和x相乘時,降重複序列x次來建立一個新序列

  7.成員資格:運算符 in 檢查是否滿足指定的條件并傳回相應的值:滿足時傳回True,不滿足傳回false。(布爾運算

  清單:可變、可修改其内容

  基本操作:

  函數liss("xxx") 可将任何序列作為list的參數

    形式:listname = [x,x,x,x]

  删除元素:del listname[lindex]

  給切片指派:

  清單方法:

  形式:object.method(arguments)

    追加:lst.append(x)

    清空:lst.clear()

    複制清單:lst1 = lst2

    指定元素出現的次數:lst.count(x) :x 在lst中出現的次數

    将多個值附加到清單表尾:lst.extend(b) : 将清單 b 擴充到清單 lst 中

    查找指定值第一次出現的索引:lst.index(x)

    插入:lst.insert(index,x) : 将x插入到清單 index 的位置

    從清單中删除一個元素(末尾為最後一個元素),并傳回這一進制素:lst.pop()

    用于删除第一個為指定值的元素:lst.remove("x")

    按相反的順序排列清單中的元素:lst.reverse()

    對清單就地排序:lst.sort()

    進階排序:方法sort接受兩個可選的參數:key和reverse

  元組(不可修改的序列):

  元組文法簡單,将一些值用逗号分隔開,就能自動建立一個元組

  元組可以用括号括起來(這是通常的做法)

  包含一個值的元組,特殊點:即使為一個值,也必須在它後面加上逗号

3、字元串:

基本操作:

所有标準序列操作(索引、切片、乘法、成員資格審查、長度、最小值和最大值)都适用于字元串,但是字元串是不可變的,是以所有元素指派和切片指派都是非法的的

設定格式:

format = "hello ,%s.%s enough for ya?"
values = ('world','Hot')
print(format % values)
輸出:
hello ,world.Hot enough for ya?      

%s 為轉換說明符,指出了要将值插入到那個地方

s 意味着将值視為字元串對待

%.3f 将值的格式設定為包含3位小數的浮點數

模闆字元串如下:

from string import Template
tmpl = Template("Hello,$who! $what enough for ya?")
print(tmpl.substitute(who = "Mars",what = "Dusty"))
輸出:
Hello,Mars! Dusty enough for ya?      

字元串方法format:使用這種方法時,每個替換字段都用花括号括起來,其中可能包含名稱,還有可能包含有關如何對相應的值進行轉換和格式設定的資訊

print("{},{} and {}".format("first","second","third"))
輸出:
first,second and third

print("{0},{1} and {2}".format("first","second","third"))
輸出:
first,second and third

print("{3},{0} {2} {1} {3} {0}".format("be","not","or","to"))
輸出:
to,be or not to be

from math import pi
print("{name} is approximately {value:.2f}".format(value = pi,name = "pi"))
輸出:
pi is approximately 3.14      

寬度、精度和千位分隔符:

寬度是使用整數指定的:

print("{num:10}".format(num = 3))
輸出:
         3      

精度也是使用整數指定的,但需要在它前面加上一個表示小數點的句點

from math import pi
print("Pi day is {pi:.2f}".format(pi = pi))
print("Pi day is {pi:10.2f}".format(pi = pi))
輸出:
Pi day is 3.14
Pi day is       3.14      

可使用逗号來指出要添加的千位分隔符:

print("one google is {:,}".format(10**100))
輸出:
one google is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000      

符号、對齊和用 0 填充

在指定寬度和精度的數面前,可添加一個标志。這個标志可以是 0、加号、減号或空格,其中 0 表示使用 0 來填充數字

from math import pi
print("{:010.2f}".format(pi))
#要指定左對齊、右對齊和中對齊,可分别使用 < > ^
print("{0:10.2f}\n{0:^10.2f}\n{0:>10.2f}".format(pi))
輸出:
0000003.14
3.14
3.14
3.14      

可以使用填充字元來擴充對齊說明符,這樣将使用指定的字元而不是預設的空格來填充

print("{:$^15}".format("WIN BIG"))
輸出:
$$$$WIN BIG$$$$      

還有更具體的說明符 = ,它指定将填充字元放在符号和數字之間

from math import pi
print("{0:10.2f}\n{1:10.2f}".format(pi,-pi))
print("{0:10.2f}\n{1:=10.2f}".format(pi,-pi))
輸出:
3.14
-3.14
3.14
- 3.14      

字元串方法:

center

方法center通過在兩邊添加填充字元(預設為空格)讓字元串居中

print("Hello,world".center(15))
print("Hello,world".center(15,'*'))
輸出:
Hello,world
**Hello,world**
#附:ljust、rjust和zfill      

find

此方法在字元串中查找子串。成功傳回子串第一個索引,否則傳回-1
print("with a moo-moo here,and a moo-moo there".find('moo'))
title = "Monty python's flying circus"
print(title.find('Monty'))
print(title.find('flying'))
輸出:
7
0
15
#附:rfind、index、rindex、count、startswith、endswith
      

join

此方法用于合并序列的元素

seq = [1,2,3,4,5]
sep = '+'
print(seq.join(sep))
輸出:
Traceback (most recent call last):
  File "test3.py", line 31, in <module>
    print(seq.join(sep))
AttributeError: 'list' object has no attribute 'join'

sep = '+'
seq = ['1','2','3','4','5']
print(sep.join(seq))
輸出:
1+2+3+4+5

dirs = '','usr','bin','env'
print('/'.join(dirs))
輸出:
/usr/bin/env      

lower

此方法傳回字元串的小寫版本

print('Hello World'.lower())
輸出:
hello world

name = 'Gumby'
names = ['gumby','smith','jones']
if name.lower() in names:
    print('find it')
輸出:
find it      

replace

此方法将指定子串都替換為另一個字元串,并傳回替換後的結果

print("this is a test".replace('is','eez'))
輸出:
theez eez a test      

split

此方法将字元串拆分為序列
print('1+2+3+4+5'.split('+'))
print('/user/bin/enc'.split('/'))
print('using the default'.split())
輸出:
['1', '2', '3', '4', '5']
['', 'user', 'bin', 'enc']
['using', 'the', 'default']      

strip

此方法将字元串開頭和末尾的空白删除,并傳回删除後的結果

print(' internal whitespace is kept '.strip())
names = ['hehe','haha','lala']
name = 'hehe'
if name in names:
print('Find it!')
輸出:
internal whitespace is kept
Find it!
#删除指定字元:
print('*** SPAM * FOR * EVERYONE!!!***'.strip(' *!'))
輸出:
SPAM * FOR * EVERYONE
      

translate

此方法和replace一樣替換字元串的特定部分,但不同的是它隻能替換單個字元,其優勢在于能夠同時替換多個字元,效率高于replace。要使用 translate 前必須建立一個轉換表。這個轉換表指出了不同的 Unicode 碼點之間的轉換關系,可對字元串類型 str 調用方法 maketrans,這個方法接受兩個參數:兩個長度相同的字元串,它們指定要将第一個字元串中的每個字元替換為第二個字元中的每個字元。

4、字典:

{key:value,key:value,key:value, '''''',key,value}

函數 dict 可從其他映射(如其他字典)或鍵——值對序列建立字典

d = dict(name = 'ljk',age = 18)
print(d)
輸出:
{'name': 'ljk', 'age': 18}      

字典的基本功能

len(d) :傳回字典 d 中鍵值對的個數

d[k] :傳回與鍵 k 相關聯的值

d[k] = v:将值 v 關聯到鍵 k

del d[k]:删除鍵為 k 的項

k in d :檢查字典d是否包含鍵為 k 的項

鍵的類型:字典中的鍵可以是整數,但并非必須是整數。字典中的鍵可以是任何不可變的類型,如浮點數(實數)、字元串、元組

成員資格: k in d (d是一個字典)查找的是鍵不是值,而 v in l (l是一個清單)查找的是值而不是索引

# 字典簡單程式
people = {
    'Alice':{
    'phone':'1234',
    'addr':'Foo Drive 01'
    },
    'Benth':{
    'phone':'5678',
    'addr':'Bar street 01'
    },
    'Cecil':{
    'phone':'9101112',
    'addr':'Bar avenue 01'
    }
}

labels = {
    'phone':'phone number',
    'addr':'address'
}

name = input('Name:')

request = input('Phone Number(p) or address (a)?')
if request == 'p':
    key = 'phone'
if request == 'a':
    key = 'addr'

if name in people:
    print("{}'s {} is {}.".format(name,labels[key],people[name][key]))
輸出:
Name:Alice
Phone Number(p) or address (a)?a
Alice's address is Foo Drive 01.      

字典方法:(未完待續......)

clear()    :删除所有的字典項

copy()    :傳回一個新字典,其包含的鍵——值與原來的字典相同(此處為淺複制),可使用deepcopy進行深複制

fromkeys()  :建立一個新字典,其中包含指定的鍵,且每個鍵對應的值都是 None

get()      :該方法為通路字典項提供了寬松的環境。如果試圖通路字典中沒有的項将引發錯誤,使用get通路不存在的鍵,沒有發生異常而是傳回None,也可指定預設值。

items()  :傳回一個所有字典項的清單,每個元素都以(key,value)的形式,字典中項的順序不确定

keys()   :傳回字典的視圖,其中包含指定字典中的鍵

pop()    :此方法用于擷取與指定鍵相關聯的值,并将該鍵——值對從字典中删除

popitem()      :該方法随機的彈出一個字典項,因為字典項的順序是不确定的

setdefault()   :此方法與get有點像,它也擷取指定建相關聯的值,除此之外,它還在字典中不包含指定的鍵時,在字典中添加指定的鍵——值對。

update()   :使用一個字典項更新另一個字典項

values()   :傳回由一個字典中的值組成的字典視圖