Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 发电机是可调用的吗?哪个是发电机?_Python_Generator_Callable - Fatal编程技术网

Python 发电机是可调用的吗?哪个是发电机?

Python 发电机是可调用的吗?哪个是发电机?,python,generator,callable,Python,Generator,Callable,生成器只是一个函数,它返回一个对象,您可以在该对象上进行下一步调用,这样每次调用它都会返回一些值,直到它引发StopIteration异常,表明所有值都已生成。这样的对象称为迭代器 我引用了他的话 以下是我想弄明白的: 哪个是发电机myGen或myGen(6) 根据上面提到的报价,我认为生成器应该是myGen。而myGen(6)是返回的迭代器对象。但我真的不确定 当我尝试这样做时: >>> type(myGen) <type 'function'> >>

生成器只是一个函数,它返回一个对象,您可以在该对象上进行下一步调用,这样每次调用它都会返回一些值,直到它引发StopIteration异常,表明所有值都已生成。这样的对象称为迭代器

我引用了他的话

以下是我想弄明白的:

  • 哪个是发电机<代码>myGen或
    myGen(6)

    根据上面提到的报价,我认为生成器应该是
    myGen
    。而
    myGen(6)
    是返回的迭代器对象。但我真的不确定

  • 当我尝试这样做时:

    >>> type(myGen)
    <type 'function'>
    >>> type(g)         # <1>this is confusing me.
    <type 'generator'>  
    >>> callable(g)     # <2> g is not callable.  
    False               
    >>> callable(myGen)
    True
    >>> g is iter(g)    # <3> so g should an iterable and an iterator 
    True                # at the same time. And it will be passed as an argument
    >>> for i in g:     # to built-in function `next()` in a "for...in..." loop.
            print i     # (is that correct?)
    
    6
    7     
    
    >类型(myGen)
    >>>类型(g)#这让我很困惑。
    >>>可调用(g)#g不可调用。
    假的
    >>>可调用(myGen)
    真的
    >>>g是iter(g)#因此g应该是iteratable和iterator
    没错,同时。它将作为一个论点被通过
    >>>对于i in g:#到“for…in…”循环中的内置函数'next()'。
    打印i#(对吗?)
    6.
    7.
    
  • 因此,根据
    g
    的类型是“generator”,它是不可调用的。 但是 这是怎么回事

    当我在寻找答案时,我遇到了

    那么,我可以这样说吗?定义函数
    myGen
    时,
    myGen
    是指可调用对象的名称,该对象是具有
    \u调用\u方法的类的实例。
    在这种情况下,
    myGen
    是一个生成器,
    myGen(6)
    是调用
    myGen
    时返回的迭代器

    但是为什么
    type(g)
    返回
    ? 这个返回的
    迭代器
    对我来说也是可疑的,因为函数中没有
    返回
    语句

    这不是吗?

    1)
    myGen
    是一个函数,当调用它时,它返回一个生成器对象——所以是的,
    myGen(6)
    是一个生成器对象


    2) 生成器提供
    \uuu iter\uuu
    next()

    不幸的是,术语令人困惑,因为“生成器”通常用于指函数或返回的迭代器,因此很难说一种用法更正确。警察说

    仅当定义生成器函数时才使用yield语句, 并且仅用于生成器功能的主体中。使用收益率 函数定义中的语句足以导致 用于创建生成器函数而不是普通函数的定义 功能

    调用生成器函数时,它返回一个称为 生成器迭代器,或更常见的生成器

    警察说

    注意,当上下文中的意图明确时,非限定名称 “发电机”可用于指发电机功能或发电机 生成器迭代器


    如果您想明确区分,请使用“generator function”作为函数,使用“generator iterator”作为迭代器。

    +1表示编写良好。我相信generator是一个创建对象的函数。这个对象就是生成器,这个生成器就是一个可数。但是你可以调用函数,在运行中生成一个可迭代的变量,你可以对它进行迭代。。我仍然有点困惑为什么亚历克斯说发电机是可以调用的。有什么解释吗?
    >>> type(myGen)
    <type 'function'>
    >>> type(g)         # <1>this is confusing me.
    <type 'generator'>  
    >>> callable(g)     # <2> g is not callable.  
    False               
    >>> callable(myGen)
    True
    >>> g is iter(g)    # <3> so g should an iterable and an iterator 
    True                # at the same time. And it will be passed as an argument
    >>> for i in g:     # to built-in function `next()` in a "for...in..." loop.
            print i     # (is that correct?)
    
    6
    7