日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

人生苦短,我用Python(Python快速教程 - 基础篇)

發(fā)布時間:2024/7/5 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人生苦短,我用Python(Python快速教程 - 基础篇) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Life is short, you need Python

人生苦短,我用Python

-- Bruce Eckel

5.1 Python簡介

本章將介紹Python的最基本語法,以及一些和深度學(xué)習(xí)還有計算機視覺最相關(guān)的基本使用。

5.1.1 Python簡史

Python是一門解釋型的高級編程語言,特點是簡單明確。Python作者是荷蘭人Guido van Rossum,1982年他獲得數(shù)學(xué)和計算機碩士學(xué)位后,在荷蘭數(shù)學(xué)與計算科學(xué)研究所(Centrum Wiskunde & Informatica, CWI)謀了份差事。在CWI期間,Guido參與到了一門叫做ABC的語言開發(fā)工作中。ABC是一門教學(xué)語言,所以擁有簡單,可讀性好,語法更接近自然語言等特點。在那個C語言一統(tǒng)天下的年代,ABC就是一股簡單的清流,畢竟是門教學(xué)語言,最后沒有流行起來,不過這段經(jīng)歷影響了Guido。1989年的圣誕假期,閑得蛋疼的Guido決定設(shè)計一門簡單易用的新語言,要介于C和Shell之間,同時吸取ABC語法中的優(yōu)點。Guido用自己喜歡的一部喜劇電視劇來命名這門語言:《Monty Python's Flying Circus》。

1991年,第一版基于C實現(xiàn)的Python編譯器誕生,因為簡單,拓展性好,Python很快就在Guido的同事中大受歡迎,不久Python的核心開發(fā)人員就從Guido一人變成了一個小團(tuán)隊。后來隨著互聯(lián)網(wǎng)時代的到來,開源及社區(qū)合作的方式蓬勃發(fā)展,Python也借此上了發(fā)展的快車道。因為Python非常容易拓展,在不同領(lǐng)域的開發(fā)者貢獻(xiàn)下,許多受歡迎的功能和特征被開發(fā)出來,漸漸形成了各種各樣的庫,其中一部分被加入到Python的標(biāo)準(zhǔn)庫中,這讓本來就不需要過多思考底層細(xì)節(jié)的Python變得更加強大好用。在不過多考慮執(zhí)行效率的前提下,使用Python進(jìn)行開發(fā)的周期相比傳統(tǒng)的C/C++甚至Java等語言都大大縮短,代碼量也大幅降低,所以出bug的可能性也小了很多。因此有了語言專家Bruce Eckel的那句名言:Life is short, you need Python. 后來這句話的中文版“人生苦短,我用Python”被Guido印在了T恤上。發(fā)展至今,Python漸漸成了最流行的語言之一,在編程語言排行榜TOBIE中常年占據(jù)前5的位置。另外隨著Python的用戶群越來越壯大,慢慢在本身特點上發(fā)展出了自己的哲學(xué),叫做Python的禪(The Zen of Python)。遵循Python哲學(xué)的做法叫做很Python(Pythonic),具體參見:

PEP 20 -- The Zen of Python

或者在Python中執(zhí)行:


>> import this

Python擁有很好的擴充性,可以非常輕松地用其他語言編寫模塊供調(diào)用,用Python編寫的模塊也可以通過各種方式輕松被其他語言調(diào)用。所以一種常見的Python使用方式是,底層復(fù)雜且對效率要求高的模塊用C/C++等語言實現(xiàn),頂層調(diào)用的API用Python封裝,這樣可以通過簡單的語法實現(xiàn)頂層邏輯,故而Python又被稱為“膠水語言”。這種特性的好處是,無需花費很多時間在編程實現(xiàn)上,更多的時間可以專注于思考問題的邏輯。尤其是對做算法和深度學(xué)習(xí)的從業(yè)人員,這種方式是非常理想的,所以如今的深度學(xué)習(xí)框架中,除了MATLAB,或是Deeplearning4j這種擺明了給Java用的,其他框架基本上要么官方接口就是Python,要么支持Python接口。

5.1.2 安裝和使用Python

Python有兩個大版本,考慮到用戶群數(shù)量和庫的各種框架的兼容性,本文以Python2(2.7)為準(zhǔn),語法盡量考慮和Python3的兼容。

Unix/Linux下的Python基本都是系統(tǒng)自帶的,一般默認(rèn)為Python2,使用時在終端直接鍵入python就能進(jìn)入Python解釋器界面:

在解釋器下就已經(jīng)可以進(jìn)行最基本的編程了,比如:

寫程序的話還是需要保存成文件再執(zhí)行,比如我們寫下面語句,并且保存為helloworld.py:

print("Hello world!")

然后在終端里執(zhí)行:

安裝更多的python庫一般有兩種方法,第一是用系統(tǒng)的軟件包管理,以Ubuntu 16.04 LTS為例,比如想要安裝numpy庫(后面會介紹這個庫),軟件包的名字就是python-numpy,所以在終端中輸入:

>> sudo apt install python-numpy

Python自己也帶了包管理器,叫做pip,使用如下:

>> pip install numpy

安裝和深度學(xué)習(xí)相關(guān)的框架時,一般來說推薦使用系統(tǒng)自帶的包管理,出現(xiàn)版本錯誤的可能性低一些。另外也可以使用一些提前配置好很多第三方庫的Python包,這些包通常已經(jīng)包含了深度學(xué)習(xí)框架中絕大多數(shù)的依賴庫,比如最常用的是Anaconda:

Download Anaconda Now!

Windows下的Python安裝簡單一些,從官方網(wǎng)站下載相應(yīng)的安裝程序就可以了,當(dāng)然也有更方便的已經(jīng)包含了很全的第三方庫的選擇,WinPython:

WinPython

并且是綠色的,直接執(zhí)行就可以用了。

5.2 Python基本語法

There should be one-- and preferably only one --obvious way to do it.

對于一個特定的問題,應(yīng)該只用最好的一種方法來解決。

-- Tim Peters

5.2.1 基本數(shù)據(jù)類型和運算

基本數(shù)據(jù)類型

Python中最基本的數(shù)據(jù)類型包括整型,浮點數(shù),布爾值和字符串。類型是不需要聲明的,比如:

a = 1 # 整數(shù) b = 1.2 # 浮點數(shù) c = True # 布爾類型 d = "False" # 字符串 e = None # NoneType

其中#是行內(nèi)注釋的意思。最后一個None是NoneType,注意不是0,在Python中利用type函數(shù)可以查看一個變量的類型:

type(a) # <type 'int'> type(b) # <type 'float'> type(c) # <type 'bool'> type(d) # <type 'str'> type(e) # <type 'NoneType'>

注釋中是執(zhí)行type()函數(shù)后的輸出結(jié)果,可以看到None是單獨的一種類型NoneType。在很多API中,如果執(zhí)行失敗就會返回None。


變量和引用

Python中基本變量的賦值一般建立的是個引用,比如下面的語句:

a = 1 b = a c = 1

a賦值為1后,b=a執(zhí)行時并不會將a的值復(fù)制一遍,然后賦給b,而是簡單地為a所指的值,也就是1建立了一個引用,相當(dāng)于a和b都是指向包含1這個值的這塊內(nèi)存的指針。所以c=1執(zhí)行的也是個引用建立,這三個變量其實是三個引用,指向同一個值。這個邏輯雖然簡單,不過也還是常常容易弄混,這沒關(guān)系,Python內(nèi)置了id函數(shù),可以返回一個對象的地址,用id函數(shù)可以讓我們知道每個變量指向的是不是同一個值:

id(a) # 35556792L id(b) # 35556792L id(c) # 35556792L

注釋中表示的仍是執(zhí)行后的結(jié)果。如果這時候我們接下面兩個語句:

b = 2 # b的引用到新的一個變量上 id(b) # 35556768L

可以看到b引用到了另一個變量上。

運算符

Python中的數(shù)值的基本運算和C差不多,字符串的運算更方便,下面是常見的例子:

a = 2 b = 2.3 c = 3 a + b # 2 + 2.3 = 4.3 c a # 3 - 2 = 1 a / b # 整數(shù)除以浮點數(shù),運算以浮點數(shù)為準(zhǔn),2 / 2.3 = 0.8695652173913044 a / c # Python2中,整數(shù)除法,向下取整 2 / 3 = 0 a ** c # a的c次方,結(jié)果為8 a += 1 # Python中沒有i++的用法,自增用+= c -= 3 # c變成0了 d = 'Hello' d + ' world!' # 相當(dāng)于字符串拼接,結(jié)果為'Hello world!' d += ' "world"!'# 相當(dāng)于把字符串接在當(dāng)前字符串尾,d變?yōu)?#39;Hello "world"!' e = r'\n\t\\' print(e) # '\\n\\t\\\\'

需要提一下的幾點:1)字符串用雙引號和單引號都可以,區(qū)別主要是單引號字符串中如果出現(xiàn)單引號字符則需要用轉(zhuǎn)義符,雙引號也是一樣,所以在單引號字符串中使用雙引號,或者雙引號字符串中使用單引號就會比較方便。另外三個雙引號或者三個單引號圍起來的也是字符串,因為換行方便,更多用于文檔。2)Python2中兩個數(shù)值相除會根據(jù)數(shù)值類型判斷是否整數(shù)除法,Python3中則都按照浮點數(shù)。想要在Python2種也執(zhí)行Python3中的除法只要執(zhí)行下面語句:

from __future__ import division # 使用Python3中的除法 1 / 2 # 0.5

3)字符串前加r表示字符串內(nèi)容嚴(yán)格按照輸入的樣子,好處是不用轉(zhuǎn)義符了,非常方便。

Python中的布爾值和邏輯的運算非常直接,下面是例子:

a = True b = False a and b # False a or b # True not a # False

基本上就是英語,操作符優(yōu)先級之類的和其他語言類似。Python中也有位操作:

