亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

如何理解python當中yield關鍵字的行為

weapon / 2653人閱讀

摘要:如何遍歷當中的行現(xiàn)有一個數(shù)據(jù)框的期望輸出現(xiàn)在我想遍歷這個數(shù)據(jù)框的每一行,在每一行當中我想通過列名訪問第一行的每一個元素,例如,實現(xiàn)以下效果這里推送一個非常好用的函數(shù)這個函數(shù)同時返回索引和行對象的生成器可以直接進行遍歷如何理解當中的函數(shù)若要理

如何遍歷pandas當中的行

現(xiàn)有一個數(shù)據(jù)框pandas的dataframe:

import pandas as pd
inp = [{"c1":10, "c2":100}, {"c1":11,"c2":110}, {"c1":12,"c2":120}]
df = pd.DataFrame(inp)
print df

期望輸出

   c1   c2
0  10  100
1  11  110
2  12  120

現(xiàn)在我想遍歷這個數(shù)據(jù)框的每一行, 在每一行當中我想通過列名訪問第一行的每一個元素,例如,實現(xiàn)以下效果:

for row in df.rows:
   print row["c1"], row["c2"]

這里推送一個非常好用的函數(shù):
iterrows()
這個函數(shù)同時返回 索引和行對象的生成器可以直接進行遍歷

In [18]: for index, row in df.iterrows():
   ....:     print row["c1"], row["c2"]
   ....:     
10 100
11 110
12 120
如何理解python當中的yield函數(shù)

若要理解python當中的(yield)函數(shù),首先必須理解什么是生成器(generators),在理解生成器之前必須先理解迭代器(iterators).

迭代器

當你創(chuàng)建一個列表list,可以一個元素一個元素逐個讀他,這樣的操作稱為迭代 interation :

>>> mylist = [1, 2, 3]
>>> for i in mylist:
...    print(i)
1
2
3

這里mylist就稱之為一個可迭代對象,當你使用列表推導時(list comprehension),可以生成一個列表,列表推導的方法如下所示:

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist:
...    print(i)
0
1
4

所有可以用for ... in ... 操作的對象稱之為可迭代對象.例如字符串列表文件集合等等.

++列表這類可迭代對象還比較方便,但缺點就是需要存儲在內存中的對象非常多,在值非常多的時候如果都使用這種方式,不是很好++.

生成器

生成器也是迭代器的一種,是一種只能遍歷一次的可迭代對象.
生成器不需要在內存當中存儲所有的值,
他們是即時生成值,性能更快.
例如:

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
...    print(i)
0
1
4

可以看到,除了使用[]替代()之外,其它都是一樣的,但是以下的用法就是不允許的:

for i in mygenerator

實際上他們先生成0,然后忘掉0,再生成1,丟棄1,一直往下,一個接一個進行處理.

Yield函數(shù)

yield 函數(shù)有點像Return,區(qū)別在于這個函數(shù)返回的是迭代器.
例如:

def createGenerator():
    mylist = range(3)
    print u"this will be executed only when for ... in ..called only once"
    for i in mylist:
        yield i*i
mygenerator = createGenerator()
print "test"
for i in mygenerator:
    print(i)



test
this will be executed only when for ... in ..called only once
0
1
4

可以看出來,當你知道你的函數(shù)會返回數(shù)量非常大的元素供遍歷時,并且只需讀一次的時候,使用yield函數(shù)是非常合適的.

若要掌握yield函數(shù),你必須理解當你調用這個函數(shù)時,函數(shù)內部的代碼實際是沒有執(zhí)行的.這個函數(shù)只是返回一個生成器的對象.當實際遍歷時(for ... in ... ) yield語句才會執(zhí)行.

這里是比較有意思的地方:
第一次使用for訪問這個生產器對象的時候,"print u"this will be executed only when for ... in ..called only once""這句話才被打印出來,并且打印在"test"之后,說明yield之前的函數(shù)體會在for第一次循環(huán)時被調用一次且僅僅調用一次.
但是,如果是這樣情況又不同了:

def createGenerator():
    mylist = range(3)
    print u"this will be executed only when for ... in ..called only once"
    for i in mylist:
        print "test3"
        yield i*i
    print "test2"
mygenerator = createGenerator()
print "test"
for i in mygenerator:
    print(i)

結果現(xiàn)在變成了:

test
this will be executed only when for ... in ..called only once
test3
0
test3
1
test3
4
test2

可見如果在yield語句同級的代碼塊中的語句,其實外層for進行迭代時,每次都會執(zhí)行.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/41432.html

相關文章

  • Python協(xié)程

    摘要:協(xié)程的基本行為協(xié)程包含四種狀態(tài)等待開始執(zhí)行。協(xié)程中重要的兩個方法調用方把數(shù)據(jù)提供給協(xié)程。注意使用調用協(xié)程時會自動預激,因此與裝飾器不兼容標準庫中的裝飾器不會預激協(xié)程,因此能兼容句法。因此,終止協(xié)程的本質在于向協(xié)程發(fā)送其無法處理的異常。 導語:本文章記錄了本人在學習Python基礎之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握協(xié)...

    shinezejian 評論0 收藏0
  • 談談Python協(xié)程技術演進

    摘要:事件循環(huán)是異步編程的底層基石。對事件集合進行輪詢,調用回調函數(shù)等一輪事件循環(huán)結束,循環(huán)往復。協(xié)程直接利用代碼的執(zhí)行位置來表示狀態(tài),而回調則是維護了一堆數(shù)據(jù)結構來處理狀態(tài)。時代的協(xié)程技術主要是,另一個比較小眾。 Coding Crush Python開發(fā)工程師 主要負責豈安科技業(yè)務風險情報系統(tǒng)redq。 引言 1.1. 存儲器山 存儲器山是 Randal Bryant 在《深入...

    zhiwei 評論0 收藏0
  • python協(xié)程2:yield from 從入門到精通

    摘要:于此同時,會阻塞,等待終止。子生成器返回之后,解釋器會拋出異常,并把返回值附加到異常對象上,只是委派生成器恢復。實例運行完畢后,返回的值綁定到上。這一部分處理調用方通過方法傳入的異常。之外的異常會向上冒泡。 上一篇python協(xié)程1:yield的使用介紹了: 生成器作為協(xié)程使用時的行為和狀態(tài) 使用裝飾器預激協(xié)程 調用方如何使用生成器對象的 .throw(...) 和 .close()...

    vpants 評論0 收藏0
  • [譯]yield鍵字都做了什么?

    摘要:原文我的微信公眾號每日一練要理解什么是,必須理解什么是生成器。在理解生成器之前,讓我們先了解迭代。直到運行到函數(shù)結尾處停止,此時如果是用則會拋出異常,如果是用則會結束循環(huán)并且不會有異常 原文:https://stackoverflow.com/que...我的微信公眾號:python每日一練 要理解什么是 yield,必須理解什么是生成器(generator)。在理解生成器之前,讓我...

    elisa.yang 評論0 收藏0

發(fā)表評論

0條評論

weapon

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<