python中bar函數(shù),bar函數(shù)用法

如何理解Python裝飾器

內(nèi)褲可以用來遮羞,但是到了冬天它沒法為我們防風(fēng)御寒,聰明的人們發(fā)明了長(zhǎng)褲,有了長(zhǎng)褲后寶寶再也不冷了,裝飾器就像我們這里說的長(zhǎng)褲,在不影響內(nèi)褲作用的前提下,給我們的身子提供了保暖的功效。

成都創(chuàng)新互聯(lián)長(zhǎng)期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為安居企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、做網(wǎng)站安居網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

再回到我們的主題

裝飾器本質(zhì)上是一個(gè)Python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下增加額外功能,裝飾器的返回值也是一個(gè)函數(shù)對(duì)象。它經(jīng)常用于有切面需求的場(chǎng)景,比如:插入日志、性能測(cè)試、事務(wù)處理、緩存、權(quán)限校驗(yàn)等場(chǎng)景。裝飾器是解決這類問題的絕佳設(shè)計(jì),有了裝飾器,我們就可以抽離出大量與函數(shù)功能本身無關(guān)的雷同代碼并繼續(xù)重用。概括的講,裝飾器的作用就是為已經(jīng)存在的對(duì)象添加額外的功能。

先來看一個(gè)簡(jiǎn)單例子:

def foo():

print('i am foo')

現(xiàn)在有一個(gè)新的需求,希望可以記錄下函數(shù)的執(zhí)行日志,于是在代碼中添加日志代碼:

def foo():

print('i am foo')

logging.info("foo is running")

bar()、bar2()也有類似的需求,怎么做?再寫一個(gè)logging在bar函數(shù)里?這樣就造成大量雷同的代碼,為了減少重復(fù)寫代碼,我們可以這樣做,重新定義一個(gè)函數(shù):專門處理日志 ,日志處理完之后再執(zhí)行真正的業(yè)務(wù)代碼

def use_logging(func):

logging.warn("%s is running" % func.__name__)

func()

def bar():

print('i am bar')

use_logging(bar)

邏輯上不難理解, 但是這樣的話,我們每次都要將一個(gè)函數(shù)作為參數(shù)傳遞給use_logging函數(shù)。而且這種方式已經(jīng)破壞了原有的代碼邏輯結(jié)構(gòu),之前執(zhí)行業(yè)務(wù)邏輯時(shí),執(zhí)行運(yùn)行bar(),但是現(xiàn)在不得不改成use_logging(bar)。那么有沒有更好的方式的呢?當(dāng)然有,答案就是裝飾器。

簡(jiǎn)單裝飾器

def use_logging(func):

def wrapper(*args, **kwargs):

logging.warn("%s is running" % func.__name__)

return func(*args, **kwargs)

return wrapper

def bar():

print('i am bar')

bar = use_logging(bar)

bar()

函數(shù)use_logging就是裝飾器,它把執(zhí)行真正業(yè)務(wù)方法的func包裹在函數(shù)里面,看起來像bar被use_logging裝飾了。在這個(gè)例子中,函數(shù)進(jìn)入和退出時(shí) ,被稱為一個(gè)橫切面(Aspect),這種編程方式被稱為面向切面的編程(Aspect-Oriented Programming)。

@符號(hào)是裝飾器的語法糖,在定義函數(shù)的時(shí)候使用,避免再一次賦值操作

def use_logging(func):

def wrapper(*args, **kwargs):

logging.warn("%s is running" % func.__name__)

return func(*args)

return wrapper

@use_logging

def foo():

print("i am foo")

@use_logging

def bar():

print("i am bar")

bar()

如上所示,這樣我們就可以省去bar = use_logging(bar)這一句了,直接調(diào)用bar()即可得到想要的結(jié)果。如果我們有其他的類似函數(shù),我們可以繼續(xù)調(diào)用裝飾器來修飾函數(shù),而不用重復(fù)修改函數(shù)或者增加新的封裝。這樣,我們就提高了程序的可重復(fù)利用性,并增加了程序的可讀性。

裝飾器在Python使用如此方便都要?dú)w因于Python的函數(shù)能像普通的對(duì)象一樣能作為參數(shù)傳遞給其他函數(shù),可以被賦值給其他變量,可以作為返回值,可以被定義在另外一個(gè)函數(shù)內(nèi)。

帶參數(shù)的裝飾器