~8 # 按位翻轉(zhuǎn),1000 --> -(1000+1) 8 >> 3 # 右移3位,1000 --> 0001 1 << 3 # 左移3位,0001 --> 1000 5 & 2 # 按位與,101 & 010 = 000 5 | 2 # 按位或,101 | 010 = 111 4 ^ 1 # 按位異或,100 ^ 001 = 101

==, !=和is

判斷是否相等或者不等的語法和C也一樣,另外在Python中也常常見到is操作符,這兩者的區(qū)別在于==和!=比較引用指向的內(nèi)存中的內(nèi)容,而is判斷兩個變量是否指向一個地址,看下面的代碼例子:

a = 1 b = 1.0 c = 1 a == b # True,值相等 a is b # False,指向的不是一個對象,這個語句等效于 id(a) == id(b) a is c # True,指向的都是整型值1

所以一定要分清要比較的對象應(yīng)該用那種方式,對于一些特殊的情況,比如None,本著Pythonic的原則,最好用is None。

注意關(guān)鍵字

Python中,萬物皆對象。不過這并不是這里要探討的話題,想說的是一定要注意關(guān)鍵字,因為所有東西都是對象,所以一個簡簡單單的賦值操作就可以把系統(tǒng)內(nèi)置的函數(shù)給變成一個普通變量,來看下邊例子:

id(type) # 506070640L type = 1 # type成了指向1的變量 id(type) # 35556792L id = 2 # id成了指向2的變量 from __future__ import print_function print = 3 # print成了指向3的變量

注意print是個很特殊的存在,在Python3中是按照函數(shù)用,在Python2中卻是個命令式的語句,最早print的用法其實是下邊這樣:

print "Hello world!"

這么用主要是受到ABC語法的影響,但這個用法并不Pythonic,后來加入了print函數(shù),為了兼容允許兩種用法并存。所以單純給print賦值是不靈的,在Python2中使用Python3中的一些特性都是用from __future__ import來實現(xiàn)。

模塊導(dǎo)入

因為提到了對象名覆蓋和import,所以簡單講一下。import是利用Python中各種強大庫的基礎(chǔ),比如要計算cos(π)的值,可以有下面4種方式:

# 直接導(dǎo)入Python的內(nèi)置基礎(chǔ)數(shù)學(xué)庫 import math print(math.cos(math.pi))# 從math中導(dǎo)入cos函數(shù)和pi變量 from math import cos, pi print(cos(pi))# 如果是個模塊,在導(dǎo)入的時候可以起個別名,避免名字沖突或是方便懶得打字的人使用 import math as m print(m.cos(m.pi))# 從math中導(dǎo)入所有東西 from math import * print(cos(pi))

一般來說最后一種方式不是很推薦,因為不知道import導(dǎo)入的名字里是否和現(xiàn)有對象名已經(jīng)有沖突,很可能會不知不覺覆蓋了現(xiàn)有的對象。

5.2.2 容器

列表

Python中的容器是異常好用且異常有用的結(jié)構(gòu)。這節(jié)主要介紹列表(list),元組(tuple),字典(dict)和集合(set)。這些結(jié)構(gòu)和其他語言中的類似結(jié)構(gòu)并無本質(zhì)不同,來看例子了解下使用:

a = [1, 2, 3, 4] b = [1] c = [1] d = b e = [1, "Hello world!", c, False] print(id(b), id(c)) # (194100040L, 194100552L) print(id(b), id(d)) # (194100040L, 194100040L) print(b == c) # True f = list("abcd") print(f) # ['a', 'b', 'c', 'd'] g = [0]*3 + [1]*4 + [2]*2 # [0, 0, 0, 1, 1, 1, 1, 2, 2]

因為變量其實是個引用,所以對列表而言也沒什么不同,所以列表對類型沒什么限制。也正因為如此,和變量不同的是,即使用相同的語句賦值,列表的地址也是不同的,在這個例子中體現(xiàn)在id(b)和id(c)不相等,而內(nèi)容相等。列表也可以用list()初始化,輸入?yún)?shù)需要是一個可以遍歷的結(jié)構(gòu),其中每一個元素會作為列表的一項。“*”操作符對于列表而言是復(fù)制,最后一個語句用這種辦法生成了分段的列表。

列表的基本操作有訪問,增加,刪除,和拼接:

a.pop() # 把最后一個值4從列表中移除并作為pop的返回值 a.append(5) # 末尾插入值,[1, 2, 3, 5] a.index(2) # 找到第一個2所在的位置,也就是1 a[2] # 取下標(biāo),也就是位置在2的值,也就是第三個值3 a += [4, 3, 2] # 拼接,[1, 2, 3, 5, 4, 3, 2] a.insert(1, 0) # 在下標(biāo)為1處插入元素0,[1, 0, 2, 3, 5, 4, 3, 2] a.remove(2) # 移除第一個2,[1, 0, 3, 5, 4, 3, 2] a.reverse() # 倒序,a變?yōu)閇2, 3, 4, 5, 3, 0, 1] a[3] = 9 # 指定下標(biāo)處賦值,[2, 3, 4, 9, 3, 0, 1] b = a[2:5] # 取下標(biāo)2開始到5之前的子序列,[4, 9, 3] c = a[2:-2] # 下標(biāo)也可以倒著數(shù),方便算不過來的人,[4, 9, 3] d = a[2:] # 取下標(biāo)2開始到結(jié)尾的子序列,[4, 9, 3, 0, 1] e = a[:5] # 取開始到下標(biāo)5之前的子序列,[2, 3, 4, 9, 3] f = a[:] # 取從開頭到最后的整個子序列,相當(dāng)于值拷貝,[2, 3, 4, 9, 3, 0, 1] a[2:-2] = [1, 2, 3] # 賦值也可以按照一段來,[2, 3, 1, 2, 3, 0, 1] g = a[::-1] # 也是倒序,通過slicing實現(xiàn)并賦值,效率略低于reverse() a.sort() print(a) # 列表內(nèi)排序,a變?yōu)閇0, 1, 1, 2, 2, 3, 3]

因為列表是有順序的,所以和順序相關(guān)的操作是列表中最常見的,首先我們來打亂一個列表的順序,然后再對這個列表排序:

import random a = range(10) # 生成一個列表,從0開始+1遞增到9 print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] random.shuffle(a) # shuffle函數(shù)可以對可遍歷且可變結(jié)構(gòu)打亂順序 print(a) # [4, 3, 8, 9, 0, 6, 2, 7, 5, 1] b = sorted(a) print(b) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] c = sorted(a, reverse=True) print(c) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

元組

元組和列表有很多相似的地方,最大的區(qū)別在于不可變,還有如果初始化只包含一個元素的tuple和列表不一樣,因為語法必須明確,所以必須在元素后加上逗號。另外直接用逗號分隔多個元素賦值默認(rèn)是個tuple,這在函數(shù)多返回值的時候很好用:

a = (1, 2) b = tuple(['3', 4]) # 也可以從列表初始化 c = (5,) print(c) # (5,) d = (6) print(d) # 6 e = 3, 4, 5 print(e) # (3, 4, 5)

集合

集合是一種很有用的數(shù)學(xué)操作,比如列表去重,或是理清兩組數(shù)據(jù)之間的關(guān)系,集合的操作符和位操作符有交集,注意不要弄混:

A = set([1, 2, 3, 4]) B = {3, 4, 5, 6} C = set([1, 1, 2, 2, 2, 3, 3, 3, 3]) print(C) # 集合的去重效果,set([1, 2, 3]) print(A | B) # 求并集,set([1, 2, 3, 4, 5, 6]) print(A & B) # 求交集,set([3, 4]) print(A - B) # 求差集,屬于A但不屬于B的,set([1, 2]) print(B - A) # 求差集,屬于B但不屬于A的,set([5, 6]) print(A ^ B) # 求對稱差集,相當(dāng)于(A-B)|(B-A),set([1, 2, 5, 6])

字典

字典是一種非常常見的“鍵-值”(key-value)映射結(jié)構(gòu),鍵無重復(fù),一個鍵不能對應(yīng)多個值,不過多個鍵可以指向一個值。還是通過例子來了解,構(gòu)建一個名字->年齡的字典,并執(zhí)行一些常見操作:

a = {'Tom': 8, 'Jerry': 7} print(a['Tom']) # 8 b = dict(Tom=8, Jerry=7) # 一種字符串作為鍵更方便的初始化方式 print(b['Tom']) # 8 if 'Jerry' in a: # 判斷'Jerry'是否在keys里面print(a['Jerry']) # 7 print(a.get('Spike')) # None,通過get獲得值,即使鍵不存在也不會報異常 a['Spike'] = 10 a['Tyke'] = 3 a.update({'Tuffy': 2, 'Mammy Two Shoes': 42}) print(a.values()) # dict_values([8, 2, 3, 7, 10, 42]) print(a.pop('Mammy Two Shoes')) # 移除'Mammy Two Shoes'的鍵值對,并返回42 print(a.keys()) # dict_keys(['Tom', 'Tuffy', 'Tyke', 'Jerry', 'Spike'])

注意到初始化字典和集合很像,的確如此,集合就像是沒有值只有鍵的字典。既然有了人名到年齡的映射,也許你立馬想到是否可以給字典排序?在Python3.6之前,這個問題是錯誤的,字典是一種映射關(guān)系,沒有順序。當(dāng)然了,如果要把(鍵, 值)的這種對進(jìn)行排序,是沒有問題的,前提是先把字典轉(zhuǎn)化成可排序的結(jié)構(gòu),items()或者iteritems()可以做到這件事,接上段代碼繼續(xù):

b = a.items() print(b) # [('Tuffy', 2), ('Spike', 10), ('Tom', 8), ('Tyke', 3), ('Jerry', 7)] from operator import itemgetter c = sorted(a.items(), key=itemgetter(1)) print(c) # [('Tuffy', 2), ('Tyke', 3), ('Jerry', 7), ('Tom', 8), ('Spike', 10)] d = sorted(a.iteritems(), key=itemgetter(1)) print(d) # [('Tuffy', 2), ('Tyke', 3), ('Jerry', 7), ('Tom', 8), ('Spike', 10)] e = sorted(a) print(e) # 只對鍵排序,['Jerry', 'Spike', 'Tom', 'Tuffy', 'Tyke']

