常規(guī)導入
** import sys **
你只需要使用import一詞,然后指定你希望導入的模塊或包即可誊酌。通過這種方式導入的好處是可以一次性導入多個包或模塊:
** import os, sys, time **
雖然這節(jié)省了空間,但是卻違背了Python風格指南观话。Python風格指南建議將每個導入語句單獨成行荞怒。
使用from語句導入
很多時候你只想要導入一個模塊或庫中的某個部分。我們來看看在Python中如何實現(xiàn)這點:
** from functools import lru_cache **
上面這行代碼可以讓你直接調(diào)用lru_cache拼余。如果你按常規(guī)方式導入functools,那么你就必須像這樣調(diào)用lru_cache:
** functools.lru_cache(*args) **
根據(jù)你實際的使用場景亩歹,上面的做法可能是更好的匙监。在復雜的代碼庫中,能夠看出某個函數(shù)是從哪里導入的這點很有用的小作。不過亭姥,如果你的代碼維護的很好,模塊化程度高顾稀,那么只從某個模塊中導入一部分內(nèi)容也是非常方便和簡潔的达罗。
當然,你還可以使用from方法導入模塊的全部內(nèi)容,就像這樣:
** from os import * **
** 切片 **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# list 切片
L = ['chen', 'li', 'jiang', 'wen']
print L[0:4]
print L[:3]
print L[-2:]
L = range(100)
print L[:10]
print L[-10:]
# copy list
N = L[:]
print N
# tuple 切片
L = (1, 2, 3, 4, 5)
print L[0:3]
# 字符串切片
L = 'chenwenbo'
print L[0:3]
# 間隔三個
print L[::3]
# 間隔二個
print L[::2]
** 迭代 **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from collections import Iterable
# 迭代dict
dict = {'name': 'chenwenbo', 'age': 12}
# key
for o in dict:
print o
# value
for o in dict.itervalues():
print o
# item
for x, y in dict.iteritems():
print x
print y
# str
for str in "chenwenbo":
print str
# 判斷對象是否可以迭代
print isinstance('chenwen', Iterable)
# Python內(nèi)置的enumerate函數(shù)可以把一個list變成索引-元素對粮揉,這樣就可以在for循環(huán)中同時迭代索引和元素本身
for i, value in enumerate('chenwenbo'):
print i, value
# 引用兩個變量
for x, y in [(1, 2), (2, 3), (3, 4)]:
print x, y
** 列表生成式 **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 列表生成式即List Comprehensions巡李,是Python內(nèi)置的非常簡單卻強大的可以用來創(chuàng)建list的生成式。
print [x for x in range(1, 22) if x % 2 == 0]
print [x*x for x in range(1, 22) if x % 2 == 0]
print [x.lower() for x in 'ABC']
# 多個返回值的列表生成式
d = {'x': 'A', 'y': 'B'}
print [x+y for x, y in d.iteritems()]
** 生成器 **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 列表生成式 []
L = [x*x for x in range(0, 10)]
print L
# 生成器 ()
g = (x*x for x in range(0, 10))
print g.next()
print g.next()
print g.next()
print g.next()
for x in g:
print x
# 自定義生成器
def fib(max):
n, a, b = 0, 0, 1
while n < max:
# 關(guān)鍵
yield b
a, b = b, a + b
n = n + 1
for f in fib(6):
print f
# generator是非常強大的工具扶认,在Python中侨拦,可以簡單地把列表生成式改成generator,也可以通過函數(shù)實現(xiàn)復雜邏輯的generator辐宾。
# 要理解generator的工作原理狱从,它是在for循環(huán)的過程中不斷計算出下一個元素,并在適當?shù)臈l件結(jié)束for循環(huán)叠纹。對于函數(shù)改成的generator來說季研,遇到return語句或者執(zhí)行到函數(shù)體最后一行語句,就是結(jié)束generator的指令吊洼,for循環(huán)隨之結(jié)束训貌。
** filter **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print filter(lambda x: x > 10, [1, 2, 4, 5, 6, 9, 10, 15])
# 把一個序列中的空字符串刪掉制肮,可以這么寫:
print filter(lambda x: (x and x.strip()), ['A', '', 'B', None, 'C', ' '])
** 高階函數(shù) **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 高階函數(shù)
# 變量可以指向函數(shù)
f = abs
print f(-10)
# 函數(shù)名也是變量
cmp = 10
print cmp
# 報錯 print abs(-10)
# 參數(shù)傳入函數(shù)
def add(x, y, f):
return f(x) + f(y)
print add(1, 2, abs)
** map **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# map usage
def f(num):
return num * num
print map(f, [1, 2, 3, 4, 5])
print map(lambda x: x * x, [1, 2, 3, 4, 5])
** reduce **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# reduce usage
def char2num(str):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[str]
def str2int(s):
return reduce(lambda x, y: x + y, map(char2num, s))
print str2int('123')
** sorted **
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print sorted([22, 3, 51, 1, 521, 50, 134])
def new_sort(x, y):
if x > y:
return -1
if x < y:
return 1
return 0
print sorted([22, 3, 51, 1, 521, 50, 134], new_sort)