裝飾器還有更大的靈活性,例如帶參數(shù)的裝飾器:在上面的裝飾器調(diào)用中,比如@use_logging,該裝飾器唯一的參數(shù)就是執(zhí)行業(yè)務(wù)的函數(shù)。裝飾器的語法允許我們?cè)谡{(diào)用時(shí),提供其它參數(shù),比如@decorator(a)。這樣,就為裝飾器的編寫和使用提供了更大的靈活性。

def use_logging(level):

def decorator(func):

def wrapper(*args, **kwargs):

if level == "warn":

logging.warn("%s is running" % func.__name__)

return func(*args)

return wrapper

return decorator

@use_logging(level="warn")

def foo(name='foo'):

print("i am %s" % name)

foo()

上面的use_logging是允許帶參數(shù)的裝飾器。它實(shí)際上是對(duì)原有裝飾器的一個(gè)函數(shù)封裝,并返回一個(gè)裝飾器。我們可以將它理解為一個(gè)含有參數(shù)的閉包。當(dāng)我 們使用@use_logging(level="warn")調(diào)用的時(shí)候,Python能夠發(fā)現(xiàn)這一層的封裝,并把參數(shù)傳遞到裝飾器的環(huán)境中。

類裝飾器

再來看看類裝飾器,相比函數(shù)裝飾器,類裝飾器具有靈活度大、高內(nèi)聚、封裝性等優(yōu)點(diǎn)。使用類裝飾器還可以依靠類內(nèi)部的\_\_call\_\_方法,當(dāng)使用 @ 形式將裝飾器附加到函數(shù)上時(shí),就會(huì)調(diào)用此方法。

class Foo(object):

def __init__(self, func):

self._func = func

def __call__(self):

print ('class decorator runing')

self._func()

print ('class decorator ending')

@Foo

def bar():

print ('bar')

bar()

functools.wraps

使用裝飾器極大地復(fù)用了代碼,但是他有一個(gè)缺點(diǎn)就是原函數(shù)的元信息不見了,比如函數(shù)的docstring、__name__、參數(shù)列表,先看例子:

裝飾器

def logged(func):

def with_logging(*args, **kwargs):

print func.__name__ + " was called"

return func(*args, **kwargs)

return with_logging

函數(shù)

@logged

def f(x):

"""does some math"""

return x + x * x

該函數(shù)完成等價(jià)于:

def f(x):

"""does some math"""

return x + x * x

f = logged(f)

不難發(fā)現(xiàn),函數(shù)f被with_logging取代了,當(dāng)然它的docstring,__name__就是變成了with_logging函數(shù)的信息了。

print f.__name__ # prints 'with_logging'

print f.__doc__ # prints None

這個(gè)問題就比較嚴(yán)重的,好在我們有functools.wraps,wraps本身也是一個(gè)裝飾器,它能把原函數(shù)的元信息拷貝到裝飾器函數(shù)中,這使得裝飾器函數(shù)也有和原函數(shù)一樣的元信息了。

from functools import wraps

def logged(func):

@wraps(func)

def with_logging(*args, **kwargs):

print func.__name__ + " was called"

return func(*args, **kwargs)

return with_logging

@logged

def f(x):

"""does some math"""

return x + x * x

print f.__name__ # prints 'f'

print f.__doc__ # prints 'does some math'

內(nèi)置裝飾器

@staticmathod、@classmethod、@property

裝飾器的順序

@a

@b

@c

def f ():

等效于

f = a(b(c(f)))

編輯于 2016-08-09

8 條評(píng)論

感謝

分享

收藏

?

沒有幫助

?

舉報(bào)

?

作者保留權(quán)利

收起

4

贊同

反對(duì),不會(huì)顯示你的姓名

許多人選擇編程是因?yàn)樗麄兿矚g把時(shí)間花在…

4 人贊同

先理解一下閉包的概念吧,之前回答過一個(gè)有關(guān)閉包和裝飾器的問題,可以參考一下:Python 里函數(shù)里返回一個(gè)函數(shù)內(nèi)部定義的函數(shù)? - 知乎用戶的回答

顯示全部

先理解一下閉包的概念吧,之前回答過一個(gè)有關(guān)閉包和裝飾器的問題,可以參考一下:

Python 里函數(shù)里返回一個(gè)函數(shù)內(nèi)部定義的函數(shù)? - 知乎用戶的回答

發(fā)布于 2014-12-09

2 條評(píng)論

感謝

分享

收藏

?

沒有幫助

?

舉報(bào)

?

作者保留權(quán)利

1

贊同

反對(duì),不會(huì)顯示你的姓名

