国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

小姐姐的Python隱藏技巧合集,推特2400贊,代碼可以直接跑

新聞 前端
常常發資源的英偉達工程師小姐姐Chip Huyen,又發了一套Python隱藏功能合集。里面都是她“從前沒發現,或者從前不太敢用”的機器學習技巧,有notebook可以直接跑。

 [[280131]]小姐姐的Python隱藏技巧合集,推特2400贊,代碼可以直接跑">

本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。

常常發資源的英偉達工程師小姐姐Chip Huyen,又發了一套Python隱藏功能合集

里面都是她“從前沒發現,或者從前不太敢用”的機器學習技巧,有notebook可以直接跑。

合集名叫python-is-cool,推特宣布之后不到半天,已經收獲了2400+贊。

英偉達<span><span><span><i style=小姐姐的Python隱藏技巧合集,推特2400贊,代碼可以直接跑">

那么,這份令人奔走相告的資源,到底長什么樣子?

隱藏技巧五大類

就像開頭提到的:這里的功能,要么是小姐姐花了很久才找到的,要么是曾經讓她瑟瑟發抖到不敢嘗試的。

不過現在,她的技巧已經成功支配了這些功能,于是分享了出來。

目前一共有5個版塊,專注機器學習,日后還會持續更新:

1、Lambda、Map、Filter、Reduce函數

lambda 關鍵字,是用來創建內聯函數 (Inline Functions) 的。square_fn 和 square_ld 函數,在這里是一樣的。

  1. 1def square_fn(x): 
  2. 2 return x * x 
  3. 3 
  4. 4square_ld = lambda x : x * x 
  5. 5 
  6. 6for i in range(10): 
  7. 7 assert square_fn(i) == square_ld(i) 

lambda 函數可以快速聲明,所以拿來當回調 (Callbacks) 函數是非常理想的:就是作為參數 (Arguments) 傳遞給其他函數用的,那種函數。

和 map、filter 和 reduce 這樣的函數搭配使用,尤其有效。

