1. python的優(yōu)勢(shì)
- 首選是網(wǎng)絡(luò)應(yīng)用烂琴,包括網(wǎng)站弧械、后臺(tái)服務(wù)等等蓉媳;
- 其次是許多日常需要的小工具歹苦,包括系統(tǒng)管理員需要的腳本任務(wù)等等;
- 另外就是把其他語言開發(fā)的程序再包裝起來督怜,方便使用殴瘦。
2. 缺點(diǎn)
- 運(yùn)行速度相對(duì)慢
- 程序是明文,不能加密
3. 多行字符串'''...'''還可以在前面加上r使用
4. 邏輯運(yùn)算 and号杠、or蚪腋、not和空值None
python的整數(shù)和浮點(diǎn)數(shù)都沒有大小的限制
5. 字符編碼(注意:python2中字符串默認(rèn)不是unicode,與設(shè)置的編碼一致)
- 用記事本編輯的時(shí)候姨蟋,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里屉凯,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件
- 瀏覽網(wǎng)頁的時(shí)候眼溶,服務(wù)器會(huì)把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器悠砚,所以你看到很多網(wǎng)頁的源碼上會(huì)有類似<meta charset="UTF-8" />的信息,表示該網(wǎng)頁正是用的UTF-8編碼堂飞。
- 如果知道字符的整數(shù)編碼灌旧,還可以用十六進(jìn)制這么寫str:這樣寫和寫字符串一致绑咱,因?yàn)閷懥俗址琾ython3默認(rèn)會(huì)用utf-8解碼枢泰,變量用unicode存儲(chǔ)描融。
>>> '\u4e2d\u6587'
'中文'
6. Python提供了ord()函數(shù)獲取字符的整數(shù)表示,chr()函數(shù)把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符
7. 注意區(qū)分'ABC'和b'ABC'衡蚂,前者是str窿克,后者雖然內(nèi)容顯示得和前者一樣,但bytes的每個(gè)字符都只占用一個(gè)字節(jié)
- 編碼(encode)的過程就是毛甲,將unicode轉(zhuǎn)化為轉(zhuǎn)換為某種編碼形式年叮,每個(gè)字符在unicode中占用兩個(gè)字節(jié),轉(zhuǎn)換為具體編碼中的bytes形式玻募。
注意:utf-8和unicode中的編碼可以做到一一對(duì)應(yīng)谋右,但是別的編碼方式都只能對(duì)應(yīng)一部分字符集。因此從unicode轉(zhuǎn)換成某種具體的編碼的時(shí)候可能出現(xiàn)無法轉(zhuǎn)碼的情況补箍。
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
9. 如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes啸蜜。要把bytes變?yōu)閟tr坑雅,就需要用decode()方法
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
注:如果bytes中只有一小部分無效的字節(jié),可以傳入errors='ignore'忽略錯(cuò)誤的字節(jié)
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
10. len 返回字符串衬横、列表裹粤、字典、元組等長(zhǎng)度
注:區(qū)別于len方法蜂林,在Python中遥诉,如果你調(diào)用len()函數(shù)試圖獲取一個(gè)對(duì)象的長(zhǎng)度,實(shí)際上噪叙,在len()函數(shù)內(nèi)部矮锈,它自動(dòng)去調(diào)用該對(duì)象的len()方法。
>>> len('abcd')
4
>>> len([1,2,3])
3
>>> len((1,2,3))
3
>>> len({'a':'hello','b':'heihei'})
2
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
- python2環(huán)境--
# 將CRT設(shè)置為utf-8的編碼格式
1. 默認(rèn)的內(nèi)置編碼為ascii
miao@miao-VirtualBox:~$ python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> print sys.getdefaultencoding()
ascii
2.
>>> zhongwen = '中文'
>>> type(zhongwen)
<type 'str'>
>>> len(zhongwen)
6
>>> sys.setdefaultencoding('utf-8')
>>> len(zhongwen)
6
>>> zhongwen_uni = u'中文'
>>> type(zhongwen_uni)
<type 'unicode'>
>>> len(zhongwen_uni)
2
# 可見unicode不是按照字節(jié)來統(tǒng)計(jì)的睁蕾,而是暗中某個(gè)字符集的字符的個(gè)數(shù)統(tǒng)計(jì)
>>> repr(zhongwen_uni)
"u'\\u4e2d\\u6587'"
# 轉(zhuǎn)換為utf-8
>>> zhongwen_utf8 = zhongwen_uni.encode('utf-8')
>>> print zhongwen_utf8
中文
>>> len(zhongwen_utf8)
6
>>> repr(zhongwen_utf8)
"'\\xe4\\xb8\\xad\\xe6\\x96\\x87'"
>>> type(zhongwen_utf8)
<type 'str'>
# 原始輸入(終端輸入格式為utf-8)苞笨,與unicode轉(zhuǎn)換為utf-8的編碼格式一致
>>> print zhongwen_utf8 == zhongwen
True
>>> zhongwen_gbk = zhongwen_uni.encode('gbk')
>>> print zhongwen_gbk
# 輸出沒有顯示,應(yīng)該時(shí)CRT默認(rèn)編碼為utf-8而輸出的變量是gbk無法顯示子眶。
>>> repr(zhongwen_gbk)
"'\\xd6\\xd0\\xce\\xc4'"
>>> yingwen = 'abc'
>>> repr(yingwen)
"'abc'"
>>> len(yingwen_uni)
3
>>> yingwen_uni = u'abc'
>>> repr(yingwen_uni)
"u'abc'"
>>> yingwen_utf8 = yingwen_uni.encode('utf-8')
>>> print yingwen_utf8
abc
>>> repr(yingwen_utf8)
"'abc'"
>>> yingwen_gbk = yingwen_uni.encode('gbk')
>>> repr(yingwen_gbk)
"'abc'"
>>> len(yingwen_gbk)
3
- python3 環(huán)境
miao@miao-VirtualBox:~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> len('中文')
2
>>> len(u'中文')
2
總結(jié):對(duì)于unicode瀑凝,len函數(shù)按照真實(shí)的字符數(shù)量來統(tǒng)計(jì),如果對(duì)于str臭杰,len函數(shù)按照字節(jié)數(shù)量統(tǒng)計(jì)
11. 格式化輸出--C語言的風(fēng)格
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
#常用占位符
占位符 替換內(nèi)容
%d 整數(shù)
%f 浮點(diǎn)數(shù)
%s 字符串
%x 十六進(jìn)制整數(shù)
#指定位數(shù)粤咪,指定是否用0補(bǔ)充,%02d代表兩位渴杆,不足用0補(bǔ)充
>>> print('%2d-%02d' % (3, 1))
3-01
>>> print('%02d-%02d' % (3, 1))
03-01
>>> print('%03d-%02d' % (3, 1))
003-01
>>> print('%.2f' % 3.1415926)
3.14
# 用%%來表示一個(gè)%
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
# format()方法寥枝,它會(huì)用傳入的參數(shù)依次替換字符串內(nèi)的占位符{0}宪塔、{1}
>>> a = 'Hello, {1}, 成績(jī)提升了 {0:.1f}%'.format(17.125,'小明')
>>> print a
Hello, 小明, 成績(jī)提升了 17.1%
#python2中默認(rèn)編碼為ascii,python3為unicode脉顿,所以python3可以直接顯示
miao@miao-VirtualBox:~$ python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 'Hello, {0}, 成績(jī)提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, \xe5\xb0\x8f\xe6\x98\x8e, \xe6\x88\x90\xe7\xbb\xa9\xe6\x8f\x90\xe5\x8d\x87\xe4\xba\x86 17.1%'
miao@miao-VirtualBox:~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 'Hello, {0}, 成績(jī)提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成績(jī)提升了 17.1%'
#例:小明的成績(jī)從去年的72分提升到了今年的85分蝌麸,請(qǐng)計(jì)算小明成績(jī)提升的百分點(diǎn),并用字符串格式化顯示出'xx.x%'艾疟,只保留小數(shù)點(diǎn)后1位:
>>> print('{0:.1f}%'.format(100*(s2-s1)/float(s1)))
18.1%
12 .列表和元祖
classmates = ['Michael', 'Bob', 'Tracy']
>>> len(classmates)
3
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> classmates[-1]
'Tracy'
>>> classmates.insert(1, 'Jack')
>>> classmates.pop() #刪除list末尾的元素
>>> classmates.pop(1) #刪除指定位置的元素
# 列表的排序
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
# tuple的陷阱:只有1個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號(hào),来吩,來消除歧義
>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
# 指向不變
# 表面上看,tuple的元素確實(shí)變了蔽莱,但其實(shí)變的不是tuple的元素弟疆,而是list的元素。tuple一開始指向的list并沒有改成別的list盗冷,所以怠苔,tuple所謂的“不變”是說,tuple的每個(gè)元素仪糖,指向永遠(yuǎn)不變柑司。即指向'a',就不能改成指向'b'锅劝,指向一個(gè)list攒驰,就不能改成指向其他對(duì)象,但指向的這個(gè)list本身是可變的故爵!
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
13 循環(huán)
sum = 0
for x in range(101):
sum = sum + x
print(sum)
# 終端中一行行地敲也要注意縮進(jìn)
>>> L = ['Bart', 'Lisa', 'Adam']
>>> for word in L:
... print 'hello %s'%word
...
hello Bart
hello Lisa
hello Adam
14. 字典dict和set
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
>>> d.pop('Bob') #刪除一個(gè)key
75
dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的玻粪。
和list比較,dict有以下幾個(gè)特點(diǎn):
查找和插入的速度極快诬垂,不會(huì)隨著key的增加而變慢劲室;
需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多结窘。
而list相反:
查找和插入的時(shí)間隨著元素的增加而增加很洋;
占用空間小,浪費(fèi)內(nèi)存很少隧枫。
所以蹲缠,dict是用空間來換取時(shí)間的一種方法。
dict可以用在需要高速查找的很多地方悠垛,在Python代碼中幾乎無處不在线定,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對(duì)象确买。
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.remove(4)
>>> s
{1, 2, 3}
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
15. 可變對(duì)象與不可變對(duì)象
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
16. 函數(shù)名:就是指向一個(gè)函數(shù)對(duì)象的引用
>>> a = abs # 變量a指向abs函數(shù)
>>> a(-1) # 所以也可以通過a調(diào)用abs函數(shù)
1
17. 內(nèi)置函數(shù)
1. abs:絕對(duì)值
2. divmod:把除數(shù)和余數(shù)運(yùn)算結(jié)果結(jié)合起來斤讥,返回一個(gè)包含商和余數(shù)的元組(a // b, a % b)
3. input:
Python3.x 中 input() 函數(shù)接受一個(gè)標(biāo)準(zhǔn)輸入數(shù)據(jù),返回為 string 類型。
Python2.x 中 input() 相等于eval(raw_input(prompt))芭商,用來獲取控制臺(tái)的輸入派草。
raw_input() 將所有輸入作為字符串看待,返回字符串類型铛楣。而 input() 在對(duì)待純數(shù)字輸入時(shí)具有自己的特性近迁,它返回所輸入的數(shù)字的類型( int, float )。
注意:input() 和 raw_input() 這兩個(gè)函數(shù)均能接收 字符串 簸州,但 raw_input() 直接讀取控制臺(tái)的輸入(任何類型的輸入它都可以接收)鉴竭。而對(duì)于 input() ,它希望能夠讀取一個(gè)合法的 python 表達(dá)式岸浑,即你輸入字符串的時(shí)候必須使用引號(hào)將它括起來搏存,否則它會(huì)引發(fā)一個(gè) SyntaxError 。
除非對(duì) input() 有特別需要矢洲,否則一般情況下我們都是推薦使用 raw_input() 來與用戶交互璧眠。
注意:python3 里 input() 默認(rèn)接收到的是 str 類型。
4. open() 函數(shù)用于打開一個(gè)文件
5. staticmethod():
例:以下實(shí)例聲明了靜態(tài)方法 f读虏,類可以不用實(shí)例化就可以調(diào)用該方法 C.f()责静,當(dāng)然也可以實(shí)例化后調(diào)用 C().f()。
class C(object):
@staticmethod
def f(arg1, arg2, ...):
...
6. all():用于判斷給定的可迭代參數(shù) iterable 中的所有元素是否不為 0盖桥、''灾螃、False 或者 iterable 為空
例:
>>>all(['a', 'b', 'c', 'd']) # 列表list,元素都不為空或0
True
>>> all(['a', 'b', '', 'd']) # 列表list葱轩,存在一個(gè)為空的元素
False
>>> all([0, 1,2, 3]) # 列表list藐握,存在一個(gè)為0的元素
False
>>> all(('a', 'b', 'c', 'd')) # 元組tuple靴拱,元素都不為空或0
True
>>> all(('a', 'b', '', 'd')) # 元組tuple,存在一個(gè)為空的元素
False
>>> all((0, 1猾普,2, 3)) # 元組tuple袜炕,存在一個(gè)為0的元素
False
>>> all([]) # 空列表
True
>>> all(()) # 空元組
True
7. enumerate() 函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列初家,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo)
8. int:函數(shù)用于將一個(gè)字符串或數(shù)字轉(zhuǎn)換為整型偎窘。
9. ord:它以一個(gè)字符(長(zhǎng)度為1的字符串)作為參數(shù),返回對(duì)應(yīng)的 ASCII 數(shù)值
10. str() 函數(shù)將對(duì)象轉(zhuǎn)化為適于人閱讀的形式
11. any() 與all()對(duì)應(yīng)溜在,只要有一個(gè)為True就為True
12. eval() 函數(shù)用來執(zhí)行一個(gè)字符串表達(dá)式陌知,并返回表達(dá)式的值
13. isinstance(object, classinfo) 判斷是否一個(gè)類的對(duì)象或者子類的對(duì)象
14. math.pow( x, y ),返回 xy(x的y次方) 的值
15. 求和:sum([0,1,2]) 掖肋, sum((2, 3, 4), 1)
16. basestring() 方法是 str 和 unicode 的超類(父類)仆葡,也是抽象類,isinstance(obj, basestring) 等價(jià)于 isinstance(obj, (str, unicode))
17. execfile() 函數(shù)可以用來執(zhí)行一個(gè)文件
18. issubclass() 方法用于判斷參數(shù) class 是否是類型參數(shù) classinfo 的子類
19. print(*objects, sep=' ', end='\n', file=sys.stdout)
例:
print("www","runoob","com",sep=".") # 設(shè)置間隔符
www.runoob.com
20. super() 函數(shù)是用于調(diào)用父類(超類)的一個(gè)方法
21. bin() 返回一個(gè)整數(shù) int 或者長(zhǎng)整數(shù) long int 的二進(jìn)制表示
22. file() 用于創(chuàng)建一個(gè) file 對(duì)象志笼,它有一個(gè)別名叫 open()
23. iter() 用來生成迭代器
例子:
class counter:
def __init__(self, _start, _end):
self.start = _start
self.end = _end
def get_next(self):
s = self.start
if(self.start < self.end):
self.start += 1
else:
raise StopIteration
return s
c = counter(1, 5)
'''
iter(object[, sentinel])
If the second argument, sentinel, is given, then object must be a callable object. The iterator created in this case will call object with no arguments for each call to its __next__() method; if the value returned is equal to sentinel,StopIteration will be raised, otherwise the value will be returned.
'''
iterator = iter(c.get_next, 4) #如果__next__的返回值等于sentinel沿盅,則拋出StopIteration異常把篓,否則返回下一個(gè)值
print(type(iterator))
for i in iterator:
print(i)
#輸出
<type 'callable-iterator'>
1
2
3
24. property():
例1:設(shè)置類某個(gè)屬性的get、set腰涧、del韧掩、init方法
class C(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
#注意:如果 c 是 C 的實(shí)例化, c.x 將觸發(fā) getter,c.x = value 將觸發(fā) setter , del c.x 觸發(fā) deleter
例2:做裝飾器窖铡,創(chuàng)建只讀屬性
class Parrot(object):
def __init__(self):
self._voltage = 100000
@property
def voltage(self):
"""Get the current voltage."""
return self._voltage
例3:getter,setter 和 deleter裝飾器
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
25. tuple() 函數(shù)將列表轉(zhuǎn)換為元組
26. bool()將給定參數(shù)轉(zhuǎn)換為布爾類型
27. filter() 用于過濾序列疗锐,過濾掉不符合條件的元素
例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
#輸出:
[1, 3, 5, 7, 9]
28. len() 返回對(duì)象(字符、列表万伤、元組等)長(zhǎng)度或項(xiàng)目個(gè)數(shù)
29. range():產(chǎn)生一個(gè)序列
例:
>>>range(10) # 從 0 開始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 從 1 開始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) # 步長(zhǎng)為 5
[0, 5, 10, 15, 20, 25]
30. type() 一個(gè)參數(shù)返回對(duì)象類型
高級(jí)用法:三個(gè)參數(shù)窒悔,返回新的類型對(duì)象
>>>X = type('X', (object,), dict(a=1)) # 產(chǎn)生一個(gè)新的類型 X,和用class定義一個(gè)類的效果一樣
>>> X
31. bytearray():返回值為一個(gè)新的字節(jié)數(shù)組
例:
# encoding:utf-8
a = '中文'
b = u'中文'
print type(a)
print bytearray(a.decode('utf-8'),'utf-8')
print type(b)
print bytearray(b,'utf-8')
32. float()用于將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù)
33. list() 用于將元組轉(zhuǎn)換為列表
34. raw_input() 將所有輸入作為字符串看待敌买,返回字符串類型
35. unichr() 返回 unicode 的字符
例:
>>>unichr(97)
u'a'
>>> unichr(98)
u'b'
>>> unichr(99)
u'c'
36. callable()檢查一個(gè)對(duì)象是否是可調(diào)用的
37. format()格式化字符串的函數(shù) str.format()
>>> "{1} {0} {1}".format("hello", "world") # 設(shè)置指定位置
'world hello world'
>>> print("網(wǎng)站名:{name}, 地址 {url}".format(name="菜鳥教程", url="www.runoob.com"))
# 通過字典設(shè)置參數(shù)
site = {"name": "菜鳥教程", "url": "www.runoob.com"}
print("網(wǎng)站名:{name}, 地址 {url}".format(**site))
# 通過列表索引設(shè)置參數(shù)
my_list = ['菜鳥教程', 'www.runoob.com']
print("網(wǎng)站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必須的
# 通過對(duì)象設(shè)置屬性
class AssignValue(object):
def __init__(self, value):
self.value = value
my_value = AssignValue(6)
print('value 為: {0.value}'.format(my_value)) # "0" 是可選的
38. locals()會(huì)以字典類型返回當(dāng)前位置的全部局部變量
例:
>>>def runoob(arg): # 兩個(gè)局部變量:arg简珠、z
... z = 1
... print (locals())
...
>>> runoob(4)
{'z': 1, 'arg': 4} # 返回一個(gè)名字/值對(duì)的字典
39. reduce() 規(guī)約操作
例:
>>>def add(x, y) : # 兩數(shù)相加
... return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 計(jì)算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函數(shù)
15
40. unicode() 一個(gè)范圍在 range(256)內(nèi)的(就是0~255)整數(shù)作參數(shù),返回一個(gè)對(duì)應(yīng)的字符
41. chr()
42. frozenset() 返回一個(gè)凍結(jié)的集合虹钮,凍結(jié)后集合不能再添加或刪除任何元素
例:
>>>a = frozenset(range(10)) # 生成一個(gè)新的不可變集合
>>> a
frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = frozenset('runoob')
>>> b
frozenset(['b', 'r', 'u', 'o', 'n']) # 創(chuàng)建不可變集合
43. long() 將數(shù)字或字符串轉(zhuǎn)換為一個(gè)長(zhǎng)整型
44. reload() 重新載入之前載入的模塊
場(chǎng)景:
如果此時(shí)在另一個(gè)窗口中改變并保存了模塊的源代碼文件
45. vars() 返回對(duì)象object的屬性和屬性值的字典對(duì)象
46. classmethod():類的方法聋庵,用類名調(diào)用,不用實(shí)例化調(diào)用芙粱,參數(shù)cls而不是self
例:
class A(object):
bar = 1
def func1(self):
print ('foo')
@classmethod
def func2(cls):
print ('func2')
print (cls.bar)
cls().func1() # 調(diào)用 foo 方法
A.func2() # 不需要實(shí)例化
47. getattr() 返回一個(gè)對(duì)象屬性值
>>>class A(object):
... bar = 1
...
>>> a = A()
>>> getattr(a, 'bar') # 獲取屬性 bar 值
1
48. map()根據(jù)提供的函數(shù)對(duì)指定序列做映射
例:
>>>def square(x) : # 計(jì)算平方數(shù)
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 計(jì)算列表各個(gè)元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函數(shù)
[1, 4, 9, 16, 25]
# 提供了兩個(gè)列表祭玉,對(duì)相同位置的列表數(shù)據(jù)進(jìn)行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
49. repr() 將對(duì)象轉(zhuǎn)化為供解釋器讀取的形式(一個(gè)字符串會(huì)返回具體的編碼格式)
>>>s = 'RUNOOB'
>>> repr(s)
"'RUNOOB'"
>>> dict = {'runoob': 'runoob.com', 'google': 'google.com'};
>>> repr(dict)
"{'google': 'google.com', 'runoob': 'runoob.com'}"
50. xrange() 與 range 完全相同,所不同的是生成的不是一個(gè)數(shù)組春畔,而是一個(gè)生成器
51. cmp():比較大小
例:
cmp(80, 100) : -1
cmp(180, 100) : 1
cmp(-80, 100) : -1
cmp(80, -100) : 1
52. globals() 返回全局變量的字典
例:
>>>a='runoob'
>>> print(globals()) # globals 函數(shù)返回一個(gè)全局變量的字典脱货,包括所有導(dǎo)入的變量。
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'a': 'runoob', '__package__': None}
53. max() 求最大值
例:
max(80, 100, 1000) : 1000
max(-20, 100, 400) : 400
max([1, 3, 7, 10]) : 10
54. reverse() 用于反向列表中元素
55. zip() 打包元祖列表律姨,或者解壓
例:
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包為元組的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素個(gè)數(shù)與最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 與 zip 相反振峻,可理解為解壓,返回二維矩陣式
[(1, 2, 3), (4, 5, 6)]
56. compile() 將一個(gè)字符串編譯為字節(jié)代碼
例:
>>>str = "for i in range(0,10): print(i)"
>>> c = compile(str,'','exec') # 編譯為字節(jié)代碼對(duì)象
>>> c
<code object <module> at 0x10141e0b0, file "", line 1>
>>> exec(c)
0
1
2
3
4
5
6
7
8
9
>>> str = "3 * 4 + 5"
>>> a = compile(str,'','eval')
>>> eval(a)
17
57. hasattr() 用于判斷對(duì)象是否包含對(duì)應(yīng)的屬性
58. memoryview() 返回內(nèi)存查看對(duì)象择份,是指對(duì)支持緩沖區(qū)協(xié)議的數(shù)據(jù)進(jìn)行包裝扣孟,在不需要復(fù)制對(duì)象基礎(chǔ)上允許Python代碼訪問(很少用到吧)
59. round() 返回浮點(diǎn)數(shù)x的四舍五入值
60. __import__() :動(dòng)態(tài)導(dǎo)入模塊--具體如何啥場(chǎng)景需要再研究
61. complex() :構(gòu)建一個(gè)復(fù)數(shù)
>>>complex(1, 2)
(1 + 2j)
>>> complex(1) # 數(shù)字
(1 + 0j)
>>> complex("1") # 當(dāng)做字符串處理
(1 + 0j)
# 注意:這個(gè)地方在"+"號(hào)兩邊不能有空格,也就是不能寫成"1 + 2j"荣赶,應(yīng)該是"1+2j"凤价,否則會(huì)報(bào)錯(cuò)
>>> complex("1+2j")
(1 + 2j)
62. hash()
例:
>>>hash('test') # 字符串
2314058222102390712
>>> hash(1) # 數(shù)字
1
>>> hash(str([1,2,3])) # 集合
1335416675971793195
>>> hash(str(sorted({'1':1}))) # 字典
7666464346782421378
>>>
63. min() 最小值
64. set() 集合操作
例:
>>>x = set('runoob')
>>> y = set('google')
>>> x, y
(set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l'])) # 重復(fù)的被刪除
>>> x & y # 交集
set(['o'])
>>> x | y # 并集
set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])
>>> x - y # 差集
set(['r', 'b', 'u', 'n'])
65. delattr()
例:
class Coordinate:
x = 10
y = -5
z = 0
point1 = Coordinate()
print('x = ',point1.x)
print('y = ',point1.y)
print('z = ',point1.z)
delattr(Coordinate, 'z')
print('--刪除 z 屬性后--')
print('x = ',point1.x)
print('y = ',point1.y)
# 觸發(fā)錯(cuò)誤
print('z = ',point1.z)
66. help() 用于查看函數(shù)或模塊用途的詳細(xì)說明
67. next() 返回迭代器的下一個(gè)項(xiàng)目
例:
# 首先獲得Iterator對(duì)象:
it = iter([1, 2, 3, 4, 5])
# 循環(huán):
while True:
try:
# 獲得下一個(gè)值:
x = next(it)
print(x)
except StopIteration:
# 遇到StopIteration就退出循環(huán)
break
68. setattr() 設(shè)置一個(gè)屬性,也可以用來設(shè)置新的屬性
例:
>>>class A(object):
... bar = 1
...
>>> a = A()
>>> getattr(a, 'bar') # 獲取屬性 bar 值
1
>>> setattr(a, 'bar', 5) # 設(shè)置屬性 bar 值
>>> a.bar
69. dict() 構(gòu)造一個(gè)字典
例:
>>>dict() # 創(chuàng)建空字典
{}
>>> dict(a='a', b='b', t='t') # 傳入關(guān)鍵字
{'a': 'a', 'b': 'b', 't': 't'}
>>> dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 映射函數(shù)方式來構(gòu)造字典
{'three': 3, 'two': 2, 'one': 1}
>>> dict([('one', 1), ('two', 2), ('three', 3)]) # 可迭代對(duì)象方式來構(gòu)造字典
{'three': 3, 'two': 2, 'one': 1}
70. hex() 用于將10進(jìn)制整數(shù)轉(zhuǎn)換成16進(jìn)制
71. object()
72. slice() 構(gòu)建切片的方法
>>>myslice = slice(5) # 設(shè)置截取5個(gè)元素的切片
>>> myslice
slice(None, 5, None)
>>> arr = range(10)
>>> arr
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> arr[myslice] # 截取 5 個(gè)元素
[0, 1, 2, 3, 4]
73. dir() 返回模塊的屬性列表
例:
>>>dir() # 獲得當(dāng)前模塊的屬性列表
['__builtins__', '__doc__', '__name__', '__package__', 'arr', 'myslice']
>>> dir([ ]) # 查看列表的方法
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
74. id() 用于獲取對(duì)象的內(nèi)存地址
例:
>>>a = 'runoob'
>>> id(a)
4531887632
>>> b = 1
>>> id(b)
140588731085608
75. oct() 將一個(gè)整數(shù)轉(zhuǎn)換成8進(jìn)制字符串
76. sorted() 對(duì)所有可迭代的對(duì)象進(jìn)行排序操作
注意:sort 是應(yīng)用在 list 上的方法拔创,sorted 可以對(duì)所有可迭代的對(duì)象進(jìn)行排序操作
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函數(shù)
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年齡排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
77. exec 內(nèi)置表達(dá)式
例:
>>>exec 'print "Hello World"'
Hello World
# 單行語句字符串
>>> exec "print 'runoob.com'"
runoob.com
# 多行語句字符串
>>> exec """for i in range(5):
... print "iter time: %d" % i
... """
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4