什么是Python裝飾器

裝飾器(decorator)是Python中的高級(jí)語法。裝飾的意思就是動(dòng)態(tài)擴(kuò)展被裝飾對(duì)象的功能。裝飾器可以用于裝飾函數(shù)、方法和類。

一 嵌套函數(shù)

# 定義一個(gè)外層函數(shù)def foo(): # 定義了一個(gè)內(nèi)部函數(shù) def bar(): print("hello world")

函數(shù)bar是一個(gè)定義在foo函數(shù)內(nèi)部的函數(shù)。

Python中的函數(shù)是支持嵌套的,也就是可以在一個(gè)函數(shù)內(nèi)部再定義一個(gè)函數(shù)。

然后,我們還知道函數(shù)是可以當(dāng)作變量的,于是我們就可以在foo函數(shù)中把定義的這個(gè)bar函數(shù)返回。就像下面這樣:

# 定義一個(gè)外層函數(shù)def foo(): # 定義了一個(gè)內(nèi)層函數(shù) def bar(): print("hello world") return

barfunc = foo()func() # func -- bar,這里執(zhí)行func其實(shí)就相當(dāng)于執(zhí)行了在foo函數(shù)內(nèi)部定義的bar函數(shù)

二 閉包形態(tài)1

# 閉包形態(tài)1def foo(): name = "Andy" # 外部函數(shù)的局部變量 # 定義了一個(gè)內(nèi)部函數(shù) def bar():

print(name) # 雖然bar函數(shù)中沒有定義name變量,但是它可以訪問外部函數(shù)的局部變量name return barfunc =

foo()func() # func -- bar -- 除了是一個(gè)函數(shù),還包含一個(gè)值(它外層函數(shù)的局部變量)的引用

三 閉包形態(tài)2

# 閉包形態(tài)2def foo(name): # 給一個(gè)函數(shù)傳參也相當(dāng)于給函數(shù)定義了一個(gè)局部變量 # 定義了一個(gè)內(nèi)部函數(shù) def bar():

print(name) # 內(nèi)部函數(shù)同樣可以獲取到傳到外部函數(shù)的變量(參數(shù)) return barfunc = foo("Andy") #

把“Andy”當(dāng)成參數(shù)傳入foo函數(shù) -- 其內(nèi)部定義的bar函數(shù)也能拿到這個(gè)“Andy”func() # func -- bar --

除了是一個(gè)函數(shù),還包含一個(gè)值(它外層函數(shù)的參數(shù))的引用

四 裝飾器形態(tài)1

# 還是定義一個(gè)外層函數(shù)def foo(name): # 我接收的參數(shù)是一個(gè)函數(shù)名 # 定義了一個(gè)內(nèi)部函數(shù) def bar():

print("這是新功能。。。") # 新功能 name() # 函數(shù)名加()就相當(dāng)于執(zhí)行-- 我傳進(jìn)來原函數(shù)的函數(shù)名,這里就相當(dāng)于執(zhí)行了原函數(shù)

return bar# 定義一個(gè)被裝飾的函數(shù)def f1(): print("hello world.") # 用foo函數(shù)裝飾f1函數(shù)f1 =

foo(f1)# 不改變f1的調(diào)用方式f1() # -- 此時(shí)函數(shù)已經(jīng)擴(kuò)展了新功能

五 裝飾器形態(tài)2

# 還是定義一個(gè)外層函數(shù)def foo(name): # 接收的參數(shù)是一個(gè)函數(shù)名 # 定義了一個(gè)內(nèi)部函數(shù) def bar():

print("這是新功能。。。") # 新功能 name() # 函數(shù)名加()就相當(dāng)于執(zhí)行-- 傳進(jìn)來原函數(shù)的函數(shù)名,這里就相當(dāng)于執(zhí)行了原函數(shù)

return bar# 定義一個(gè)被裝飾的函數(shù)# 用foo函數(shù)裝飾f1函數(shù)@foo # 使用f1 =

foo(f1)語法裝飾的話稍顯啰嗦,Python就提供了@語法,讓裝飾過程更簡(jiǎn)便def f1(): print("hello world.") #

不改變f1的調(diào)用方式f1() # -- 此時(shí)函數(shù)已經(jīng)擴(kuò)展了新功能。

Python畫截?cái)鄨D

近日,幫女朋友畫截?cái)鄨D時(shí),遇到了一些問題,網(wǎng)上很多資料都是互相粘貼,缺少能夠解決問題的帖子,經(jīng)過查看官方api最終解決了問題。