map(fn,iterable) 會把 fn 應用在 iterable 的所有元素上,返回一個map object。

  1. 1nums = [1/3333/72323/223040/342/3
  2. 2nums_squared = [num * num for num in nums] 
  3. 3print(nums_squared) 
  4. 4 
  5. 5==> [0.11111112263.040816321.0851471.3840830.44444444

這樣調用,跟用有回調函數的 map 來調用,是一樣的。

  1. 1nums_squared_1 = map(square_fn, nums) 
  2. 2nums_squared_2 = map(lambda x : x * x, nums) 
  3. 3print(list(nums_squared_1)) 
  4. 4 
  5. 5==> [0.11111112263.040816321.0851471.3840830.44444444

map 也可以有不止一個 iterable。

比如,你要想計算一個簡單線性函數 f(x)=ax+b 的均方誤差 (MSE) ,兩種方法就是等同的。

  1.  1a, b = 3, -0.5 
  2.  2xs = [2345
  3.  3labels = [6.48.910.915.3
  4.  4 
  5.  5# Method 1: using a loop 
  6.  6errors = [] 
  7.  7for i, x in enumerate(xs): 
  8.  8 errors.append((a * x + b - labels[i]) ** 2
  9.  9result1 = sum(errors) ** 0.5 / len(xs) 
  10. 10 
  11. 11# Method 2: using map 
  12. 12diffs = map(lambda x, y: (a * x + b - y) ** 2, xs, labels) 
  13. 13result2 = sum(diffs) ** 0.5 / len(xs) 
  14. 14 
  15. 15print(result1, result2) 
  16. 16 
  17. 17==> 0.35089172119045514 0.35089172119045514 

要注意的是,map 和 filter 返回的是迭代器 (Iterator) ,這就是說它們的值不是存儲的,是按需生成的。

當你調用了sum(diffs) 之后,diffs 就空了。如果你想要保留 diffs 里面所有的元素,就用 list(diffs) 把它轉換成一個列表。

filter(fn,iterable) 也是和 map 一樣道理,只不過 fn 返回的是一個布爾值,filter 返回的是,iterable 里面所有 fn 返回True的元素。

  1. 1bad_preds = filter(lambda x: x > 0.5, errors) 
  2. 2print(list(bad_preds)) 
  3. 3 
  4. 4==> [0.81000000000000060.6400000000000011

reduce(fn,iterable,initializer) 是用來給列表里的所有元素,迭代地應用某一個算子。比如,想要算出列表里所有元素的乘積:

  1. 1product = 1 
  2. 2for num in nums: 
  3. 3 product *= num 
  4. 4print(product) 
  5. 5 
  6. 6==> 12.95564683272412 

上面這串代碼,和下面這串代碼是等同的:

  1. 1from functools import reduce 
  2. 2product = reduce(lambda x, y: x * y, nums) 
  3. 3print(product) 
  4. 4 
  5. 5==> 12.95564683272412 

2、列表操作

小姐姐說,Python的列表太炫酷了。

2.1、解包 (Unpacking)

想把一個列表解包成一個一個元素,就這樣:

  1. 1elems = [1234
  2. 2a, b, c, d = elems 
  3. 3print(a, b, c, d) 
  4. 4 
  5. 5==> 1 2 3 4 

也可以這樣:

  1. 1elems = [1234
  2. 2a, b, c, d = elems 
  3. 3print(a, b, c, d) 
  4. 4 
  5. 5==> 1 2 3 4 

2.2、切片 (Slicing)

大家可能知道,如果想把一個列表反過來排,就用 [::-1] 。

  1. 1elems = list(range(10)) 
  2. 2print(elems) 
  3. 3 
  4. 4==> [0123456789
  5. 5 
  6. 6print(elems[::-1]) 
  7. 7 
  8. 8==> [9876543210

而 [x:y:z] 這種語法的意思是,從索引x到索引y,每z個元素取一個。

如果z是負數,就是反向取了。

如果x不特別指定,就默認是在遍歷列表的方向上,遇到的第一個元素。

如果y不特別指定,就默認是列表最后一個元素。

所以,我們要從一個列表里面,每兩個取一個的話,就是 [::2] 。

  1. 1evens = elems[::2
  2. 2print(evens) 
  3. 3 
  4. 4reversed_evens = elems[-2::-2
  5. 5print(reversed_evens) 
  6. 6 
  7. 7==> [02468
  8. 8 [86420

也可以用這種方法,把一個列表里的偶數都刪掉,只留奇數:

  1. 1del elems[::2
  2. 2print(elems) 
  3. 3 
  4. 4==> [13579

2.3、插入 (Insertion)

把列表里的其中一個元素的值,換成另一個值。

  1. 1elems = list(range(10)) 
  2. 2elems[1] = 10 
  3. 3print(elems) 
  4. 4 
  5. 5==> [01023456789

如果想把某個索引處的一個元素,替換成多個元素,比如把 1 換成 20, 30, 40 :

  1. 1elems = list(range(10)) 
  2. 2elems[1:2] = [203040
  3. 3print(elems) 
  4. 4 
  5. 5==> [020304023456789

如果想把3個值 0.2, 0.3, 0.5 插在索引0和索引1之間:

  1. 1elems = list(range(10)) 
  2. 2elems[1:1] = [0.20.30.5
  3. 3print(elems) 
  4. 4 
  5. 5==> [00.20.30.5123456789

2.4、拉平 (Flattening)

如果,一個列表里的每個元素都是個列表,可以用sum把它拉平:

  1. 1list_of_lists = [[1], [23], [456]] 
  2. 2sum(list_of_lists, []) 
  3. 3 
  4. 4==> [123456

如果是嵌套列表 (Nested List) 的話,就可以用遞歸的方法把它拉平。這也是lambda函數又一種優美的使用方法:在創建函數的同一行,就能用上這個函數。

  1. 1nested_lists = [[12], [[34], [56], [[78], [910], [[11, [1213]]]]]] 
  2. 2flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x] 
  3. 3flatten(nested_lists) 
  4. 4 
  5. 5# This line of code is from 
  6. 6# https://github.com/sahands/python-by-example/blob/master/python-by-example.rst#flattening-lists 

2.5、列表vs生成器

要想知道列表和生成器的區別在哪,看個例子:從token列表里面創建n-grams。

一種方法是用滑窗來創建:

  1. 1tokens = ['i''want''to''go''to''school'
  2.  2 
  3.  3def ngrams(tokens, n): 
  4.  4 length = len(tokens) 
  5.  5 grams = [] 
  6.  6 for i in range(length - n + 1): 
  7.  7 grams.append(tokens[i:i+n]) 
  8.  8 return grams 
  9.  9 
  10. 10print(ngrams(tokens, 3)) 
  11. 11 
  12. 12==> [['i''want''to'], 
  13. 13 ['want''to''go'], 
  14. 14 ['to''go''to'], 
  15. 15 ['go''to''school']] 

上面這個例子,是需要把所有n-gram同時儲存起來的。如果文本里有m個token,內存需求就是 O(nm) 。m值太大的話,存儲就可能成問題。

所以,不一定要用一個列表儲存所有n-gram。可以用一個生成器,在收到指令的時候,生成下一個n-gram,這叫做惰性計算 (Lazy Evaluation) 。

只要讓 ngrams 函數,用 yield 關鍵字返回一個生成器,然后內存需求就變成 O(n) 了。

  1.  1def ngrams(tokens, n): 
  2.  2 length = len(tokens) 
  3.  3 for i in range(length - n + 1): 
  4.  4 yield tokens[i:i+n] 
  5.  5 
  6.  6ngrams_generator = ngrams(tokens, 3
  7.  7print(ngrams_generator) 
  8.  8 
  9.  9==> <generator object ngrams at 0x1069b26d0
  10. 10 
  11. 11for ngram in ngrams_generator: 
  12. 12 print(ngram) 
  13. 13 
  14. 14==> ['i''want''to'
  15. 15 ['want''to''go'
  16. 16 ['to''go''to'
  17. 17 ['go''to''school'

還有一種生成n-grams的方法,是用切片來創建列表:[0, 1, …, -n], [1, 2, …, -n+1], …, [n-1, n, …, -1],然后把它們zip到一起。

  1. 1def ngrams(tokens, n): 
  2.  2 length = len(tokens) 
  3.  3 slices = (tokens[i:length-n+i+1for i in range(n)) 
  4.  4 return zip(*slices) 
  5.  5 
  6.  6ngrams_generator = ngrams(tokens, 3
  7.  7print(ngrams_generator) 
  8.  8 
  9.  9==> <zip object at 0x1069a7dc8> # zip objects are generators 
  10. 10 
  11. 11for ngram in ngrams_generator: 
  12. 12 print(ngram) 
  13. 13 
  14. 14==> ('i''want''to'
  15. 15 ('want''to''go'
  16. 16 ('to''go''to'
  17. 17 ('go''to''school'

注意,創建切片用的是 (tokens[…] for i in range(n)) ,不是 [tokens[…] for i in range(n)] 。

[] 返回的是列表,() 返回的是生成器。

3、類,以及魔術方法

在Python里面,魔術方法 (Magic Methods) 是用雙下劃線,作為前綴后綴的。

其中,最知名的可能就是 _init_ 了。

  1. 1class Node: 
  2. 2 """ A struct to denote the node of a binary tree. 
  3. 3 It contains a value and pointers to left and right children. 
  4. 4 ""
  5. 5 def __init__(self, value, left=None, right=None): 
  6. 6 self.value = value 
  7. 7 self.left = left 
  8. 8 self.right = right 

不過,如果想輸出 (Print) 一個節點 (Node) ,就不是很容易了。

  1. 1root = Node(5
  2. 2print(root) # <__main__.Node object at 0x1069c4518

理想情況,應該是輸出它的值,如果它有子節點的話,也輸出子節點的值。

所以,要用魔術方法 _repr_ ,它必須返回一個可輸出的object,如字符串。

  1. 1class Node: 
  2.  2 """ A struct to denote the node of a binary tree. 
  3.  3 It contains a value and pointers to left and right children. 
  4.  4 ""
  5.  5 def __init__(self, value, left=None, right=None): 
  6.  6 self.value = value 
  7.  7 self.left = left 
  8.  8 self.right = right 
  9.  9 
  10. 10 def __repr__(self):  
  11. 11 strings = [f'value: {self.value}'
  12. 12 strings.append(f'left: {self.left.value}' if self.left else 'left: None'
  13. 13 strings.append(f'right: {self.right.value}' if self.right else 'right: None'
  14. 14 return ', '.join(strings) 
  15. 15 
  16. 16left = Node(4
  17. 17root = Node(5, left) 
  18. 18print(root) # value: 5, left: 4, right: None 

如果想對比兩個節點 (的各種值) ,就用 _eq_ 來重載 == 運算符,用 _lt_ 來重載 < 運算符,用 _ge_ 來重載 >= 。

  1.  1class Node: 
  2.  2 """ A struct to denote the node of a binary tree. 
  3.  3 It contains a value and pointers to left and right children. 
  4.  4 ""
  5.  5 def __init__(self, value, left=None, right=None): 
  6.  6 self.value = value 
  7.  7 self.left = left 
  8.  8 self.right = right 
  9.  9 
  10. 10 def __eq__(self, other): 
  11. 11 return self.value == other.value 
  12. 12 
  13. 13 def __lt__(self, other): 
  14. 14 return self.value < other.value 
  15. 15 
  16. 16 def __ge__(self, other): 
  17. 17 return self.value >= other.value 
  18. 18 
  19. 19 
  20. 20left = Node(4
  21. 21root = Node(5, left) 
  22. 22print(left == root) # False 
  23. 23print(left < root) # True 
  24. 24print(left >= root) # False 

想要了解更多魔術方法,請前往:

https://www.tutorialsteacher.com/python/magic-methods-in-python

或者使用官方文檔,只是有一點點難讀:

https://docs.python.org/3/reference/datamodel.html#special-method-names

這里,還要重點安利幾種魔術方法:

一是 _len_ :重載 len() 函數用的。

二是 _str_:重載 str() 函數用的。

三是 _iter_:想讓object變成迭代器,就用這個。有了它,還可以在object上調用 next() 函數。

對于像節點這樣的類,我們已經知道了它支持的所有屬性 (Attributes) :value、left和right,那就可以用 _slots_ 來表示這些值。這樣有助于提升性能,節省內存。

  1. 1class Node: 
  2. 2 """ A struct to denote the node of a binary tree. 
  3. 3 It contains a value and pointers to left and right children. 
  4. 4 ""
  5. 5 __slots__ = ('value''left''right'
  6. 6 def __init__(self, value, left=None, right=None): 
  7. 7 self.value = value 
  8. 8 self.left = left 
  9. 9 self.right = right 

想要全面了解 _slots_ 的優點和缺點,可以看看Aaron Hall的精彩回答:

https://stackoverflow.com/a/28059785/5029595

4、局部命名空間,對象的屬性

locals() 函數,返回的是一個字典 (Dictionary) ,它包含了局部命名空間 (Local Namespace) 里定義的變量。l

  1. 1class Model1: 
  2.  2 def __init__(self, hidden_size=100, num_layers=3, learning_rate=3e-4): 
  3.  3 print(locals()) 
  4.  4 self.hidden_size = hidden_size 
  5.  5 self.num_layers = num_layers 
  6.  6 self.learning_rate = learning_rate 
  7.  7 
  8.  8model1 = Model1() 
  9.  9 
  10. 10==> {'learning_rate'0.0003'num_layers'3'hidden_size'100'self': <__main__.Model1 object at 0x1069b1470>} 

一個object的所有屬性,都存在 _dict_ 里面。

  1. 1print(model1.__dict__) 
  2. 2 
  3. 3==> {'hidden_size'100'num_layers'3'learning_rate'0.0003

注意,當參數列表 (List of Arguments) 很大的時候,手動把每個參數值分配給一個屬性會很累。

想簡單一點的話,可以直接把整個參數列表分配給 _dict_ 。

  1. 1class Model2: 
  2.  2 def __init__(self, hidden_size=100, num_layers=3, learning_rate=3e-4): 
  3.  3 params = locals() 
  4.  4 del params['self'
  5.  5 self.__dict__ = params 
  6.  6 
  7.  7model2 = Model2() 
  8.  8print(model2.__dict__) 
  9.  9 
  10. 10==> {'learning_rate'0.0003'num_layers'3'hidden_size'100

當object是用 kwargs** 初始化的時候,這種做法尤其方便 (雖然 kwargs** 還是盡量少用為好) :

  1. 1class Model3: 
  2. 2 def __init__(self, **kwargs): 
  3. 3 self.__dict__ = kwargs 
  4. 4 
  5. 5model3 = Model3(hidden_size=100, num_layers=3, learning_rate=3e-4
  6. 6print(model3.__dict__) 
  7. 7 
  8. 8==> {'hidden_size'100'num_layers'3'learning_rate'0.0003

前4個版塊就到這里了,至于第5個版塊傳授了怎樣的技巧,先不介紹,大家可以從傳送門前往觀察:

https://github.com/chiphuyen/python-is-cool

寶藏小姐姐

貢獻資源的Chip Huyen小姐姐,現在是英偉達的高級深度學習工程師了。

但在2015年進入斯坦福讀書之前,她還是個沒接觸過深度學習的作家,旅行路上的故事已經出版了兩本書。

英偉達<span><span><span><i style=小姐姐的Python隱藏技巧合集,推特2400贊,代碼可以直接跑">

△ 對,是個越南小姐姐

原本想讀英文專業,卻在選了一門計算機課之后,走上了深度學習的不歸路。

畢業前,她在Netflix實習過;畢業后,她在斯坦福教過TensorFlow,課號CS20;一年前離開學校,進入英偉達。

正式選擇了機器學習的她,依然像旅行的時候一樣,喜歡和大家分享經歷。

這位小姐姐產出的各式資源和感悟,量子位也介紹過不止一次。

爬網頁、洗數據、創建海量數據集一條龍:

https://mp.weixin.qq.com/s/rOXKglzYLRqTJkyLEZqJ6A

免費機器學習課程,從概率統計到全棧深度學習:

https://mp.weixin.qq.com/s/Jk8YuQuP5e64Q0ak-WJUKg

AI從業者要不要讀博,要不要自己創業:

https://mp.weixin.qq.com/s/MTpS6RwCTLIxwP8iDbZotQ

加上今天的Python隱藏技巧,(至少) 是第四次了:

傳送門

如果你想更順滑地使用Python,快馬克這些方法吧。

項目傳送門:

https://github.com/chiphuyen/python-is-cool

Notebook傳送門:

https://github.com/chiphuyen/python-is-cool/blob/master/cool-python-tips.ipynb

責任編輯:張燕妮 來源: 量子位
相關推薦

2021-04-14 14:28:14

Python點攢抖音

2025-08-18 07:24:01

運維ETCD運維技巧

2019-10-21 10:01:58

Python素描技術

2019-05-17 10:38:23

SpringBoot開發技術

2023-07-07 08:24:53

Python爬蟲Flask

2012-08-20 09:41:05

開源技術推特

2025-08-29 03:15:00

Python自動化腳本

2021-10-05 21:03:54

BeautifulSo 爬蟲

2020-10-26 14:11:13

特朗普漏洞推特密碼

2021-10-25 20:02:00

gRPC訂閱模式超時控制

2020-09-29 09:09:03

數據庫程序運行

2020-01-18 15:10:57

機器人人工智能系統

2020-05-26 10:20:56

Python開發工具

2019-07-08 10:08:35

人工智能AI自動化

2021-05-06 10:46:40

JS代碼文字煙花

2018-02-05 15:52:06

硬盤故障損壞

2021-02-05 22:47:01

物聯網IOT物聯網技術

2019-11-26 14:47:59

機器學習人工智能計算機

2022-04-26 10:41:33

馬斯克推特

2023-12-05 13:49:00

AI模型
點贊
收藏

51CTO技術棧公眾號

日韩在线播放一区| 欧美精品123| 午夜伦理福利在线| 亚洲综合在线五月| 超碰97国产在线| 日韩中文首页| 国产精品无av码在线观看| 第一区第二区在线| 欧美美女18p| 四虎在线精品| 欧美成人精品xxx| 天堂影院在线| 国产第一区电影| 欧美a级大片在线| 中文字幕亚洲一区在线观看| 嗯啊主人调教在线播放视频 | 性欧美xxxx视频在线观看| 另类一区二区三区| 最新国产成人av网站网址麻豆| 巨茎人妖videos另类| 91精品国产综合久久精品性色| 在线日韩三级| 久久久噜噜噜久久中文字免| 欧美精品99久久| 成人性生交大片| 黄色成人在线看| 久久久久久久网| 成人看片app| 亚洲免费在线看| 日韩h在线观看| 国产区在线观看| 欧美日韩视频在线观看一区二区三区 | 一区二区三区在线视频播放 | 福利写真视频网站在线| 精品av久久707| 超碰这里只有精品| 九九综合九九综合| 日本妇女一区| 国产欧美在线观看| 亚洲高清毛片| 中国女人做爰视频| 国产精品免费aⅴ片在线观看| 原千岁中文字幕| 欧美浪妇xxxx高跟鞋交| 欧美xxxxxx| 欧美三级韩国三级日本三斤 | 国产原创一区| 伊人久久五月天| 精精国产xxxx视频在线野外| 头脑特工队2免费完整版在线观看| 色综合久久88色综合天天6 | 欧美性videos| 日韩精品久久久久久福利| 精品国产美女a久久9999| 清纯唯美亚洲综合| 99国产精品| 天堂…中文在线最新版在线| 亚洲天堂精品视频| 97超碰资源站在线观看| 日韩视频免费看| 99热精品久久| 色撸撸在线观看| 亚洲图片激情小说| jizz性欧美| 97在线视频一区| 午夜在线播放视频欧美| 女人天堂av手机在线| 亚洲不卡在线观看| 欧美男体视频| 亚洲伊人成综合成人网| 久久99在线观看| 日日噜噜夜夜狠狠视频| 亚洲成人av片| 日韩理论电影| 99国产精品白浆在线观看免费| 亚洲码国产岛国毛片在线| 国内精品久久久久久野外| 九九热精品视频在线播放| 亚洲网站视频| 中文字幕第88页| 亚洲精品一区在线观看| 欧美日韩国产免费观看视频| 亚洲AV无码成人精品一区| 午夜久久福利影院| 韩国精品视频在线观看 | 欧美亚洲在线日韩| 欧美a级黄色大片| 欧美性猛交xxxx乱大交3| 成人在线爆射| 国产精品永久入口久久久| 国产欧美日本一区二区三区| 黄色小说在线播放| 91在线视频导航| 国产精品伦理一区二区| huan性巨大欧美| 国产精品久久久久秋霞鲁丝 | 国产精品亚洲综合| 国产精品女同一区二区三区| 四虎影院观看视频在线观看| 国产极品jizzhd欧美| 丁香啪啪综合成人亚洲小说 | 欧洲另类一二三四区| 66精品视频在线观看| 一区二区精品视频| 日本精品视频一区二区三区| 中文字幕一区二区三区中文字幕| 日韩国产美国| 亚洲一区二区三区中文字幕 | 牛夜精品久久久久久久| 精品国产凹凸成av人导航| 久久资源中文字幕| 亚洲免费看av| 色偷偷亚洲男人天堂| 久久婷婷麻豆| 丁香在线视频| 成人h视频在线| 一区二区三区高清| 女人抽搐喷水高潮国产精品| 久久久999免费视频| 一区二区福利视频| 国产一区二区福利视频| 国产羞羞视频在线播放| 麻豆亚洲一区| 91精品国产乱| 久久一日本道色综合久久| 黄网站免费在线播放| 好吊色欧美一区二区三区视频| 高跟丝袜一区二区三区| 欧洲福利电影| 亚洲色图另类色图| 成人网在线免费看| 日本道免费精品一区二区三区| 欧美1区视频| 亚洲va电影大全| 国产精品一区二区三| 日韩精品在线免费观看| 在线国产精品网| 精品久久久久香蕉网| 久久国产免费| 日本动漫同人动漫在线观看| 欧美在线3区| 欧美群妇大交群中文字幕| 亚洲欧洲日本一区二区三区| av国产在线观看| 久久久久久99| 精品国精品国产尤物美女| 日韩高清在线电影| 深夜福利视频一区二区| 国产成人亚洲综合无码| 最近2019年日本中文免费字幕| 九九国产精品视频| 国产一区一一区高清不卡| 日本免费不卡一区二区| 亚州欧美日韩中文视频| 亚洲第一激情av| 国产日韩一区| 精品91久久| 福利在线一区二区三区| 国产精品一二三在线| 欧美色爱综合网| 国产麻豆视频一区二区| 日韩精品一级| 深夜福利在线看| 欧美一级二级三级| www国产亚洲精品久久网站| 1000精品久久久久久久久| 欧美激情1区| 日韩免费小视频| 这里只有精品视频在线观看| 日韩一区二区免费视频| 色婷婷综合五月| 色噜噜狠狠成人网p站| 女人天堂亚洲aⅴ在线观看| 在线观看三级视频| 大陆极品少妇内射aaaaa| 91精品国产色综合| 欧美三级一区二区| 成人激情小说网站| 爱情电影网av一区二区| 亚洲午夜精品一区二区国产| 一区二区三区视频免费| 大乳在线免费观看| 国产日本欧美一区二区三区在线| 亚洲一区免费在线观看| 亚洲精品1区| 日韩漫画puputoon| 羞羞在线观看网站| 高清不卡在线观看av| 国产麻豆成人精品| 成人综合影院| 国产传媒久久久| 555www成人网| 日韩一区二区免费在线观看| 91亚洲国产成人精品一区二区三 | 白浆视频在线观看| 浓精h攵女乱爱av| 国产亚洲自拍偷拍| 久久久久久91| 精品福利在线导航| 午夜精品久久久久久久99水蜜桃|