相关疑难解决方法(0)

python生成器"发送"功能的目的?

有人能举例说明为什么与Python生成器函数相关的"发送"功能存在吗?我完全理解屈服函数.但是,发送功能让我很困惑.有关此方法的文档很复杂:

generator.send(value)
Run Code Online (Sandbox Code Playgroud)

恢复执行并将值"发送"到生成器函数中.value参数成为当前yield表达式的结果.send()方法返回生成器产生的下一个值,如果生成器退出而不产生另一个值,则引发StopIteration.

那是什么意思?我认为价值是功能的输入?短语"send()方法返回生成器产生的下一个值"似乎也是yield函数的确切目的; yield返回生成器产生的下一个值...

有人能给我一个利用发送器生成器的例子吗?

python

129
推荐指数
9
解决办法
6万
查看次数

与语言X闭包相比,Python中的闭包有哪些限制?

X是任何支持某种闭包风格的编程语言(C#,Javascript,Lisp,Perl,Ruby,Scheme等).

Python中的Closures中提到了一些限制(与Ruby的闭包相比),但文章很旧,现代Python中不再存在许多限制.

查看具体限制的代码示例会很棒.

相关问题:

python closures

47
推荐指数
4
解决办法
7942
查看次数

读/写Python闭包

闭包是一种非常有用的语言功能.他们让我们做一些聪明的事情,否则会占用大量代码,并且经常使我们能够编写更优雅,更清晰的代码.在Python 2.x中,闭包变量名不能反弹; 也就是说,在另一个词法范围内定义的函数不能some_var = 'changed!'对其局部范围之外的变量执行某些操作.有人可以解释为什么会这样吗?在某些情况下,我想创建一个在外部作用域中重新绑定变量的闭包,但这是不可能的.我意识到在几乎所有情况下(如果不是全部的话),这种行为可以通过类来实现,但它通常不是那么干净或优雅.为什么我不能用闭包来做?

以下是重新绑定闭包的示例:

def counter():
    count = 0
    def c():
        count += 1
        return count
    return c
Run Code Online (Sandbox Code Playgroud)

这是您调用它时的当前行为:

>>> c()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in c
UnboundLocalError: local variable 'count' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

我想要它做的是:

>>> c()
1
>>> c()
2
>>> c()
3
Run Code Online (Sandbox Code Playgroud)

python closures language-design readonly

34
推荐指数
6
解决办法
4173
查看次数

PyParsing:这是正确使用setParseAction()吗?

我有这样的字符串:

"MSE 2110, 3030, 4102"
Run Code Online (Sandbox Code Playgroud)

我想输出:

[("MSE", 2110), ("MSE", 3030), ("MSE", 4102)]
Run Code Online (Sandbox Code Playgroud)

这是我的方式,虽然我还没有完成它:

def makeCourseList(str, location, tokens):
    print "before: %s" % tokens

    for index, course_number in enumerate(tokens[1:]):
        tokens[index + 1] = (tokens[0][0], course_number)

    print "after: %s" % tokens

course = Group(DEPT_CODE + COURSE_NUMBER) # .setResultsName("Course")

course_data = (course + ZeroOrMore(Suppress(',') + COURSE_NUMBER)).setParseAction(makeCourseList)
Run Code Online (Sandbox Code Playgroud)

这输出:

>>> course.parseString("CS 2110")
([(['CS', 2110], {})], {})
>>> course_data.parseString("CS 2110, 4301, 2123, 1110")
before: [['CS', 2110], 4301, 2123, 1110]
after: [['CS', 2110], ('CS', 4301), ('CS', 2123), ('CS', …
Run Code Online (Sandbox Code Playgroud)

python parsing nlp pyparsing

7
推荐指数
2
解决办法
4632
查看次数

标签 统计

python ×4

closures ×2

language-design ×1

nlp ×1

parsing ×1

pyparsing ×1

readonly ×1