在此記錄一下,也希望能夠幫助其他有需要的人。

這個(gè)是最方便的一種解決辦法,官網(wǎng)地址為 Pypi ,官網(wǎng)的教程比較簡(jiǎn)潔

即可以得到可用的圖:

看著效果好像還不錯(cuò),但是如果要畫柱狀圖,則如何解決呢?

仿照官方的程序,我們可以寫出來以下的程序

得到以下圖:

這個(gè)圖我們可以發(fā)現(xiàn)存在一定的問題,它的橫坐標(biāo)不對(duì)了,我們的“1”顯示不出來了!!!

那怎么解決呢?可以知道我們?cè)赽ar()函數(shù)中使用 tick_label=name_list 是不可行的了,那我們?cè)囅?plt.xticks 函數(shù)看看

首先刪除bar函數(shù)中的 tick_label=name_list ,然后在 plt.show() 前面加上 plt.xticksx,name_list) ,得到下圖結(jié)果

我們通過對(duì)比這兩個(gè)圖,可以發(fā)現(xiàn)一個(gè)很trick的解決辦法!

第一個(gè)圖,沒有自帶的刻度,但是少了一個(gè)我們想要的刻度;第二個(gè)圖,存在自帶的刻度,但是我們想要的刻度全都有!

我們能不能考慮結(jié)合下呢?

我們嘗試在bar中加上一個(gè)空的刻度,然后再顯示出來

因此,這個(gè)方案在一些簡(jiǎn)單的圖上還可以應(yīng)用,復(fù)雜的場(chǎng)景就難以解決了!

matplotlib具有很強(qiáng)的自定義能力,我們可以考慮通過畫兩個(gè)子圖,然后拼接成一個(gè),來生成我們的截?cái)鄨D!

看著結(jié)果似乎還不錯(cuò),坐標(biāo)的刻度也顯示正常啦

只是,由于我們使用subplot畫出來的兩個(gè)圖默認(rèn)大小是一樣的,而前文使用brokenaxes畫出來的截?cái)嗌舷碌拈L(zhǎng)度并不一樣。我們這樣畫出來的圖不好看,還需要調(diào)整下!

考慮到matplotlib可以使用grid來畫圖,我們嘗試用它來調(diào)整下上下兩圖的比例!

畫出來的結(jié)果好看多了!

重新畫一下圖

問題解決了!

我們得到了一個(gè)完整的圖!

參考文獻(xiàn):

python matplotlib數(shù)據(jù)作圖

一、使用numpy生成長(zhǎng)度為100的等差序列作為自變量,命名為x,并使用三角函數(shù)SiNx和cosx**2生成兩個(gè)因變量,命名為y和Z。

二、設(shè)置畫布的大小、顏色、寬度、類型和標(biāo)簽。

三、通過plt.figure(figsize=(10,6))的畫布。圖((10,6))。

四、嘗試plt.plot(x,y,color='red',linewidth=2,label='$\sinx$')和plt.plot(x,z,'b--',label='$\cosx^2$')。

五、分通過plt.xlabel('T')和plt.ylabel('V')設(shè)置X和Y軸的軸標(biāo)簽;并通過plt.title('V changes by T')為圖形設(shè)置標(biāo)題。

六、Y[:,0]=Y[:,0]*888表示修改第一個(gè)數(shù)據(jù)并將其展開888次;之后,使用上述設(shè)置時(shí)保持不變,發(fā)現(xiàn)另一行幾乎是一條直線。

如何用python繪制簡(jiǎn)單條形圖?

如何用python繪制簡(jiǎn)單條形圖呢?這里離不開matplotlib的使用。

條形圖是數(shù)據(jù)可視化圖形中很基礎(chǔ)也很常用的一種圖,簡(jiǎn)單解釋下:條形圖也叫長(zhǎng)條圖(英語:bar chart),亦稱條圖(英語:bar graph)、條狀圖、棒形圖、柱狀圖、條形圖表,是一種以長(zhǎng)方形的長(zhǎng)度為變量的統(tǒng)計(jì)圖表。長(zhǎng)條圖用來比較兩個(gè)或以上的價(jià)值(不同時(shí)間或者不同條件),只有一個(gè)變量,通常利用于較小的數(shù)據(jù)集分析。長(zhǎng)條圖亦可橫向排列,或用多維方式表達(dá)。

那么一個(gè)普通的條形圖是長(zhǎng)什么樣子的呢?

