一例生成器sample

舉例

def underscore_to_camelcase(s):
    def camelcase():
        yield str.lower
        while True:
            yield str.capitalize

    return ''.join(f(sub) for sub, f in zip(s.split('_'), camelcase()))

拆解

from collections.abc import Iterator


def underscore_to_camelcase(s):
    def camelcase():  # 生成器函數
        yield str.lower
        while True:
            yield str.capitalize

    generator_functions_call_result = camelcase()
    print(type(generator_functions_call_result))  # <class 'generator'>

    zipped = zip(s.split('_'), generator_functions_call_result)
    print(isinstance(zipped, Iterator))  # True, 返回的是迭代器對象, 下面f in zipped是最好的證明

    result = (f(sub) for sub, f in zipped)  # 生成器表達式, f爲高階函數
    print(type(result))  # <class 'generator'>

    return ''.join(result)


print(underscore_to_camelcase("where_are_you"))

  1. camelcase是生成器函數,返回str.lower, str.capitalize, str.capitalize ...
  2. camelcase()是返回了一個生成器(是迭代器的一種特殊類型)
  3. zip() 函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的(迭代器)對象, 是惰性的(python2中返回的是List對象)
  4. 列表推導式 vs 生成器表達式: 前者是[]後者是()

這樣拆分以後就沒有那麼magic了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章