精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

10分鐘學會 Python 函數基礎知識

開發 后端 新聞
簡單地說,一個函數就是一組Python語句的組合,它們可以在程序中運行一次或多次運行。Python中的函數在其他語言中也叫做過程或子例程,那么這些被包裝起來的語句通過一個函數名稱來調用。

 一、函數基礎

簡單地說,一個函數就是一組Python語句的組合,它們可以在程序中運行一次或多次運行。Python中的函數在其他語言中也叫做過程或子例程,那么這些被包裝起來的語句通過一個函數名稱來調用。

[[271067]]

有了函數,我們可以在很大程度上減少復制及粘貼代碼的次數了(相信很多人在剛開始時都有這樣的體驗)。我們可以把相同的代碼可以提煉出來做成一個函數,在需要的地方只需要調用即可。那么,這樣就提高了代碼的復用率了,整體代碼看起來比較簡練,沒有那么臃腫了。

函數在Python中是很基本的程序結構,用來充分地讓我們的代碼進行復用;與此同時,函數可以把一個錯綜復雜的系統分割為可管理的多個部分,簡化編程、代碼復用。

接下來我們看看什么是函數,及函數該如何定義。有兩種方式可以進行函數的定義,分別是def及lambda關鍵字。

1. 函數定義

先總結一下為什么要使用函數?

代碼復用***化及最小化冗余代碼;過程分解(拆解)。把一個復雜的任務拆解為多個小任務。

函數定義的語法為:

  1. def func_name(arg1, arg2, arg3, ..., argN):  
  2. statement  
  3. return value 

根據上面定義,可以簡單地描述為:Python中的函數是具有0個或多個參數,具有若干行語句并且具有返回值(返回值可有可無)的一個語句塊(注意縮進)。