當(dāng)!當(dāng)!當(dāng)!就是下圖的這個(gè)樣子:

圖先亮出來啦,接下來研究這個(gè)圖是怎么畫的吧,先看一下原數(shù)據(jù)長(zhǎng)什么樣子:

實(shí)際畫圖的流程和畫折線圖很相近,只是用到的畫圖函數(shù)不一樣,繪制條形圖的函數(shù)plt.bar():

由于這只是最簡(jiǎn)單的一個(gè)條形圖,實(shí)際上條形圖的函數(shù)plt.bar()還有不少可以探索的參數(shù)設(shè)置,和對(duì)折線圖函數(shù)plt.plot()的探索差不多,有興趣的孩子可以自己去進(jìn)行探索哦。

按照條形長(zhǎng)短進(jìn)行排序展示的條形圖

當(dāng)然也可以有其他的設(shè)置,比如說上圖中的線條高低參差不齊,這是因?yàn)閤軸的數(shù)據(jù)是按照學(xué)校名稱進(jìn)行排序的,那么可不可以按照分?jǐn)?shù)的高低進(jìn)行排序呢?也就是讓所有的長(zhǎng)方形按照從高到矮或者從矮到高的順序進(jìn)行排列?

當(dāng)然可以啦!這里需要強(qiáng)調(diào)的是,條的高低排列等信息都是來源于原數(shù)據(jù)的,要想讓條形的順序發(fā)生改變,需要對(duì)畫圖的來源數(shù)據(jù)進(jìn)行更改呢!

把原數(shù)據(jù)逆序排序后截取前十名數(shù)據(jù)賦值給data_yuwen,作為新的數(shù)據(jù)源傳入畫圖函數(shù)plt.bar(),畫出來的圖自然就不一樣了。

先看一眼數(shù)據(jù)長(zhǎng)什么樣子:

根據(jù)這個(gè)數(shù)據(jù)源繪制出的圖形如下,由于用來畫圖的數(shù)據(jù)進(jìn)行了降序排序操作,所以生成條形圖的條也會(huì)進(jìn)行降序排序展示:

很多時(shí)候,我們常見的條形圖還有另一種展現(xiàn)形式,那就是橫向的條形圖,比較火的那種動(dòng)態(tài)條形圖絕大多數(shù)也都是橫向的條形圖,那么橫向的條形圖如何繪制呢?

理解plt.bar()主要參數(shù)

其實(shí)也不難,只要清楚plt.bar()函數(shù)中主要參數(shù)的作用就可以了!條形圖函數(shù)中有五個(gè)主要參數(shù),分別是x,height,width,bottom,orientation。其中x控制的是每個(gè)條在x軸上位置,height控制的是每個(gè)條的長(zhǎng)度,width控制的是每個(gè)條的寬度,bottom控制的是每個(gè)條在y軸方向的起始位置,orientation控制的是條形的方向,是縱向還是橫向,默認(rèn)是縱向的。

通過一個(gè)小例子理解下這幾個(gè)參數(shù)的作用:

上邊的幾行代碼輸出的圖形如下:

對(duì)比著代碼和實(shí)際輸出的條形圖,各個(gè)主要參數(shù)的作用是不是一目了然啦?

橫向條形圖

理解了這幾個(gè)參數(shù)作用后,縱向的條形圖轉(zhuǎn)換成橫向的條形圖就沒什么難度了!

需要設(shè)置所有條形在x軸的位置都為0,也就全部從最左側(cè)開始畫條形;由于是橫向條形圖,所以實(shí)際上條的寬度顯示的是數(shù)據(jù)大小,將width參數(shù)設(shè)置成原數(shù)據(jù)中的語文成績(jī);bottom控制每個(gè)條在y軸方向的起始位置,設(shè)置bottom=range(10)設(shè)置每個(gè)條形在y軸的起始位置各不相同避免有條形重疊;height控制的是每個(gè)條在y軸方向上的長(zhǎng)度,條形圖橫向設(shè)置后,在y軸上的長(zhǎng)度失去了衡量數(shù)據(jù)的意義,所以直接設(shè)置一個(gè)常數(shù)即可;最后設(shè)置條形的方向?yàn)闄M向,即orientation=“horizontal”。

溫馨提示:數(shù)據(jù)和標(biāo)簽一定要匹配,即plt.bar()重點(diǎn)的數(shù)據(jù)要和plt.yticks()中提取出來的標(biāo)簽一一對(duì)應(yīng),一旦不匹配,整個(gè)圖展現(xiàn)的結(jié)果就是一個(gè)錯(cuò)誤的結(jié)果!