items()可以把字典中的鍵值對轉(zhuǎn)化成一個列表,其中每個元素是一個tuple,tuple的第一個元素是鍵,第二個元素是值。變量c是按照值排序,所以需要一個操作符itemgetter,去位置為1的元素作為排序參考,如果直接對字典排序,則其實相當(dāng)于只是對鍵排序。字典被當(dāng)作一個普通的可遍歷結(jié)構(gòu)使用時,都相當(dāng)于遍歷字典的鍵。如果覺得字典沒有順序不方便,可以考慮使用OrderedDict,使用方式如下:

from collections import OrderedDict a = {1: 2, 3: 4, 5: 6, 7: 8, 9: 10} b = OrderedDict({1: 2, 3: 4, 5: 6, 7: 8, 9: 10}) print(a) # {1: 2, 3: 4, 9: 10, 5: 6, 7: 8} print(b) # OrderedDict([(1, 2), (3, 4), (9, 10), (5, 6), (7, 8)])

這樣初始化時的順序就保留了,除了有序的特性以外,用法上和字典沒有區(qū)別。2016年9月,Guido宣布在Python3.6中,字典將默認(rèn)有序,這樣就不用糾結(jié)了。另外需要注意的一點是字典是通過哈希表實現(xiàn)的,所以鍵必須是可哈希的, list不能被哈希,所以也不能作為字典的鍵,而tuple就可以。

因為上上段代碼中用到了iteritems(),所以這里順帶提一下迭代器(iterator),迭代器相當(dāng)于一個函數(shù),每次調(diào)用都返回下一個元素,從遍歷的角度來看就和列表沒有區(qū)別了。iteritems()就是一個迭代器,所以效果一樣,區(qū)別是迭代器占用更少內(nèi)存,因為不需要一上來就生成整個列表。一般來說,如果只需要遍歷一次,用迭代器是更好的選擇,若是要多次頻繁從一個可遍歷結(jié)構(gòu)中取值,且內(nèi)存夠,則直接生成整個列表會更好。當(dāng)然,用迭代器生成一個完整列表并不麻煩,所以有個趨勢是把迭代器作為默認(rèn)的可遍歷方式,比如前面我們使用過用來生成等差數(shù)列列表的range(),在Python2中對應(yīng)的迭代器形式是xrange()。在Python3中,range()就不再產(chǎn)生一個列表了,而是作為迭代器,xrange()直接沒了。

5.2.3 分支和循環(huán)

從這節(jié)開始,代碼就未必適合在Python終端中輸入了,選個順手的編輯器或者IDE。作者良心推薦PyCharm,雖然慢,但好用,社區(qū)版免費:

PyCharm

for循環(huán)

上面提到的4種容器類型都是可遍歷的,所以該講講用來遍歷的for循環(huán)了。for循環(huán)的語法也是簡單的英語:

a = ['This', 'is', 'a', 'list', '!'] b = ['This', 'is', 'a', 'tuple', '!'] c = {'This': 'is', 'an': 'unordered', 'dict': '!'}# 依次輸出:'This', 'is', 'a', 'list', '!' for x in a:print(x)# 依次輸出:'This', 'is', 'a', 'tuple', '!' for x in b:print(x)# 鍵的遍歷。不依次輸出:'This', 'dict', 'an' for key in c:print(key)# 依次輸出0到9 for i in range(10):print(i)

注意到每個for循環(huán)中,print都有縮進(jìn),這是Python中一個讓人愛恨交織的特點:強行縮進(jìn)來表明成塊的代碼。這樣做的好處是代碼十分清晰工整,還有助于防止寫出過長的函數(shù)或者過深的嵌套,壞處是有時候不知為什么tab和空格就一起出現(xiàn)了,又或是多重if-else不知怎得就沒對齊,還是挺麻煩的。

回到for循環(huán)上,這種把每個元素拿出來的遍歷方式叫做for_each風(fēng)格,熟悉Java的話就不會陌生,C++11中也開始支持這種for循環(huán)方式。不過如果還是需要下標(biāo)呢?比如遍歷一個list的時候,希望把對應(yīng)下標(biāo)也打印出來,這時可以用enumerate:

names = ["Rick", "Daryl", "Glenn"]# 依次輸出下標(biāo)和名字 for i, name in enumerate(names):print(i, name)

需要注意的是,通過取下標(biāo)遍歷當(dāng)然是可行的,比如用len()函數(shù)獲得列表長度,然后用range()/xrange()函數(shù)獲得下標(biāo),但是并不推薦這樣做:

words = ["This", "is", "not", "recommended"]# not pythonic :( for i in xrange(len(words)):print(words[i])

在使用for循環(huán)時,有時會遇到這樣一種場景:我們需要對遍歷的每個元素進(jìn)行某種判斷,如果符合這種判斷的情況沒有發(fā)生,則執(zhí)行一個操作。舉個例子某神秘部門要審核一個字符串列表,如果沒有發(fā)現(xiàn)不和諧的字眼,則將內(nèi)容放心通過,一種解決辦法是下面這樣:

wusuowei = ["I", "don't", "give", "a", "shit"] # 無所謂hexie = True # 默認(rèn)和諧社會 for x in wusuowei:if x == "f**k":print("What the f**k!") # 發(fā)現(xiàn)了不該出現(xiàn)的東西,WTF!hexie = False # 不和諧了break # 趕緊停下!不能再唱了if hexie: # 未發(fā)現(xiàn)不和諧元素!print("Harmonious society!") # 和諧社會!

這樣需要設(shè)置一個標(biāo)記是否發(fā)現(xiàn)不和諧因素的狀態(tài)變量hexie,循環(huán)結(jié)束后再根據(jù)這個變量判斷內(nèi)容是否可以放心通過。一種更簡潔不過有些小眾的做法是直接和else一起,如果for循環(huán)中的if塊內(nèi)的語句沒有被觸發(fā),則通過else執(zhí)行指定操作:

wusuowei = ["I", "don't", "give", "a", "shit"]for x in wusuowei:if x == "f**k":print("What the f**k!")hexie = Falsebreak else: # for循環(huán)中if內(nèi)語句未被觸發(fā)print("Harmonious society!") # 和諧社會!

這樣不需要一個標(biāo)記是否和諧的狀態(tài)變量,語句簡潔了很多。

if和分支結(jié)構(gòu)

上一個例子中已經(jīng)出現(xiàn)if語句了,所以這部分講講if。Python的條件控制主要是三個關(guān)鍵字:if-elif-else,其中elif就是else if的意思。還是看例子:

pets =['dog', 'cat', 'droid', 'fly']for pet in pets:if pet == 'dog': # 狗糧food = 'steak' # 牛排elif pet == 'cat': # 貓糧food = 'milk' # 牛奶elif pet == 'droid': # 機器人food = 'oil' # 機油elif pet == 'fly': # 蒼蠅food = 'sh*t' # else:passprint(food)

需要提一下的是pass,這就是個空語句,什么也不做,占位用。Python并沒有switch-case的語法,等效的用法要么是像上面一樣用if-elif-else的組合,要么可以考慮字典:

pets = ['dog', 'cat', 'droid', 'fly'] food_for_pet = {'dog': 'steak', 'cat': 'milk', 'droid': 'oil', 'fly': 'sh*t' }for pet in pets:food = food_for_pet[pet] if pet in food_for_pet else Noneprint(food)

這里還用到了一個if-else常見的行內(nèi)應(yīng)用,就是代替三元操作符,如果鍵在字典中,則food取字典的對應(yīng)值,否則為None。

if表達(dá)式中的小技巧

通過鏈?zhǔn)奖容^讓語句簡潔:

if -1 < x < 1: # 相較于 if x > -1 and x < 1:print('The absolute value of x is < 1')

判斷一個值是不是等于多個可能性中的一個:

if x in ['piano', 'violin', 'drum']: # 相較于 if x == 'piano' or x == 'violin' or x =='drum':print("It's an instrument!")

Python中的對象都會關(guān)聯(lián)一個真值,所以在if表達(dá)式中判斷是否為False或者是否為空的時候,是無需寫出明確的表達(dá)式的:

a = True if a: # 判斷是否為真,相較于 a is Trueprint('a is True')if 'sky': # 判斷是否空字符串,相較于 len('sky') > 0print('birds')if '': # 判斷是否空字符串,同上print('Nothing!')if {}: # 判斷是否空的容器(字典),相較于len({}) > 0print('Nothing!')

隱式表達(dá)式為False的是如下狀況:

- None

- False

- 數(shù)值0

- 空的容器或序列(字符串也是一種序列)

- 用戶自定義類中,如果定義了__len__()或者_(dá)_nonzero__(),并且被調(diào)用后返回0或者False


while循環(huán)

while的就是循環(huán)和if的綜合體,是一種單純的基于條件的循環(huán),本身沒有遍歷的意思,這是和for_each的本質(zhì)差別,這種區(qū)別比起C/C++中要明確得多,用法如下:

i = 0 while i < 100: # 笑100遍print("ha")while True: # 一直笑print("ha")

5.2.4 函數(shù)、生成器和類

還是從幾個例子看起:

def say_hello():print('Hello!')def greetings(x='Good morning!'):print(x)say_hello() # Hello! greetings() # Good morning! greetings("What's up!") # What's up! a = greetings() # 返回值是Nonedef create_a_list(x, y=2, z=3): # 默認(rèn)參數(shù)項必須放后面return [x, y, z]b = create_a_list(1) # [1, 2, 3] c = create_a_list(3, 3) # [3, 3, 3] d = create_a_list(6, 7, 8) # [6, 7, 8]def traverse_args(*args):for arg in args:print(arg)traverse_args(1, 2, 3) # 依次打印1, 2, 3 traverse_args('A', 'B', 'C', 'D') # 依次打印A, B, C, Ddef traverse_kargs(**kwargs):for k, v in kwargs.items():print(k, v)traverse_kargs(x=3, y=4, z=5) # 依次打印('x', 3), ('y', 4), ('z', 5) traverse_kargs(fighter1='Fedor', fighter2='Randleman')def foo(x, y, *args, **kwargs):print(x, y)print(args)print(kwargs)# 第一個pring輸出(1, 2) # 第二個print輸出(3, 4, 5) # 第三個print輸出{'a': 3, 'b': 'bar'} foo(1, 2, 3, 4, 5, a=6, b='bar')