那么我們就定義一個比較簡單的函數,該函數沒有參數,進入ipython交互式環境:

  1. In[1]: def hello(): 
  2. ...: print('Leave me alone, the world' 
  3. ...: 

調用(執行)該函數:

  1. In[2]: hello() 
  2. Leave me alone, the world 

我們發現hello()函數并沒有return語句,在Python中,如果沒有顯式的執行return語句,那么函數的返回值默認為None。

我們說過,定義函數有兩種形式,另外一種形式是使用lambda來定義。使用lambda定義的函數是匿名函數,這個我們在后面的內容進行講解,這里暫且不表。

二、函數參數

定義函數的時候,我們把參數的名字和位置確定下來,函數的接口定義就完成了。對于函數的調用者來說,只需要知道如何傳遞正確的參數,以及函數將返回什么樣的值就夠了,函數內部的復雜的邏輯被封裝起來,調用者無需了解。

Python的函數定義非常簡單,但靈活度卻非常大。除了正常定義的必選參數外,還可以使用默認參數、可變參數和關鍵字參數,使得函數定義出來的接口,不但能處理復雜的參數,還可以簡化調用者的代碼。

1. 默認參數

默認參數使得API簡潔,但不失靈活性。當一個參數有默認值時,調用時如果不傳遞此參數時,會使用默認值。

  1. def inc(init, step=1): 
  2. return init + step 
  3. # 調用一下這個函數 
  4. >>> inc(3) 
  5. >>> inc(3, 2) 

默認參數有一個坑,就是非默認參數要放到默認參數的前面(不然Python的解釋器會報語法錯誤)。允許有多個默認參數,但默認參數需要放在參數列表的***面。

  1. def append(x, lst=[]): 
  2. return lst.append(x) 

此函數有問題。(函數中的形參是全局變量?lst在append函數中叫lst,但在全局作用域中,我們不知道lst具體叫什么名字。)

修改之后的函數為:

  1. def append(x, lst=None): 
  2. if lst is None: 
  3. lst = [] 
  4. lst.append(x) 
  5. return lst 

通常來說,當默認參數是可變的時候,需要特別注意作用域的問題,我們需要上述的技巧(不可變的數據類型是值傳遞,可變的數據類型是引用傳遞。)。目前可變的對象為list,dict,set,bytearray。

默認參數很有用,但使用不當,也會掉坑里。默認參數有個很大的坑,演示如下:

# 先定義一個函數,傳入一個list,添加一個END再返回

  1. def add_end(L=[]): 
  2. L.append('END'
  3. return L 

當我們正常調用時,結果似乎不錯:

  1. >>> add_end([1, 2, 3]) 
  2. [1, 2, 3, 'END'
  3. >>> add_end(['x''y''z']) 
  4. ['x''y''z''END'

當我們使用默認參數調用時,一開始結果也是對的:

  1. >>> add_end() 
  2. ['END'

但是,再次調用add_end()時,結果就不對了:

  1. >>> add_end() 
  2. ['END''END'
  3. >>> add_end() 
  4. ['END''END''END'

原因解釋如下:

Python函數在定義的時候,默認參數L的值就被計算出來了,即[],因為默認參數L也是一個變量,它指向對象[],每次調用該函數,如果改變了L的內容,則下次調用時,默認參數的內容就變了,不再是函數定義時的[]了。

所以,定義默認參數要牢記一點:默認參數必須指向不變對象!

要修改上面的例子,我們可以用None這個不變對象來實現:

  1. def add_end(L=None): 
  2. if L is None: 
  3. L = [] 
  4. L.append('END'
  5. return L 

為什么要設計str、None這樣的不變對象呢?因為不變對象一旦創建,對象內部的數據就不能修改,這樣就減少了由于修改數據導致的錯誤。此外,由于對象不變,多任務環境下同時讀取對象不需要加鎖,同時讀一點問題都沒有。我們在編寫程序時,如果可以設計一個不變對象,那就盡量設計成不變對象。

2. 位置參數

我們先寫一個計算x^2的函數:

  1. def power(x): 
  2. return x * x 

對于power(x)函數,參數x就是一個位置參數。當我們調用power函數時,必須傳入有且僅有的一個參數x:

  1. >>> power(5) 
  2. 25 
  3. >>> power(15) 
  4. 225 

現在,如果我們要計算x^3怎么辦呢?可以再定義一個power3函數,但是如果要計算x^4、x^5、x^n,怎么辦?我們不可能定義***多個函數,我們可以把power(x)修改為power(x, n),用來計算x^n,說寫就寫:

  1. def power(x, n): 
  2. s = 1 
  3. while n > 0: 
  4. n = n - 1 
  5. s = s * x 
  6. return s 

3. 關鍵字參數

可變參數允許我們傳入0個或任意個參數,這些可變參數在函數調用時自動組裝為一個tuple。而關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。示例如下:

  1. def person(name, age, **kwargs): 
  2. print('name:'name'age:', age, 'other:', kwargs) 

函數person除了必選參數name和age外,還接受關鍵字參數kwargs。在調用該函數時,可以只傳入必選參數:

  1. >>> person('LavenLiu', 25) 
  2. name: LavenLiu age: 25 other: {} 

也可以傳入任意個數的關鍵字參數:

  1. >>> person('LavenLiu', 25) 
  2. name: LavenLiu age: 25 other: {} 
  3. >>> person('Taoqi', 25, city='Hebei'
  4. name: Taoqi age: 25 other: {'city''Hebei'
  5. >>> person('James', 31, gender='M', job='NBA player'
  6. name: James age: 31 other: {'gender''M''job''NBA player'

關鍵字參數有什么用?它可以擴展函數的功能。比如,在person函數里,我們保證能接收到name和age這兩個參數,但是,如果調用者愿意提供更多的參數,我們也能收到。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關鍵字參數來定義這個函數就能滿足注冊的需求。

和可變參數類似,也可以先組裝出一個dict,然后,把該dict轉換為關鍵字參數傳進去:

  1. >>> kwargs = {'city''Hebei''job''Test'
  2. >>> person('Taoqi', 25, **kwargs) 
  3. name: Taoqi age: 25 other: {'city''Hebei''job''Test'

4. 位置參數和關鍵字參數

位置參數和關鍵字參數是函數調用時的概念。

當默認參數和關鍵字參數結合起來用的時候,很有用。

關鍵字參數必須寫在位置參數之后,否則會拋出語法錯誤。

  1. def minus(x, y): 
  2. return x - y 
  3. minus(3, 5) # 位置參數,位置傳參 
  4. minus(5, 3) # 位置參數,位置傳參 
  5. minus(x=5, y=3) # 關鍵字參數,關鍵字傳參 
  6. minus(y=3, x=5) # 關鍵字參數,關鍵字傳參 

位置參數和關鍵字參數可以共存,但是關鍵字參數必須寫到位置參數之后。

5. 可變位置參數

可變位置參數用*定義,在函數體內,可變位置參數是一個元組。

可變位置參數。

  1. In[1]: def fn(*args): 
  2. ...: print(args)  
  3. ...:  
  4. In[2]: fn((1, 2, 3, 4))  
  5. ((1, 2, 3, 4),)  
  6. In[3]: tup01 = (1, 2, 3, 4)  
  7. In[4]: fn(tup01)  
  8. ((1, 2, 3, 4),) 
  9. In[5]: fn(*tup01)  
  10. (1, 2, 3, 4) 

在python的函數中,還可以定義可變參數。可變參數就是傳入的參數個數是可變的。

  1. In[6]: def cacl(*numbers):  
  2. ...: sum = 0  
  3. ...: for n in numbers:  
  4. ...: sum = sum + n * n  
  5. ...: return sum  
  6. ...:  
  7. In[7]: nums = [1, 2, 3]  
  8. In[8]: cacl(*nums) # 這里如果不在nums前面加*,有問題嗎? 
  9. Out[8]: 14 

6. 可變關鍵字參數

可變關鍵字參數使用**定義,在函數體內,可變關鍵字參數是一個字典。可變關鍵字參數的key都是字符串,并且符合標識符定義規范。

  1. def fn(**kwargs): 
  2. print(kwargs) 
  3. dict01 = {'name''Laven Liu''age': 29} 
  4. fn(**dict01) 
  5. # fn(dict01) 
  6. fn(name='Laven Liu', age=29) 
  7. {'name''Laven Liu''age': 29} 
  8. {'name''Laven Liu''age': 29} 

可變位置參數只能以位置參數的形式調用可變關鍵字參數只能以關鍵字參數的形式調用可變位置參數必須在可變關鍵字參數之前

  1. In[18]: def fn(*args, **kwargs): 
  2. ...: print(args) 
  3. ...: print(kwargs)  
  4. ...:  
  5. In[19]: fn(1, 2, 3, a=1, b=2)  
  6. (1, 2, 3)  
  7. {'a': 1, 'b': 2}  
  8. In[20]: def fn(*args, x, y):  
  9. ...: print(args) 
  10. ...: print(x, y)  
  11. ...:  
  12. In[21]: fn(1, 2, 3, 4) 
  13. --------------------------------------------------------------------------- 
  14. TypeError Traceback (most recent call last 
  15. in ()  
  16. ----> 1 fn(1, 2, 3, 4) 
  17. TypeError: fn() missing 2 required keyword-only arguments: 'x' and 'y' 
  18. In[22]: fn(1, 2, x=3, y=4)  
  19. (1, 2)  
  20. 3 4 

可變參數后置可變參數不和默認參數一起出現

7. 參數組合

在Python中定義函數,可以用必選參數、默認參數、可變參數和關鍵字參數,這4種參數都可以一起使用,或者只用其中某些,但是請注意,參數定義的順序必須是: 必選參數、默認參數、可變參數和關鍵字參數

比如定義一個函數,包含上述4種參數:

  1. >>> def func(a, b, c=0, *args, **kwargs): 
  2. ... print('a =', a, 'b =', b, 'c =', c, 'args = ', args, 'kwargs = ', kwargs) 

在函數調用的時候,Python解釋器自動按照參數位置和參數名把對應的參數傳進去。

  1. >>> func(1, 2) 
  2. a = 1 b = 2 c = 0 args = () kwargs = {} 
  3. >>> func(1, 2, c=3) 
  4. a = 1 b = 2 c = 3 args = () kwargs = {} 
  5. >>> func(1, 2, 3, 'a''b'
  6. a = 1 b = 2 c = 3 args = ('a''b') kwargs = {} 
  7. >>> func(1, 2, 3, 'a''b', x=99) 
  8. a = 1 b = 2 c = 3 args = ('a''b') kwargs = {'x': 99} 
  9. >>> 

最神奇的是通過一個tuple和dict,我們也可以調用該函數:

  1. >>> args = (1, 2, 3, 4) 
  2. >>> kwargs = {'x': 99} 
  3. >>> func(*args, **kwargs) 
  4. a = 1 b = 2 c = 3 args = (4,) kwargs = {'x': 99} 

所以,對于任意函數,都可以通過類似func(*args, **kwargs)的形式調用它,無論它的參數是如何定義的。

8. 參數解構

參數解構發生在函數調用時,可變參數發生函數定義的時候。參數解構分為兩種形式,一種是位置參數解構,另一種是關鍵字參數解構。

參數結構的兩種形式:

位置參數解構,使用一個星號。解構的對象為可迭代對象,解構的結果為位置參數。關鍵字參數解構,使用兩個星號。解構的對象為字典,解構的結果為關鍵字參數。

位置參數解構的一個例子:

  1. In[23]: def fn(a, b, c): 
  2. ...: print(a, b, c) 
  3. ...: 
  4. In[24]: lst = [1, 2, 3] 
  5. In[25]: fn(lst[0], lst[1], lst[2]) 
  6. 1 2 3 
  7. # 也可以進行如下形式的調用 
  8. In[26]: fn(*lst) # 這種做法就叫參數解構 
  9. 1 2 3 
  10. # *號可以把線性結構解包成位置參數 
  11. lst = [1, 2, 3, 4] 
  12. fn(*lst) # -> fn(lst[0], lst[1], lst[2], lst[3]) 
  13. TypeError: fn() takes 3 positional arguments but 4 were given 

# 這里就報錯了,本來這個函數只能接收3個位置參數,lst有四個元素,通過參數解構之后,就變成了4個參數,所以就報錯了。

接下來看字典解構的例子:

  1. In[27]: d = {'a': 1, 'b': 2, 'c': 3} 
  2. In[28]: fn(**d) 
  3. 1 2 3 
  4. # **可以把字典解構成關鍵字參數 

參數解構發生在函數調用時。解構的時候,線性結構的解構是位置參數,字典解構是關鍵字參數。

傳參的順序:位置參數,線性結構解構;關鍵字參數,字典解構。盡量的少的同時使用兩種解構,除非你真的知道在做什么。

  1. In[29]: def fn(a, b, c, d): 
  2. ...: print(a, b, c, d) 
  3. ...: 
  4. In[30]: fn(0, *[2], c=1, **{'d': 3}) 
  5. 0 2 1 3 

9. 參數槽(keyword-only參數)

Python3中引入的。

  1. def fn(a, b, c): 
  2. print(a, b, c) 
  3. fn(a=1, b=2, c=3) 

如果要強制傳入的參數為關鍵字參數:

  1. def fn(*, a, b, c): 
  2. print(a, b, c) 
  3. >>> fn(1, 2, 3) 
  4. Traceback (most recent call last): 
  5. File "", line 1, in 
  6. fn(1, 2, 3) 
  7. TypeError: fn() takes 0 positional arguments but 3 were given 
  8. >>> fn(a=1, b=2, c=3) 
  9. 1 2 3 

# *之后的參數,必須以關鍵字參數的形式傳遞,稱之為參數槽。

參數槽通常和默認參數搭配使用。

  1. >>> def fn(a, b, *, x, y): 
  2. print(a, b) 
  3. print(x, y) 
  4. >>> fn(1, 2, 3, 4) 
  5. Traceback (most recent call last): 
  6. File "", line 1, in 
  7. fn(1, 2, 3, 4) 
  8. TypeError: fn() takes 2 positional arguments but 4 were given 
  9. >>> fn(1, 2, x=3, y=4) 
  10. 1 2 
  11. 3 4 
  12. >>> fn(1, 2, **{'x': 3, 'y': 4}) 
  13. 1 2 
  14. 3 4 
  15. def fn(a, b, *): 
  16. print(a, b) 
  17. def fn(a, b, *): 
  18. .. print(a, b) 
  19. File "", line 1 
  20. SyntaxError: named arguments must follow bare * 
  21. 幾個例子: 
  22. def fn01(*, x=1, y=5): 
  23. print(x) 
  24. print(y) 
  25. >>> fn01() 
  26. def fn02(x=1, *, y): 
  27. print(x) 
  28. print(y) 
  29. >>> fn02(y=3) 

參數槽之坑:

*之后必須有參數非命名參數有默認值時,命名參數可以沒有默認值默認參數應該在每段參數的***使用參數槽時,不能使用可變位置參數,可變關鍵之參數必須放在命名參數之后

三、高級用法

1. 遞歸函數

在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。

  1. def fact(n): 
  2. if n==1: 
  3. return 1 
  4. return n*fact(n-1) 

使用遞歸函數的優點是邏輯簡單清晰,缺點是過深的調用會導致棧溢出。

針對尾遞歸優化的語言可以通過尾遞歸防止棧溢出。尾遞歸事實上和循環是等價的,沒有循環語句的編程語言只能通過尾遞歸實現循環。

2. 匿名函數 lambda

python 使用 lambda 來創建匿名函數。

lambda只是一個表達式,函數體比def簡單很多。

lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。

lambda函數擁有自己的名字空間,且不能訪問自有參數列表之外或全局名字空間里的參數。

雖然lambda函數看起來只能寫一行,卻不等同于C或C++的內聯函數,后者的目的是調用小函數時不占用棧內存從而增加運行效率。

  1. fib = lambda n,x=0,y=1:x if not n else fib(n-1,y,x+y) 
  2. print(fib(20)) 

3. Python函數中的多態

一個操作的意義取決于被操作對象的類型:

  1. def times(x,y): 
  2. return x*y 
  3. >>>times(2,4) 
  4. >>>8 
  5. times('Python',4) # 傳遞了與上不同的數據類型 'PythonPythonPythonPython' 

四、總結

Python的函數具有非常靈活的參數形態,既可以實現簡單的調用,又可以傳入非常復雜的參數。

默認參數一定要用不可變對象,如果是可變對象,運行會有邏輯錯誤!

要注意定義可變參數和關鍵字參數的語法:

*args是可變參數,args接收的是一個tuple;

**kwargs是關鍵字參數,kwargs接收的是一個dict。

以及調用函數時如何傳入可變參數和關鍵字參數的語法:

可變參數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過*args傳入:func(*(1, 2, 3));

關鍵字參數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過kwargs傳入:func({'a': 1, 'b': 2})。

使用*args和**kwargs是Python的習慣寫法,當然也可以用其他參數名,但應該使用習慣用法。

責任編輯:華軒 來源: 今日頭條
相關推薦

2018-02-01 14:15:00

Python函數

2018-11-28 11:20:53

Python函數式編程編程語言

2020-10-14 11:31:41

Docker

2021-07-15 06:43:11

Bash調試腳本

2019-12-24 09:10:43

Ipv6IP址協議

2024-03-04 15:19:52

Python編程內建函數

2021-05-27 07:12:19

Python函數裝飾器

2023-12-30 13:41:39

JSON格式數據

2024-05-07 10:19:25

前端裝飾器計算

2019-11-25 09:44:21

IPv6地址網絡

2022-03-08 08:39:22

gRPC協議云原生

2015-03-12 17:01:33

MySQLMySQL亂碼編碼轉換

2018-08-30 09:01:28

Web服務器Windows 10

2024-07-10 18:55:09

Python定時

2020-05-22 10:20:27

Shiro架構字符串

2016-12-22 21:47:04

SEDLinuxUnix

2021-03-13 10:14:59

Python定義函數Python基礎

2022-05-30 08:34:49

PythonSQL

2016-09-13 20:58:41

MySQ基礎入門Sql

2013-09-13 14:08:01

點贊
收藏

51CTO技術棧公眾號

免费成人直播| 九九九伊在人线综合| 欧美三区视频| 一区二区三区黄色| 欧美老女人bb| 波多野结衣亚洲| ●精品国产综合乱码久久久久| av色综合网| 无码人妻精品一区二区三区9厂 | 奇米四色…亚洲| 久久久精品一区二区| 亚洲黄色免费在线观看| 日日夜夜亚洲| 欧美网站在线观看| 好吊色这里只有精品| 亚洲 欧美 激情 小说 另类| 狠狠v欧美v日韩v亚洲ⅴ| 欧美极品美女电影一区| 日韩不卡av在线| 白嫩白嫩国产精品| 欧美日韩综合在线| 亚洲中文字幕无码中文字| 黄色动漫在线观看| 中文字幕乱码亚洲精品一区 | 欧美熟女一区二区| 精品系列免费在线观看| 国产成+人+综合+亚洲欧洲| 久久久久久久久97| 偷拍欧美精品| 中文字幕日韩在线播放| 一区二区三区免费在线观看视频| 欧美午夜在线播放| 欧美日韩免费观看一区三区| 黄色动漫网站入口| 福利成人导航| 一区二区三区免费看视频| 亚洲一区二区在线看| 毛片在线播放网址| 91香蕉视频污| 国产在线精品一区二区三区》| 99精品久久久久久中文字幕| 久久福利视频一区二区| 国产精品日韩在线| 国产情侣呻吟对白高潮| 日韩高清不卡在线| 日av在线播放中文不卡| 在线观看亚洲欧美| 一本久道久久综合狠狠爱| 午夜精品久久久久久久99黑人| 中文字幕在线观看成人| 欧美91精品| 久久国产精品免费视频| 91视频综合网| 午夜日韩在线| 久久久噜噜噜久久中文字免| 国产精选第一页| 黄色亚洲在线| 97人人做人人爱| 亚洲日本韩国在线| 美女久久网站| 国产精品私拍pans大尺度在线| 久久久999久久久| 免费的国产精品| 成人精品在线视频| 国产wwwxxx| 粉嫩蜜臀av国产精品网站| 国产精品免费看一区二区三区| 色欲av永久无码精品无码蜜桃| 99久久精品免费精品国产| 久久精品二区| 成人精品一区二区三区免费| 国产日韩精品视频一区| 一本一生久久a久久精品综合蜜 | 亚洲三级在线免费观看| 欧洲xxxxx| www.51av欧美视频| 色国产综合视频| 久久国产激情视频| 日韩免费成人| 日韩精品欧美国产精品忘忧草| 中文字幕在线永久| av影片在线一区| 久久的精品视频| 国产一级在线免费观看| 麻豆精品91| 91精品啪aⅴ在线观看国产| 手机av在线免费观看| 国产日韩综合av| 91精品国产毛片武则天| 亚洲天堂资源| 欧美军同video69gay| 88av在线播放| 成人羞羞网站入口免费| 欧美激情视频在线观看| 丰满少妇xoxoxo视频| 久久成人18免费观看| 国产伦精品一区二区三区照片91| 久久电影中文字幕| 亚洲一区二区三区小说| 国产黄色特级片| 中文字幕久久精品一区二区| 国产亚洲欧美aaaa| 69av视频在线| 日韩国产成人精品| 国产专区一区二区三区| 男人资源在线播放| 黑丝美女久久久| 红桃视频一区二区三区免费| 日韩成人午夜| 久久99精品国产99久久6尤物| 久久久久久久久黄色| 国产激情一区二区三区| 日韩欧美在线观看强乱免费| 好吊日av在线| 正在播放亚洲一区| 亚洲码无人客一区二区三区| 一区在线视频观看| 成人乱人伦精品视频在线观看| 深夜视频在线免费| 亚洲一区二区三区中文字幕在线| 成人黄色一级大片| 精品国产一区二区三区| 91精品国产高清久久久久久91| 国产精品熟女久久久久久| 久久久久久久国产精品影院| 精品国产一区二区三区无码| 高清在线一区二区| 中文字幕免费精品一区高清| 欧美黑人一区二区| av中文字幕在线不卡| 日韩一级片一区二区| 日韩综合久久| 日韩在线小视频| 中文字幕视频免费观看| 国产视频在线观看一区二区三区| 免费国产黄色网址| 精品国产导航| 午夜精品在线视频| 欧美熟妇乱码在线一区| 亚洲中国最大av网站| 亚洲热在线视频| 中文乱码免费一区二区三区下载| 国产剧情久久久久久| 99re在线视频| 欧美综合色免费| 99精品全国免费观看| 人人狠狠综合久久亚洲| 亚洲草草视频| 日韩久久一区| 久久精品视频免费播放| 国产毛片在线视频| 亚洲美女免费在线| 香蕉在线观看视频| 极品av少妇一区二区| 国产欧美日韩综合精品二区| 成年人黄色大片在线| 日韩av在线精品| 国产一区二区视频免费| 欧美国产精品一区| 噼里啪啦国语在线观看免费版高清版| 国产麻豆一区二区三区精品视频| 日韩av免费在线播放| 国产三级在线| sm国产在线调教视频| 国产精品久久久久9999吃药| 亚洲色精品三区二区一区| 久久av中文| 国产精品网站大全| 成人短视频在线| 精品国产一区二区亚洲人成毛片| 日本三级欧美三级| 久久在线免费观看| 超碰超碰在线观看| 亚洲欧美伊人| 欧美高清视频一区| 久久日本片精品aaaaa国产| 欧美xxxx做受欧美| 日本波多野结衣在线| 在线观看区一区二| 69xx绿帽三人行| 成人av在线资源网| 国产精品人人妻人人爽人人牛| 久久网站免费观看| 不卡日韩av| 成人黄色免费短视频| 久久久国产精品免费| 欧洲成人一区二区三区| 色婷婷久久99综合精品jk白丝| 任你操精品视频| 成人午夜免费视频| www.激情小说.com| 黄色日韩精品| 亚洲日本欧美在线| 精品亚洲精品| 91精品国产综合久久久久久蜜臀 | 亚洲欧美综合另类在线卡通| 无码人妻一区二区三区精品视频| 久久一区中文字幕| 狠狠精品干练久久久无码中文字幕| 日韩手机在线| 亚洲a级在线播放观看| 久久久久久久| 欧美精品videosex性欧美| chinese偷拍一区二区三区| 欧美大片顶级少妇| 在线免费观看视频网站| 五月天亚洲婷婷| 欧美又粗又大又长| 中文字幕乱码亚洲精品一区| 99re久久精品国产| 国产一区二区精品久久99| 国产性生交xxxxx免费| 激情久久中文字幕| 偷拍盗摄高潮叫床对白清晰| 九九综合久久| 黄色小网站91| 国产日韩在线观看视频| 国产精品久久久久久久久久久久久 | 久久a爱视频| 91中文字幕在线| 成人国产一区| 热99在线视频| 国产夫妻在线播放| 欧美理论片在线观看| 视频三区在线| 在线免费看av不卡| 毛片网站在线观看| 精品视频www| 欧美一级视频免费| 日韩精品中文字幕一区二区三区 | 久久99久久久久久| 99久久精品费精品国产| 神马影院我不卡| 精品日韩在线| 日韩片电影在线免费观看| 一呦二呦三呦国产精品| 精品在线视频一区二区| 极品束缚调教一区二区网站 | 亚洲第一狼人社区| 精品99在线观看| 亚洲免费观看在线视频| 黄色香蕉视频在线观看| 中文字幕中文字幕中文字幕亚洲无线| 欧美激情视频二区| 国产精品美女久久久久久久久久久 | 亚洲精品小区久久久久久| 久久久久一区二区| 日韩精品a在线观看91| 麻豆成人小视频| 少妇精品久久久| 日韩精品国内| 国产精品99久久精品| eeuss中文| 欧美日本不卡高清| www.射射射| 亚洲永久免费精品| 大香煮伊手机一区| 美女网站在线免费欧美精品| 黄色手机在线视频| 国产一区在线看| 99免费观看视频| 99久久国产综合色|国产精品| 国产精品久久不卡| 国产偷v国产偷v亚洲高清| 午夜黄色福利视频| 一区二区视频在线| 成人毛片18女人毛片| 91传媒视频在线播放| 艳妇乳肉豪妇荡乳av| 欧美一区二区黄| 少妇av一区二区| 在线观看不卡av| 欧美aaaaaaa| 日本成熟性欧美| 欧美黄页在线免费观看| 9a蜜桃久久久久久免费| 黄色欧美网站| 涩涩日韩在线| 激情欧美亚洲| 国产一级片黄色| 国产精品亚洲视频| 欧美成人三级伦在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲一级生活片| 精品久久久中文| 中文字幕在线观看第二页| 日韩你懂的在线播放| 午夜福利视频一区二区| www.xxxx欧美| sqte在线播放| 国产精品羞羞答答| 国产福利一区二区精品秒拍| 三区精品视频| 韩国亚洲精品| 欧美大尺度做爰床戏| 成人小视频在线观看| 日日碰狠狠添天天爽| 婷婷综合五月天| 国产精品高潮呻吟AV无码| 亚洲精品国产品国语在线| 在线免费看a| 欧美怡红院视频一区二区三区| 综合久久av| 欧美一区1区三区3区公司| 精品1区2区3区4区| 一区二区xxx| 91免费视频网| 九九九在线视频| 欧美美女激情18p| 国产免费永久在线观看| 国产做受高潮69| 另类视频一区二区三区| 亚洲成人午夜在线| 一区二区国产在线观看| 先锋资源在线视频| 国产精品乱码人人做人人爱| 在线精品免费视| 亚洲国产精久久久久久 | 天天干天天曰天天操| 亚洲国产高清不卡| 国产精品va无码一区二区三区| 精品久久久久香蕉网| 麻豆av在线免费看| 国产精品久久久久久久一区探花| 婷婷精品视频| 欧美 丝袜 自拍 制服 另类| 国产成人免费视频精品含羞草妖精| 中国美女黄色一级片| 91国偷自产一区二区开放时间 | 性猛交╳xxx乱大交| 日韩美女久久久| 在线观看色网站| 伊人伊成久久人综合网小说 | 亚洲va久久久噜噜噜久久天堂| 成人一区不卡| 999精品视频在线| 国产亚洲短视频| 天堂网中文字幕| 亚洲人成在线免费观看| 一区二区精品伦理...| 麻豆av一区二区三区| 久久伊人亚洲| www亚洲色图| 欧美日韩综合不卡| 97在线观看免费观看高清 | 国产精品乱战久久久| 高清无码视频直接看| 国产成人h网站| 久久成人在线观看| 亚洲成av人片在线观看香蕉| av电影在线地址| 欧美国产二区| 日韩av电影天堂| 黄大色黄女片18免费| 欧美精品一卡两卡| 欧美精品电影| 成人免费视频网站| 中文欧美日韩| 波多野结衣一本| 欧美性大战久久久| 麻豆视频免费在线观看| 亚洲a中文字幕| 亚洲精品乱码| 欧美日韩高清丝袜| 欧美日韩亚洲高清一区二区| 超碰最新在线| 国产精品免费一区二区三区四区| 国产日韩1区| 精品一区二区6| 日韩欧美色电影| 悠悠资源网亚洲青| 亚洲欧美日韩国产成人综合一二三区| 久久99久久精品| 日本午夜小视频| 亚洲性日韩精品一区二区| 91九色成人| 欧美不卡在线播放| 国产欧美精品一区二区三区四区| 一区二区视频在线免费观看| 欧美第一黄色网| 国产精品一区二区av交换| www.色就是色.com| 五月天一区二区三区| 在线观看免费黄视频| 国产精品毛片va一区二区三区| 丝袜美腿亚洲一区| 欧美成人精品欧美一级| 亚洲精品视频二区| av在线成人| www黄色av| 一区二区在线观看视频| 黄色在线网站| 成人免费观看网站| 麻豆91精品视频| 日韩三级视频在线播放| 色婷婷成人综合| 亚洲精品一级二级三级| 免费观看黄网站| 欧美又粗又大又爽| 国产直播在线|