上述代碼生成的條形圖如下:

感覺上邊這種生成橫向條形圖的方式有點(diǎn)點(diǎn)繞,和人們的習(xí)慣認(rèn)知有點(diǎn)不大一樣,難道畫一個(gè)橫向條形圖就非得轉(zhuǎn)變自己的習(xí)慣認(rèn)知這么反人類嗎?

當(dāng)然不是的,實(shí)際上有更簡(jiǎn)單的方法繪制一個(gè)橫向條形圖,之所以沒有一開始就直接用這種簡(jiǎn)單的方法,也是為了讓大家體會(huì)下條形圖參數(shù)的靈活設(shè)置而已,而且如果比較繞的方法都能理解了,簡(jiǎn)單的方法理解和運(yùn)用起來就更沒有難度了啊!

不賣關(guān)子了,我們來認(rèn)識(shí)下和plt.bar()函數(shù)類似的plt.barh()函數(shù)。

plt.barh()函數(shù)是專門繪制水平條形圖的函數(shù),主要的參數(shù)有:

y 控制y軸顯示的標(biāo)簽來源width 控制橫向條形的長(zhǎng)度,即用來進(jìn)行對(duì)比的數(shù)據(jù)源height 條形的寬度需要設(shè)置的參數(shù)主要就是這三個(gè),比用plt.bar()函數(shù)繪制水平條形圖簡(jiǎn)單了很多,具體代碼如下:

效果圖:

和用plt.bar()函數(shù)繪制的橫向條形圖一毛一樣對(duì)不對(duì)?以后有需求繪制橫向條形圖,盡量用plt.barh()函數(shù)吧,畢竟它是專門繪制這種類型圖的,簡(jiǎn)單好用。

然而實(shí)際工作中對(duì)于條形圖的需求不只是這些,比如例子中只是對(duì)各個(gè)學(xué)校語文成績(jī)的展示,有時(shí)候需要各個(gè)學(xué)科的成績(jī)同時(shí)展現(xiàn)在一幅條形圖中,有時(shí)候也需要繪制堆積條形圖對(duì)各學(xué)科的成績(jī)以及總成績(jī)進(jìn)行展示,這些圖又該如何繪制呢?其實(shí)只要理解了各個(gè)參數(shù)的含義,繪制這些圖也不在話下,至于具體怎么畫,且看下回分解啊!

當(dāng)前文章:python中bar函數(shù),bar函數(shù)用法
標(biāo)題鏈接:http://m.kartarina.com/article42/hcspec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)移動(dòng)網(wǎng)站建設(shè)微信公眾號(hào)域名注冊(cè)靜態(tài)網(wǎng)站自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
主站蜘蛛池模板: 成人无码精品1区2区3区免费看| 亚洲午夜成人精品无码色欲| 久久无码一区二区三区少妇| 狠狠躁天天躁无码中文字幕| 秋霞鲁丝片Av无码少妇| 无码成人精品区在线观看| 精品少妇人妻av无码专区| 亚洲爆乳无码一区二区三区| 国产怡春院无码一区二区| 无码精品久久久久久人妻中字| 久久久久亚洲AV无码去区首| 日韩人妻无码精品专区| 国产精品无码亚洲精品2021 | 本道久久综合无码中文字幕| 中文有码vs无码人妻| 日韩加勒比一本无码精品| 亚洲AV色吊丝无码| 久久久久亚洲AV成人无码网站| 亚洲色偷拍区另类无码专区 | 亚洲中文无码永久免费| 国产在线无码精品电影网| 蜜臀AV无码一区二区三区 | 亚洲精品无码国产片| 亚洲av中文无码乱人伦在线播放| 无码AV一区二区三区无码| 加勒比无码一区二区三区| 亚洲欧洲无码一区二区三区| 亚洲AV综合色区无码二区爱AV| 亚洲av无码专区国产乱码在线观看 | 熟妇人妻中文字幕无码老熟妇 | 亚洲äv永久无码精品天堂久久 | 国产成人无码精品久久久性色| 国产成人无码AV在线播放无广告| 无码国内精品久久综合88| AV无码人妻中文字幕| 免费A级毛片无码A∨中文字幕下载| 亚洲日韩欧洲无码av夜夜摸| 国产在线精品无码二区| 亚洲AV永久无码精品水牛影视| 亚洲av无码专区国产乱码在线观看| 亚洲精品无码永久中文字幕|