其實和很多語言差不多,括號里面定義參數(shù),參數(shù)可以有默認(rèn)值,且默認(rèn)值不能在無默認(rèn)值參數(shù)之前。Python中的返回值用return定義,如果沒有定義返回值,默認(rèn)返回值是None。參數(shù)的定義可以非常靈活,可以有定義好的固定參數(shù),也可以有可變長的參數(shù)(args: arguments)和關(guān)鍵字參數(shù)(kargs: keyword arguments)。如果要把這些參數(shù)都混用,則固定參數(shù)在最前,關(guān)鍵字參數(shù)在最后。

Python中萬物皆對象,所以一些情況下函數(shù)也可以當(dāng)成一個變量似的使用。比如前面小節(jié)中提到的用字典代替switch-case的用法,有的時候我們要執(zhí)行的不是通過條件判斷得到對應(yīng)的變量,而是執(zhí)行某個動作,比如有個小機器人在坐標(biāo)(0, 0)處,我們用不同的動作控制小機器人移動:

moves = ['up', 'left', 'down', 'right']coord = [0, 0]for move in moves:if move == 'up': # 向上,縱坐標(biāo)+1coord[1] += 1elif move == 'down': # 向下,縱坐標(biāo)-1coord[1] -= 1elif move == 'left': # 向左,橫坐標(biāo)-1coord[0] -= 1elif move == 'right': # 向右,橫坐標(biāo)+1coord[0] += 1else:passprint(coord) # 打印當(dāng)前位置坐標(biāo)

不同條件下對應(yīng)的是對坐標(biāo)這個列表中的值的操作,單純的從字典取值就辦不到了,所以就把函數(shù)作為字典的值,然后用這個得到的值執(zhí)行相應(yīng)動作:

moves = ['up', 'left', 'down', 'right']def move_up(x): # 定義向上的操作x[1] += 1def move_down(x): # 定義向下的操作x[1] -= 1def move_left(x): # 定義向左的操作x[0] -= 1def move_right(x): # 定義向右的操作x[0] += 1# 動作和執(zhí)行的函數(shù)關(guān)聯(lián)起來,函數(shù)作為鍵對應(yīng)的值 actions = {'up': move_up,'down': move_down,'left': move_left,'right': move_right }coord = [0, 0]for move in moves:actions[move](coord)print(coord)

把函數(shù)作為值取到后,直接加一括號就能使了,這樣做之后起碼在循環(huán)部分看上去很簡潔。有點C里邊函數(shù)指針的意思,只不過更簡單。其實這種用法在之前講排序的時候我們已經(jīng)見過了,就是operator中的itemgetter。itemgetter(1)得到的是一個可調(diào)用對象(callable object),和返回下標(biāo)為1的元素的函數(shù)用起來是一樣的:

def get_val_at_pos_1(x):return x[1]heros = [('Superman', 99),('Batman', 100),('Joker', 85) ]sorted_pairs0 = sorted(heros, key=get_val_at_pos_1) sorted_pairs1 = sorted(heros, key=lambda x: x[1])print(sorted_pairs0) print(sorted_pairs1)

在這個例子中我們用到了一種特殊的函數(shù):lambda表達(dá)式。Lambda表達(dá)式在Python中是一種匿名函數(shù),lambda關(guān)鍵字后面跟輸入?yún)?shù),然后冒號后面是返回值(的表達(dá)式),比如上邊例子中就是一個取下標(biāo)1元素的函數(shù)。當(dāng)然,還是那句話,萬物皆對象,給lambda表達(dá)式取名字也是一點問題沒有的:

some_ops = lambda x, y: x + y + x*y + x**y some_ops(2, 3) # 2 + 3 + 2*3 + 2^3 = 19

生成器(Generator)

生成器是迭代器的一種,形式上看和函數(shù)很像,只是把return換成了yield,在每次調(diào)用的時候,都會執(zhí)行到y(tǒng)ield并返回值,同時將當(dāng)前狀態(tài)保存,等待下次執(zhí)行到y(tǒng)ield再繼續(xù):

# 從10倒數(shù)到0 def countdown(x):while x >= 0:yield xx -= 1for i in countdown(10):print(i)# 打印小于100的斐波那契數(shù) def fibonacci(n):a = 0b = 1while b < n:yield ba, b = b, a + bfor x in fibonacci(100):print(x)

生成器和所有可迭代結(jié)構(gòu)一樣,可以通過next()函數(shù)返回下一個值,如果迭代結(jié)束了則拋出StopIteration異常:

a = fibonacci(3) print(next(a)) # 1 print(next(a)) # 1 print(next(a)) # 2 print(next(a)) # 拋出StopIteration異常

Python3.3以上可以允許yield和return同時使用,return的是異常的說明信息:

# Python3.3以上可以return返回異常的說明 def another_fibonacci(n):a = 0b = 1while b < n:yield ba, b = b, a + breturn "No more ..."a = another_fibonacci(3) print(next(a)) # 1 print(next(a)) # 1 print(next(a)) # 2 print(next(a)) # 拋出StopIteration異常并打印No more消息

類(Class)

Python中的類的概念和其他語言相比沒什么不同,比較特殊的是protected和private在Python中是沒有明確限制的,一個慣例是用單下劃線開頭的表示protected,用雙下劃線開頭的表示private:

class A:"""Class A"""def __init__(self, x, y, name):self.x = xself.y = yself._name = namedef introduce(self):print(self._name)def greeting(self):print("What's up!")def __l2norm(self):return self.x**2 + self.y**2def cal_l2norm(self):return self.__l2norm()a = A(11, 11, 'Leonardo') print(A.__doc__) # "Class A" a.introduce() # "Leonardo" a.greeting() # "What's up!" print(a._name) # 可以正常訪問 print(a.cal_l2norm()) # 輸出11*11+11*11=242 print(a._A__l2norm()) # 仍然可以訪問,只是名字不一樣 print(a.__l2norm()) # 報錯: 'A' object has no attribute '__l2norm'

類的初始化使用的是__init__(self,),所有成員變量都是self的,所以以self.開頭。可以看到,單下劃線開頭的變量是可以直接訪問的,而雙下劃線開頭的變量則觸發(fā)了Python中一種叫做name mangling的機制,其實就是名字變了下,仍然可以通過前邊加上“_類名”的方式訪問。也就是說Python中變量的訪問權(quán)限都是靠自覺的。類定義中緊跟著類名字下一行的字符串叫做docstring,可以寫一些用于描述類的介紹,如果有定義則通過“類名.__doc__”訪問。這種前后都加雙下劃線訪問的是特殊的變量/方法,除了__doc__和__init__還有很多,這里就不展開講了。

Python中的繼承也非常簡單,最基本的繼承方式就是定義類的時候把父類往括號里一放就行了:

class B(A):"""Class B inheritenced from A"""def greeting(self):print("How's going!")b = B(12, 12, 'Flaubert') b.introduce() # Flaubert b.greeting() # How's going! print(b._name()) # Flaubert print(b._A__l2norm()) # “私有”方法,必須通過_A__l2norm訪問

5.2.5 map, reduce和filter

map可以用于對可遍歷結(jié)構(gòu)的每個元素執(zhí)行同樣的操作,批量操作:

map(lambda x: x**2, [1, 2, 3, 4]) # [1, 4, 9, 16]map(lambda x, y: x + y, [1, 2, 3], [5, 6, 7]) # [6, 8, 10]

reduce則是對可遍歷結(jié)構(gòu)的元素按順序進(jìn)行兩個輸入?yún)?shù)的操作,并且每次的結(jié)果保存作為下次操作的第一個輸入?yún)?shù),還沒有遍歷的元素作為第二個輸入?yún)?shù)。這樣的結(jié)果就是把一串可遍歷的值,減少(reduce)成一個對象:

reduce(lambda x, y: x + y, [1, 2, 3, 4]) # ((1+2)+3)+4=10

filter顧名思義,根據(jù)條件對可遍歷結(jié)構(gòu)進(jìn)行篩選:

filter(lambda x: x % 2, [1, 2, 3, 4, 5]) # 篩選奇數(shù),[1, 3, 5]

需要注意的是,對于filter和map,在Python2中返回結(jié)果是列表,Python3中是生成器。


5.2.6 列表生成(list comprehension)

列表生成是Python2.0中加入的一種語法,可以非常方便地用來生成列表和迭代器,比如上節(jié)中map的兩個例子和filter的一個例子可以用列表生成重寫為:

[x**2 for x in [1, 2, 3, 4]] # [1, 4, 9 16][sum(x) for x in zip([1, 2, 3], [5, 6, 7])] # [6, 8, 10][x for x in [1, 2, 3, 4, 5] if x % 2] # [1, 3, 5]

zip()函數(shù)可以把多個列表關(guān)聯(lián)起來,這個例子中,通過zip()可以按順序同時輸出兩個列表對應(yīng)位置的元素對。有一點需要注意的是,zip()不會自動幫助判斷兩個列表是否長度一樣,所以最終的結(jié)果會以短的列表為準(zhǔn),想要以長的列表為準(zhǔn)的話可以考慮itertools模塊中的izip_longest()。如果要生成迭代器只需要把方括號換成括號,生成字典也非常容易:

iter_odd = (x for x in [1, 2, 3, 4, 5] if x % 2)print(type(iter_odd)) # <type 'generator'>square_dict = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

至于列表生成和map/filter應(yīng)該優(yōu)先用哪種,這個問題很難回答,不過Python創(chuàng)始人Guido似乎不喜歡map/filter/reduce,他曾在表示過一些從函數(shù)式編程里拿來的特性是個錯誤。

5.2.7 字符串

Python中字符串相關(guān)的處理都非常方便,來看例子:

a = 'Life is short, you need Python' a.lower() # 'life is short, you need Python' a.upper() # 'LIFE IS SHORT, YOU NEED PYTHON' a.count('i') # 2 a.find('e') # 從左向右查找'e',3 a.rfind('need') # 從右向左查找'need',19 a.replace('you', 'I') # 'Life is short, I need Python' tokens = a.split() # ['Life', 'is', 'short,', 'you', 'need', 'Python'] b = ' '.join(tokens) # 用指定分隔符按順序把字符串列表組合成新字符串 c = a + '\n' # 加了換行符,注意+用法是字符串作為序列的用法 c.rstrip() # 右側(cè)去除換行符 [x for x in a] # 遍歷每個字符并生成由所有字符按順序構(gòu)成的列表 'Python' in a # True

Python2.6中引入了format進(jìn)行字符串格式化,相比在字符串中用%的類似C的方式,更加強大方便:

a = 'I’m like a {} chasing {}.' # 按順序格式化字符串,'I’m like a dog chasing cars.' a.format('dog', 'cars')# 在大括號中指定參數(shù)所在位置 b = 'I prefer {1} {0} to {2} {0}' b.format('food', 'Chinese', 'American')# >代表右對齊,>前是要填充的字符,依次輸出: # 000001 # 000019 # 000256 for i in [1, 19, 256]:print('The index is {:0>6d}'.format(i))# <代表左對齊,依次輸出: # *--------- # ****------ # *******--- for x in ['*', '****', '*******']:progress_bar = '{:-<10}'.format(x)print(progress_bar)for x in [0.0001, 1e17, 3e-18]:print('{:.6f}'.format(x)) # 按照小數(shù)點后6位的浮點數(shù)格式print('{:.1e}'.format(x)) # 按照小數(shù)點后1位的科學(xué)記數(shù)法格式print ('{:g}'.format(x)) # 系統(tǒng)自動選擇最合適的格式template = '{name} is {age} years old.' c = template.format(name='Tom', age=8)) # Tom is 8 years old. d = template.format(age=7, name='Jerry')# Jerry is 7 years old.

format在生成字符串和文檔的時候非常有用,更多更詳細(xì)的用法可以參考Python官網(wǎng):

7.1. string - Common string operations - Python 2.7.13 documentation

5.2.8 文件操作和pickle

在Python中,推薦用上下文管理器(with-as)來打開文件,IO資源的管理更加安全,而且不用老惦記著給文件執(zhí)行close()函數(shù)。還是舉例子來說明,考慮有個文件name_age.txt,里面存儲著名字和年齡的關(guān)系,格式如下:

Tom,8 Jerry,7 Tyke,3 ...

讀取文件內(nèi)容并全部顯示:

with open('name_age.txt', 'r') as f: # 打開文件,讀取模式lines = f.readlines() # 一次讀取所有行for line in lines: # 按行格式化并顯示信息name, age = line.rstrip().split(',')print('{} is {} years old.'.format(name, age))

open()的第一個參數(shù)是文件名,第二個參數(shù)是模式。文件的模式一般有四種,讀取(r),寫入(w),追加(a)和讀寫(r+)。如果希望按照二進(jìn)制數(shù)據(jù)讀取,則將文件模式和b一起使用(wb, r+b…)。

再考慮一個場景,要讀取文件內(nèi)容,并把年齡和名字的順序交換存成新文件age_name.txt,這時可以同時打開兩個文件:

with open('name_age.txt', 'r') as fread, open('age_name.txt', 'w') as fwrite:line = fread.readline()while line:name, age = line.rstrip().split(',')fwrite.write('{},{}\n'.format(age, name))line = fread.readline()

有的時候我們進(jìn)行文件操作是希望把對象進(jìn)行序列化,那么可以考慮用pickle模塊:

import picklelines = ["I'm like a dog chasing cars.","I wouldn't know what to do if I caught one...","I'd just do things." ]with open('lines.pkl', 'wb') as f: # 序列化并保存成文件pickle.dump(lines, f)with open('lines.pkl', 'rb') as f: # 從文件讀取并反序列化lines_back = pickle.load(f)print(lines_back) # 和lines一樣

注意到,序列化的時候就得使用b模式了。Python2中有個效率更高的pickle叫cPickle,用法和pickle一樣,在Python3中就只有一個pickle。

5.2.9 異常

相比起其他一些語言,在Python中我們可以更大膽地使用異常,因為異常在Python中是非常常見的存在,比如下面這種簡單的遍歷:

a = ['Why', 'so', 'serious', '?']for x in a:print(x)

當(dāng)用for進(jìn)行遍歷時,會對要遍歷的對象調(diào)用iter()。這需要給對象創(chuàng)建一個迭代器用來依次返回對象中的內(nèi)容。為了能成功調(diào)用iter(),該對象要么得支持迭代協(xié)議(定義__iter__()),要么得支持序列協(xié)議(定義__getitem__())。當(dāng)遍歷結(jié)束時,__iter__()或者_(dá)_getitem__()都需要拋出一個異常。__iter__()會拋出StopIteration,而__getitem__()會拋出IndexError,于是遍歷就會停止。

在深度學(xué)習(xí)中,尤其是數(shù)據(jù)準(zhǔn)備階段,常常遇到IO操作。這時候遇到異常的可能性很高,采用異常處理可以保證數(shù)據(jù)處理的過程不被中斷,并對有異常的情況進(jìn)行記錄或其他動作:

for filepath in filelist: # filelist中是文件路徑的列表try:with open(filepath, 'r') as f:# 執(zhí)行數(shù)據(jù)處理的相關(guān)工作...print('{} is processed!'.format(filepath))except IOError:print('{} with IOError!'.format(filepath))# 異常的相應(yīng)處理...

5.2.10 多進(jìn)程(multiprocessing)

深度學(xué)習(xí)中對數(shù)據(jù)高效處理常常會需要并行,這時多進(jìn)程就派上了用場。考慮這樣一個場景,在數(shù)據(jù)準(zhǔn)備階段,有很多文件需要運行一定的預(yù)處理,正好有臺多核服務(wù)器,我們希望把這些文件分成32份,并行處理:

from multiprocessing import Process#, freeze_supportdef process_data(filelist):for filepath in filelist:print('Processing {} ...'.format(filepath))# 處理數(shù)據(jù)...if __name__ == '__main__':# 如果是在Windows下,還需要加上freeze_support()#freeze_support()# full_list包含了要處理的全部文件列表...n_total = len(full_list) # 一個遠(yuǎn)大于32的數(shù)n_processes = 32# 每段子列表的平均長度length = float(n_total) / float(n_processes)# 計算下標(biāo),盡可能均勻地劃分輸入文件列表indices = [int(round(i*length)) for i in range(n_processes+1)]# 生成每個進(jìn)程要處理的子文件列表sublists = [full_list[indices[i]:indices[i+1]] for i in range(n_processes)]# 生成進(jìn)程processes = [Process(target=process_data, args=(x,)) for x in sublists]# 并行處理for p in processes:p.start()for p in processes:p.join()

其中if __name__ == '__main__'用來標(biāo)明在import時不包含,但是作為文件執(zhí)行時運行的語句塊。為什么不用多線程呢?簡單說就是Python中線程的并發(fā)無法有效利用多核,如果有興趣的讀者可以從下面這個鏈接看起:

GlobalInterpreterLock - Python Wiki

5.2.11 os模塊

深度學(xué)習(xí)中的數(shù)據(jù)多是文件,所以數(shù)據(jù)處理階段和文件相關(guān)的操作就非常重要。除了文件IO,Python中一些操作系統(tǒng)的相關(guān)功能也能夠非常方便地幫助數(shù)據(jù)處理。想象一下我們有一個文件夾叫做data,下邊有3個子文件夾叫做cat,dog和bat,里面分別是貓,狗和蝙蝠的照片。為了訓(xùn)練一個三分類模型,我們先要生成一個文件,里面每一行是文件的路徑和對應(yīng)的標(biāo)簽。定義cat是0,dog是1,bat是2,則可以通過如下腳本:

import os# 定義文件夾名稱和標(biāo)簽的對應(yīng)關(guān)系 label_map = {'cat': 0,'dog': 1,'bat': 2 }with open('data.txt', 'w') as f:# 遍歷所有文件,root為當(dāng)前文件夾,dirs是所有子文件夾名,files是所有文件名for root, dirs, files in os.walk('data'):for filename in files:filepath = os.sep.join([root, filename]) # 獲得文件完整路徑dirname = root.split(os.sep)[-1] # 獲取當(dāng)前文件夾名稱label = label_map[dirname] # 得到標(biāo)簽line = '{},{}\n'.format(filepath, label)f.write(line)

其中,os.sep是當(dāng)前操作系統(tǒng)的路徑分隔符,在Unix/Linux中是'/',Windows中是'\\'。有的時候我們已經(jīng)有了所有的文件在一個文件夾data下,希望獲取所有文件的名稱,則可以用os.listdir():

filenames = os.listdir('data')

os也提供了諸如拷貝,移動和修改文件名等操作。同時因為大部分深度學(xué)習(xí)框架最常見的都是在Unix/Linux下使用,并且Unix/Linux的shell已經(jīng)非常強大(比Windows好用太多),所以只需要用字符串格式化等方式生成shell命令的字符串,然后通過os.system()就能方便實現(xiàn)很多功能,有時比os,還有Python中另一個操作系統(tǒng)相關(guān)模塊shutil還要方便:

import os, shutilfilepath0 = 'data/bat/IMG_000001.jpg' filepath1 = 'data/bat/IMG_000000.jpg'# 修改文件名 os.system('mv {} {}'.format(filepath0, filepath1)) #os.rename(filepath0, filepath1)# 創(chuàng)建文件夾 dirname = 'data_samples' os.system('mkdir -p {}'.format(dirname)) #if not os.path.exists(dirname): # os.mkdir(dirname)# 拷貝文件 os.system('cp {} {}'.format(filepath1, dirname)) #shutil.copy(filepath1, dirname) 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的人生苦短,我用Python(Python快速教程 - 基础篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

三日本三级少妇三级99 | 热99久久精品 | 性色va| 91九色蝌蚪视频网站 | 国产一级免费电影 | 国产精品一区二区在线播放 | 天天射天天拍 | 在线视频 精品 | 狠狠色丁香婷婷综合 | 日韩理论在线 | 免费视频91蜜桃 | 久草在线最新视频 | 久久精品一区二区三区四区 | 亚洲色图激情文学 | 97网在线观看 | 国产999精品久久久影片官网 | 天堂黄色片 | 国产剧情一区二区在线观看 | 天天爱天天射 | av在观看| 国产精品成久久久久三级 | 免费av的网站 | 亚洲欧美国产日韩在线观看 | 色com| 国产精品综合久久久 | 日韩艹| 国产小视频福利在线 | 97福利在线观看 | 欧美激情另类文学 | 国产精品手机在线观看 | 精品欧美一区二区在线观看 | 久久日韩精品 | av解说在线观看 | 久久精品福利 | 91福利小视频 | 欧美激精品| 五月婷婷激情六月 | 日韩女同一区二区三区在线观看 | 中文字幕传媒 | 国产美女黄网站免费 | 欧美一区二区三区在线观看 | 91麻豆精品国产91久久久久久久久 | 日韩精品免费在线播放 | 狠狠色噜噜狠狠 | 天天噜天天色 | 国产中文字幕大全 | 久久精品伊人 | 亚洲欧美婷婷六月色综合 | av高清一区 | 99久久精品久久久久久动态片 | 二区精品视频 | 国产 中文 日韩 欧美 | 蜜臀精品久久久久久蜜臀 | 久久电影色 | 午夜视频在线观看一区二区三区 | av在线免费网站 | 亚洲午夜久久久影院 | 天天亚洲| 国产91精品高清一区二区三区 | 亚洲精品欧美视频 | 亚洲日韩中文字幕在线播放 | 久久久久久免费 | 免费看精品久久片 | 九九视频这里只有精品 | 天天躁日日躁狠狠躁av中文 | 日韩精品免费一区 | 久久97视频| 五月婷婷狠狠 | 日韩av一区二区三区在线观看 | 97超级碰碰碰视频在线观看 | 三级av在线| 久久久久综合视频 | 92中文资源在线 | 少妇bbb | 婷婷www| 香蕉视频国产在线 | 视频一区二区免费 | 激情婷婷亚洲 | 精品产品国产在线不卡 | 欧美日韩国产一区二区在线观看 | 9在线观看免费高清完整版在线观看明 | 操操操夜夜操 | 亚洲精品美女 | 日本大尺码专区mv | 九九热在线视频免费观看 | 欧美日韩99 | 国产精品高潮呻吟久久av无 | 特及黄色片 | 久久综合九色综合97_ 久久久 | 国产99久久九九精品免费 | 最近中文字幕国语免费av | 亚洲国产综合在线 | 国产精品女人网站 | 激情久久综合网 | 日韩美视频 | 日韩最新理论电影 | 波多野结衣日韩 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日本中文乱码卡一卡二新区 | 久久人操 | 亚洲精品视频在 | 色婷婷综合在线 | 欧美色插| 久久久国际精品 | 在线免费视 | 日韩av免费大片 | 伊人天堂久久 | 毛片激情永久免费 | 日韩在线视频免费播放 | 99热99 | 91av在| 夜又临在线观看 | 六月丁香综合 | 亚洲精品一区二区在线观看 | 全久久久久久久久久久电影 | 久久这里精品视频 | 黄色片网站av | 97av在线| 亚洲黄色一级电影 | 国产精品免费看 | 国产福利在线不卡 | 中文在线a天堂 | 黄色的视频网站 | 亚洲黄色一级大片 | 日韩精品观看 | 日韩com | 欧美另类网站 | 91激情 | 999成人网 | 国产精品久久久久久久婷婷 | 日本精品久久久久中文字幕5 | 91麻豆看国产在线紧急地址 | 久久久久久久18 | 成人91av| 中文字幕免费高清av | 亚洲砖区区免费 | 色婷婷丁香 | 国产在线精品播放 | 国产又黄又硬又爽 | 国产精品人人做人人爽人人添 | 免费国产一区二区视频 | 久久久国产精品免费 | 奇米四色影狠狠爱7777 | 日韩超碰在线 | 91欧美视频网站 | 天天干,夜夜爽 | 狠狠色伊人亚洲综合成人 | 国产香蕉97碰碰碰视频在线观看 | 免费日韩 精品中文字幕视频在线 | 日韩在线高清免费视频 | 99视| 国产手机免费视频 | 亚洲欧美视频网站 | 午夜成人免费影院 | 91亚洲精品久久久蜜桃网站 | 欧美日韩国产一区 | 成 人 黄 色 免费播放 | a视频免费 | 人人草人人草 | 911国产在线观看 | 亚洲一级在线观看 | 久久综合9988久久爱 | 粉嫩一二三区 | 亚洲精品看片 | 午夜久久精品 | 日韩在线观看视频网站 | 免费在线播放黄色 | 在线播放 日韩专区 | 在线免费观看欧美日韩 | 中文字幕一区二区三区在线观看 | 一区二区在线影院 | 三上悠亚一区二区在线观看 | 久久久久久久久久网 | 中文字幕成人网 | 深夜激情影院 | 久久久久成人精品亚洲国产 | 亚洲视频免费在线 | 天天天干天天射天天天操 | 视频国产在线观看18 | 人人爽久久久噜噜噜电影 | 在线欧美国产 | 日韩高清一区 | 91在线porny国产在线看 | 国产999精品久久久久久绿帽 | 欧美激情综合色 | 在线免费观看羞羞视频 | 欧美日韩久久一区 | 黄色av网站在线观看免费 | 亚洲国产97在线精品一区 | 91在线免费观看网站 | 欧美a级在线免费观看 | 欧美午夜视频在线 | 成人性生交大片免费看中文网站 | 91精品视频免费在线观看 | 成人毛片100免费观看 | 999超碰| 日韩精品黄 | 亚洲一区二区三区毛片 | 国产欧美日韩视频 | 99久久999久久久精玫瑰 | 黄色亚洲大片免费在线观看 | 日韩电影在线视频 | 麻豆va一区二区三区久久浪 | 在线观看日韩精品视频 | 天天婷婷 | 久久久精品一区二区三区 | 在线免费观看国产视频 | 欧美性极品xxxx做受 | 96精品视频 | 欧美一区二区免费在线观看 | 亚洲精品视频www | 视频一区二区免费 | 西西444www高清大胆 | 爱爱一区| 亚洲女欲精品久久久久久久18 | 国产精品久久久久影院日本 | 亚洲精品乱码久久久久久高潮 | 久久再线视频 | 欧美成人h版电影 | 亚洲精品婷婷 | 久久久久久精 | av导航福利 | 国产一区欧美日韩 | 日韩久久精品一区二区三区 | 中文字幕999 | 奇米影音四色 | 久久在线看 | 日日碰狠狠添天天爽超碰97久久 | 国产精品入口麻豆www | 免费在线日韩 | 97电影院网 | 欧美激情综合五月色丁香 | 天天碰天天操视频 | 国产精品av在线免费观看 | 伊人五月天综合 | www.亚洲精品在线 | 中文字幕日韩高清 | 免费视频在线观看网站 | 国产精品一区在线 | 国产在线专区 | 国产中文伊人 | 亚洲国产精品人久久电影 | 国产成人三级三级三级97 | 特级xxxxx欧美 | 国产精品美女毛片真酒店 | 国产a高清 | 爱爱av网站| 六月色| 欧美狠狠色 | 成人小视频免费在线观看 | 午夜久久久久久久久 | 久久视频一区二区 | 人操人| 中文网丁香综合网 | 中文av影院 | 日韩成人精品在线观看 | 人人插人人看 | 欧美黄在线 | 天天做天天看 | 91高清一区 | 天堂在线成人 | 伊人看片| 99视频免费 | 久久99久久精品国产 | 久久在线一区 | 久久综合婷婷综合 | 99国产视频 | 国产精品第一页在线观看 | 日日爱av | 91精品婷婷国产综合久久蝌蚪 | 偷拍福利视频一区二区三区 | 亚洲欧美国产精品 | 91麻豆精品国产91 | 免费在线观看一区 | 国产不卡免费av | 亚洲精品免费在线视频 | 日日夜夜天天干 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 人人搞人人爽 | 久久永久免费 | 久久爱www.| 久久成人国产精品免费软件 | 日韩免费看视频 | 免费高清av在线看 | 五月天久久激情 | 久久国产精品视频 | 欧美日韩在线播放一区 | 久草a视频| 久久理论电影 | 国模视频一区二区三区 | 超碰免费观看 | 91精品久久久久久久久 | 韩国av免费看 | 天天色天天射天天干 | 99中文字幕视频 | 超碰伊人网 | av短片在线观看 | 欧美日韩高清在线 | 国产高清不卡一区二区三区 | 久久精品中文字幕免费mv | 欧美成人基地 | 精品资源在线 | 香蕉久久国产 | 国产美女视频网站 | 日韩视频中文 | 色婷婷av一区| 玖玖玖影院 | 午夜精品久久久久久久99 | 999国产 | 成人免费看片网址 | 涩涩网站在线看 | 在线亚洲观看 | 天天插天天干 | 婷婷狠狠操 | 日日躁你夜夜躁你av蜜 | 亚洲国产精品va在线看黑人动漫 | 国产精品一区在线播放 | 国产在线视频导航 | 99视频久久| 免费福利片2019潦草影视午夜 | 欧美日韩国产二区三区 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 欧美最猛性xxxxx亚洲精品 | 婷婷色 亚洲 | 81精品国产乱码久久久久久 | 日韩精品久久久免费观看夜色 | 韩国av一区二区三区在线观看 | 欧美精品首页 | 超级碰碰碰视频 | 精品国产亚洲一区二区麻豆 | 在线观看国产日韩 | 国产一区二区久久久 | 久久人人爽爽 | 亚洲精选视频在线 | 九九视频这里只有精品 | 久久久久国产精品午夜一区 | 成人精品影视 | 久久国产成人午夜av影院潦草 | 美国三级黄色大片 | 中文字幕在线观看国产 | 国产粉嫩在线观看 | 97精品国自产拍在线观看 | 久久亚洲影院 | 97成人免费视频 | 日本在线观看一区二区三区 | 久久免费国产精品1 | 国产资源免费在线观看 | 天天操天天干天天爽 | 国模吧一区| 特级毛片爽www免费版 | 国产最顶级的黄色片在线免费观看 | 色综合久久五月天 | 黄色av一区 | 国产日产亚洲精华av | 黄色在线看网站 | 国产精品久久久久av | 亚洲视频 中文字幕 | 最近日本中文字幕a | av亚洲产国偷v产偷v自拍小说 | 在线视频你懂 | 91自拍成人| 国产美女永久免费 | 久久99久久99精品免视看婷婷 | 国产精品mv | 色干综合 | 天天爽夜夜操 | 国产黄色免费看 | 国产精品一区二区三区免费视频 | 日韩精品一区二区免费视频 | 亚洲成人黄色在线 | 久久天堂网站 | 97色综合| 天天做天天爱天天综合网 | 精品久久久一区二区 | 最近日本中文字幕 | 国产精品99久久久久久久久 | 午夜国产福利在线观看 | www国产亚洲 | 在线亚洲高清视频 | 亚洲高清视频在线播放 | 一区二区三区在线观看 | 亚洲欧美精品一区二区 | 国产最顶级的黄色片在线免费观看 | 欧美久久久影院 | 色婷婷午夜| 美女黄久久 | 国产一区免费在线 | 欧美成人日韩 | 色夜视频| 99在线看| 久久人人爽人人片av | 91禁在线看 | 国产亚洲在 | 在线免费黄网站 | 久精品在线 | 国产美女免费 | 在线观看免费av网 | 国产精品字幕 | 久草网站在线 | 精品视频9999 | 国产精品视频专区 | 国产91精品看黄网站 | 丁香av在线| 免费高清无人区完整版 | 中文字幕在线网址 | 亚洲永久精品一区 | 99视频一区二区 | av在线电影免费观看 | 亚州精品视频 | 欧美性生交大片免网 | 亚洲精品高清视频在线观看 | 视频一区久久 | 日韩在线色视频 | 日韩在线视频免费观看 | 免费观看成年人视频 | 久久久久久久久久久久影院 | 日本最大色倩网站www | 国产精品一区二区三区电影 | 国产日韩中文字幕在线 | 国产精品久久久久久久电影 | 激情综合久久 | 日韩精品亚洲专区在线观看 | 久久国产精品99久久久久久老狼 | 久久av一区二区三区亚洲 | 国产最新视频在线观看 | 日韩免费在线视频 | 91香蕉视频在线 | 日韩天堂网 | 超级碰视频 | 日日夜色| 日韩影片在线观看 | 激情视频在线高清看 | 午夜精品久久久久久久99 | 天天躁日日躁狠狠躁av麻豆 | 黄色国产精品 | 久久污视频| 精品黄色在线 | 日日精品 | 国产在线播放一区二区三区 | 欧美福利视频一区 | 国产视频不卡一区 | 欧美精品首页 | 特级西西人体444是什么意思 | 日本免费久久高清视频 | 九九热只有这里有精品 | 久久不卡电影 | 国产91精品高清一区二区三区 | 正在播放国产一区 | 亚洲精选国产 | 青青五月天| 亚洲成人中文在线 | 国产麻豆剧传媒免费观看 | 久久婷婷国产色一区二区三区 | av一区二区三区在线 | 国产午夜精品福利视频 | 国产在线a不卡 | 99视频久 | 成人av一区二区三区 | 六月丁香激情综合色啪小说 | 夜夜干夜夜 | 午夜精品av在线 | 国内精品久久久久久久 | 亚洲成av人片在线观看 | 特级西西444www大精品视频免费看 | 亚洲精品福利在线 | 在线色亚洲 | 久久精品综合网 | 福利一区二区在线 | 亚洲草视频 | 狠狠色丁香久久综合网 | 蜜桃视频成人在线观看 | 免费能看的黄色片 | 久草免费福利在线观看 | 成人a大片| 亚洲区视频在线观看 | 波多野结衣在线视频一区 | 亚洲资源视频 | 欧美永久视频 | www.久久久.cum | 在线免费看片 | 在线免费看黄网站 | 久久久受www免费人成 | 亚洲免费观看视频 | 全黄色一级片 | 视频在线观看入口黄最新永久免费国产 | 久草精品网 | 丁香婷婷激情国产高清秒播 | 在线亚洲成人 | 日韩专区在线播放 | 免费97视频 | 日韩一区二区三区在线观看 | 国产亚洲精品久久久久久久久久久久 | 日产乱码一二三区别免费 | 在线综合 亚洲 欧美在线视频 | 国内精品久久天天躁人人爽 | 久久人人爽人人爽 | 中文字幕在线观看第一区 | 91大神精品视频在线观看 | 二区精品视频 | 国产欧美精品在线观看 | 日日天天av | 久久一区二区三区日韩 | 青青草华人在线视频 | 国产一级片免费观看 | av天天澡天天爽天天av | 人人爽人人爽人人片av免 | 久久色亚洲 | 特级西西www44高清大胆图片 | 亚洲一区尤物 | 国产精品九九九九九九 | 天天天天色射综合 | 亚洲精品综合一二三区在线观看 | 欧美激情h | 国产一级三级 | 99久久久免费视频 | 亚洲美女视频在线 | 精品久久国产一区 | 欧美日韩中文国产一区发布 | 成人小电影在线看 | 国产不卡免费 | 最近日本字幕mv免费观看在线 | 99精品免费在线观看 | 成人午夜影院 | 国产精品9999久久久久仙踪林 | 亚洲视频精选 | 色久天| 国产伦理一区二区三区 | 黄网站免费久久 | 97色婷婷成人综合在线观看 | 亚洲国产天堂av | 在线观看免费福利 | 日韩精品高清视频 | 日韩综合一区二区 | 四虎在线影视 | 97免费视频在线 | 婷婷色综合色 | 波多野结衣在线观看一区二区三区 | 97人人模人人爽人人喊网 | 91麻豆免费看| 狠日日| 久久久久久久久久久久国产精品 | 在线观看日韩国产 | 中文字幕综合在线 | 色在线免费观看 | 久草国产精品 | 色婷婷电影 | 免费观看的黄色 | 欧美黑人性猛交 | 精品99免费视频 | 天天干夜夜夜 | 亚洲va韩国va欧美va精四季 | 国产精品免费在线播放 | www.色就是色 | 色网站在线观看 | 国产精品美女免费视频 | 久久久久国产a免费观看rela | 又黄又爽又湿又无遮挡的在线视频 | 波多野结衣在线视频一区 | 亚洲国产精品成人精品 | 在线精品视频在线观看高清 | 男女视频久久久 | 成人精品一区二区三区电影免费 | 欧美极品少妇xbxb性爽爽视频 | 久久精品99久久久久久 | 91亚洲国产成人久久精品网站 | 在线观看精品视频 | 啪啪免费试看 | 久久在线视频精品 | 91成人久久 | 国产资源网 | 久草免费在线 | 日韩av黄 | 最近中文字幕大全中文字幕免费 | 中午字幕在线观看 | 一区二区三区日韩在线观看 | 久久久www成人免费精品 | 成人黄色一级视频 | 国产日产在线观看 | 欧美日韩国产mv | www.久久久.com | 99视频在线观看免费 | 97超级碰碰碰碰久久久久 | 日韩色一区二区三区 | 国产精品门事件 | 欧美日在线 | 天天摸天天操天天舔 | 日韩视频一区二区三区在线播放免费观看 | 天天视频色版 | 久久综合九色欧美综合狠狠 | 国产视频亚洲视频 | 五月花激情 | 高清av中文字幕 | 91禁在线看| 91精品在线免费观看视频 | 日本超碰在线 | 午夜精品成人一区二区三区 | 黄在线免费观看 | а中文在线天堂 | 欧美日韩国产成人 | 综合天堂av久久久久久久 | a视频在线播放 | 丝袜av一区 | 免费在线观看中文字幕 | 日韩理论在线播放 | 日本巨乳在线 | 久99久在线 | 综合网欧美 | 精品视频区 | 婷婷丁香社区 | 天天色天天射天天综合网 | 亚洲免费在线 | 精品1区二区| 国产成人精品一区二区在线观看 | 国产成人免费精品 | 天天操天天曰 | 日本特黄一级片 | 免费av在 | 欧美精品二 | 在线亚洲观看 | 在线观看日本高清mv视频 | 色资源网免费观看视频 | 99精品在线观看视频 | 一本到视频在线观看 | 国产高清区 | 日韩精品一区二区在线 | 一级一级一片免费 | 黄色成年 | 欧美一级视频在线观看 | 精品91久久久久 | 成人网中文字幕 | 免费观看久久 | 亚洲精品玖玖玖av在线看 | 亚洲精品国偷拍自产在线观看蜜桃 | 97在线免费 | 国产精美视频 | 国产亚洲婷婷免费 | 在线看片中文字幕 | 国产精品观看在线亚洲人成网 | 国产精品久久久久一区二区 | 99精品国产aⅴ | 一区二区三区在线免费观看视频 | 免费看国产曰批40分钟 | 国产成人精品一区二三区 | 国产精品电影一区 | 欧美黑人巨大xxxxx | 午夜精品一区二区三区在线 | 婷婷丁香av | 久久国产电影院 | 国产成人精品av | 国产午夜精品一区二区三区 | 视频在线在亚洲 | 亚洲专区在线视频 | 婷婷中文在线 | 日批网站免费观看 | 国产精美视频 | 激情五月婷婷综合 | 成人黄色电影在线 | 国产精品久久久777 成人手机在线视频 | 99视频在线观看视频 | 99人成在线观看视频 | www.五月天| 欧美国产大片 | 国产黄色片免费观看 | 精品国产aⅴ麻豆 | 91在线免费播放 | 99久久精品国产欧美主题曲 | 日韩视频免费在线观看 | 午夜精品久久久久久99热明星 | 在线影院 国内精品 | www中文在线| 国产视频一 | 国产一区 在线播放 | 久香蕉| 99久久99久久免费精品蜜臀 | 激情综合亚洲精品 | 国产69久久久欧美一级 | 色射色| 久久精品国产免费看久久精品 | 成人黄色大片在线观看 | 天天干,天天操,天天射 | av网站地址 | 成人黄色毛片视频 | 黄色视屏av | 97人人看 | 成人免费xxx在线观看 | 免费观看国产视频 | 国产精品九九九九九九 | 一二三区视频在线 | 在线影院av | 欧美另类调教 | 在线黄色av电影 | 亚洲人人网| 免费福利在线 | 中文字幕在线视频国产 | 久久久资源网 | 久久人91精品久久久久久不卡 | 一区二区三区在线观看中文字幕 | 欧美福利在线播放 | 天天射天天干天天爽 | 久久精品国产免费看久久精品 | 久久99精品波多结衣一区 | 一二三区视频在线 | 香蕉精品视频在线观看 | 九九热免费观看 | 91传媒在线播放 | 亚洲视频 中文字幕 | 综合黄色网 | 成人试看120秒 | 日韩欧美在线高清 | 91精品国产福利在线观看 | 奇米网777| 免费视频91蜜桃 | 国产成人在线一区 | 欧美aⅴ在线观看 | 久久激情电影 | 胖bbbb搡bbbb擦bbbb | 亚洲精品一区二区18漫画 | 日韩一区二区三区免费视频 | 日韩精品不卡在线观看 | 日本丶国产丶欧美色综合 | 伊人久久婷婷 | 久久精品中文字幕 | 久久精品在线 | 国产aaa免费视频 | 久久成人麻豆午夜电影 | 天天人人| 久久综合色天天久久综合图片 | www.成人精品 | 国产涩涩在线观看 | 亚洲aⅴ久久精品 | 亚洲女欲精品久久久久久久18 | 日韩视频免费观看高清 | 久久精品视频免费观看 | av免费电影网站 | 97精品在线视频 | 久久国产午夜精品理论片最新版本 | 中文字幕2021 | 免费观看成人网 | 日本资源中文字幕在线 | 九色在线| 波多野结衣日韩 | 蜜桃av观看 | 国产一区二区在线免费播放 | 国产精品va视频 | 国产欧美日韩一区 | 丁香六月色 | 日日爽天天| 婷婷激情在线观看 | 亚洲人在线视频 | 国产成人在线精品 | 激情伊人 | 亚洲高清视频在线 | 国产清纯在线 | 91精品国产自产91精品 | 中文字幕免费在线看 | 九九精品视频在线看 | 久久久久久久久久福利 | 香蕉在线影院 | 丁香5月婷婷久久 | 亚洲国产网址 | 伊人官网 | 在线亚洲午夜片av大片 | 91九色蝌蚪视频 | 亚洲日本黄色 | 中文在线√天堂 | 久热国产视频 | 国产精品人成电影在线观看 | 91热视频 | 亚洲精品视频在线观看网站 | 九九热精| 久久精品亚洲综合专区 | 在线观看成人小视频 | 久久久亚洲麻豆日韩精品一区三区 | 92精品国产成人观看免费 | 国产精品久久久区三区天天噜 | 国产精品2区 | 日韩在线观看一区二区三区 | 欧美一级大片在线观看 | 国产系列精品av | 性色av一区二区三区在线观看 | 天天干天天天 | 日韩免费在线播放 | 国产原创在线视频 | av片在线看| 在线看成人 | 黄色av电影在线观看 | 三级黄色在线观看 | 午夜精品久久久久久久99热影院 | 在线有码中文 | 一区二区三区免费在线观看 | 亚洲精品字幕在线观看 | 91在线中字| 日韩在线视频在线观看 | 国产日韩三级 | 毛片888 | 久久视频在线 | 国产乱码精品一区二区三区介绍 | 亚洲午夜精品久久久久久久久 | 久久久久久免费视频 | 国产午夜影院 | 久久久久久久久久电影 | 综合网久久 | 久久精品麻豆 | 久久免费福利 | 狠狠色丁香久久婷婷综合五月 | 日韩在线电影一区二区 | 在线观看免费观看在线91 | av蜜桃在线 | 午夜国产成人 | 国产精品美女在线 | 免费观看黄 | 色视频网站在线观看一=区 a视频免费在线观看 | 婷婷六月久久 | www.伊人网| 日韩精品免费在线观看 | 91精品免费看| 亚洲最新合集 | 黄色三级免费 | av片一区 | 天天玩天天干天天操 | 久久国产精品99久久久久久进口 | 香蕉影视app | 亚洲va在线va天堂 | 美女久久99 | 97视频免费观看 | 日韩va在线观看 | 激情久久久久久久久久久久久久久久 | 91免费观看网站 | 精品久久福利 | 成人久久18免费网站麻豆 | 99久久这里只有精品 | 国产视频精选在线 | 97视频免费在线 | 五月婷婷中文网 | 精品国产区在线 | 天天爱天天舔 | 国产成人精品福利 | 久久久午夜视频 | 天天操人人要 | 国产手机av| 欧美另类高清 videos | 最近日本字幕mv免费观看在线 | 国产精品成久久久久 | 最新国产精品拍自在线播放 | 日韩免费成人 | 国产一二三四在线观看视频 | 国产小视频免费在线观看 | 国产高清久久久久 | 欧美小视频在线观看 | 亚洲视频久久久 | 日韩欧美综合在线视频 | 九九爱免费视频在线观看 | 亚洲欧美视频在线播放 | 在线观看中文字幕一区二区 | 91丨九色丨高潮 | 亚洲精品99久久久久久 | 亚洲视频1区2区 | 日韩精品一区二区三区三炮视频 | 不卡视频在线看 | 国产精品剧情在线亚洲 | 日韩在线视频网址 | 一区二区视频在线看 | 日本精品视频在线观看 | 中文字幕在线观看亚洲 | 欧美日韩中文另类 | 欧美一级xxxx| 99久在线精品99re8热视频 | 国产精品久久久电影 | 66av99精品福利视频在线 | 日韩毛片在线免费观看 | 丝袜av网站| 国内视频在线观看 | 精品一区二区免费在线观看 | 麻豆你懂的 | 国产麻豆视频 | 国产精品欧美 | 久久久伦理 | www.av免费观看 | 成人中文字幕+乱码+中文字幕 | 亚洲综合少妇 | 中文字幕在线观看国产 | 国产一级二级在线播放 | 天天干天天碰 | 四虎永久免费网站 | 亚洲综合涩 | 999亚洲国产996395 | 丁香视频全集免费观看 | 日p视频在线观看 | 五月婷婷毛片 | 色是在线视频 | 免费视频久久久 | 97品白浆高清久久久久久 | a√天堂中文在线 | 日韩欧美一区二区三区在线 | 欧美一级片在线播放 | 日本九九视频 | 国产手机视频在线观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 天天看天天干天天操 | 九色免费视频 | 99热最新网址 | 中文字幕欧美日韩va免费视频 | 日本女人逼 | 日韩在线影视 | 中文免费观看 | 精品国产视频一区 | 免费看黄在线网站 | 超碰在线网 | 天天鲁一鲁摸一摸爽一爽 | 亚洲视频久久久久 | 亚洲午夜精品久久久 | 国产精品欧美日韩在线观看 | 日韩欧美视频在线免费观看 | 天天天插 | 国产一区精品在线 | 狠狠色丁香久久婷婷综合丁香 | 天天添夜夜操 | 91av资源在线 | 又黄又爽的视频在线观看网站 | 日韩精品电影在线播放 | 免费网址你懂的 | 日韩精品视频免费看 | av黄色一级片 | 奇米影视777影音先锋 | 亚洲另类视频在线 | 超碰在线天天 | 国产手机在线播放 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 久射网 | 日韩视频中文字幕 | 一本—道久久a久久精品蜜桃 | 国产男女爽爽爽免费视频 | 久久色在线观看 | 成人黄在线观看 | av黄网站| 91av超碰| 国产破处精品 | 亚洲日本精品视频 | 中文字幕在线久一本久 | 黄色av电影一级片 | 人人爽人人爽人人爽学生一级 | 在线观看岛国av | 国产精品一区二区三区在线 | 成人91av | 久久人人精品 | 操天天操| 天天操天天操天天操天天 | 天天干天天摸天天操 | 午夜私人影院久久久久 | 91在线影视 | av色网站| 黄色日本片 | 三级黄色免费片 | 国产中出在线观看 | 波多野结衣在线观看一区 | 亚洲精品国久久99热 | 999国产 | 天天操人人干 | 99r在线视频 | 三级动态视频在线观看 | 在线免费国产视频 | 天天干天天插伊人网 | 午夜精品久久久久久久久久久久 | 日本三级吹潮在线 | 99精品国产在热久久下载 | 免费色视频网站 | 激情久久五月天 | 国产精品二区三区 | 国产精品手机在线观看 | 狠狠色伊人亚洲综合成人 | 亚洲人av免费网站 | 日韩在线欧美在线 | 成人99免费视频 | 在线观看日韩免费视频 | 久久天天综合网 | 午夜久久福利影院 | 91天天操| 亚洲视频在线观看网站 | 亚洲一区精品二人人爽久久 | 91福利视频久久久久 | 欧美极品少妇xxxx | 国产午夜精品一区二区三区四区 | 99久久精品久久亚洲精品 | 亚洲精品在线观看网站 | 在线 国产一区 | 天天摸天天操天天爽 | 国产无遮挡猛进猛出免费软件 | 久热国产视频 | 99国产一区 | 日韩av女优视频 | 狠狠狠色丁香婷婷综合久久五月 | 四虎在线免费观看 | 精品乱码一区二区三四区 | 国产成人综合精品 | 1000部国产精品成人观看 | 精品乱码一区二区三四区 | 激情av网址 | 大荫蒂欧美视频另类xxxx |