小编Cyr*_*bil的帖子

python中的成语:闭包与仿函数对象

所以我对更有经验的python程序员对以下样式问题的看法感到好奇.假设我正在构建一个函数,该函数将通过pandas数据框或任何类似的用例逐行迭代,其中函数需要访问其先前的状态.似乎至少有四种方法可以在python中实现它:

1)关闭:

def outer():
    previous_state = None
    def inner(current_state) :
        nonlocal previous_state
        #do something
        previous_state=current_state
        return something
Run Code Online (Sandbox Code Playgroud)

因此,如果你来自javascript背景,这对你来说无疑是显而易见的.在python中感觉很自然,直到你需要访问封闭的范围,当你最终会做类似的事情inner.__code__.co_freevars,它会给你封闭变量的名称作为元组,并找到你的索引想要,然后去inner.__closure__[index].cell_contents获得它的价值.不完全优雅,但我认为重点往往是隐藏范围,所以它应该很难达到.另一方面,与OOP语言相比,当几乎所有其他方式都拥有私有变量时,python使封闭函数变为私有也感觉有点奇怪.

2)Fu​​nctor

def outer():
    def inner(current_state):
        #do something
        inner.previous_state=current_state
        return something
    ret = inner
    ret.previous_state=None
    return ret
Run Code Online (Sandbox Code Playgroud)

这"打开了封闭",现在封闭状态作为函数的属性完全可见.这是有效的,因为函数实际上只是伪装的对象.我倾向于这是最pythonic.它清晰,简洁,易读.

3)对象这可能是OOP程序员最熟悉的

class Calculator(Object) :
    def __init__(self):
        self.previous_state=None

    def do_something(self, current_state) :
        #do_something
        self.previous_state = current_state
        return something
Run Code Online (Sandbox Code Playgroud)

这里最大的问题是你最终会得到很多类定义.这对于像Java这样的完全OOP语言来说很好,你可以使用接口等来管理它,但是在一个简化的语言中,有许多简单的类只是为了携带需要一些状态的函数,这似乎有点奇怪.

4)全局 - 我不会证明这一点,因为我特别想避免污染全局名称空间

5)装饰器 - 这是一个有点曲线球,但你可以使用装饰器来存储部分状态信息.

@outer
def inner(previous_state, current_state):
    #do something
    return something

def outer(inner) :
    def wrapper(current_state) :
        result =  inner(wrapper.previous_state, …
Run Code Online (Sandbox Code Playgroud)

python

13
推荐指数
1
解决办法
1268
查看次数

Python错误:TypeError:getsockaddrarg:AF_INET地址必须是元组,而不是int

当我启动我的程序时:

import bitcoinrpc
import csv

# docs at https://github.com/massanchik/bitcoin-python3
# docs at https://docs.python.org/3.3/library/csv.html


user = 'user'
password = 'password'
port = '44555'
host='127.0.0.1'

access = bitcoinrpc.connect_to_remote(user, password, host, port)

print(access.getinfo())
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Traceback (most recent call last):
  File "electrum_to_clam.py", line 14, in <module>
    print(access.getinfo())
  File "/usr/local/lib/python3.4/dist-packages/bitcoinrpc/connection.py", line 133, in getinfo
    return ServerInfo(**self.proxy.getinfo())
  File "/usr/local/lib/python3.4/dist-packages/bitcoinrpc/proxy.py", line 116, in __call__
    resp = self._service_proxy._transport.request(postdata)
  File "/usr/local/lib/python3.4/dist-packages/bitcoinrpc/proxy.py", line 67, in request
    'Content-type': 'application/json'})
  File "/usr/lib/python3.4/http/client.py", line 1065, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.4/http/client.py", …
Run Code Online (Sandbox Code Playgroud)

python json-rpc python-3.x

5
推荐指数
1
解决办法
4064
查看次数

Debian 服务器上的关闭监视器

我正在运行一个 debian 服务器,因为电脑在我的房间里并且一直在运行,所以我想关闭显示器。

我没有图形界面所以

xset dpms force off
Run Code Online (Sandbox Code Playgroud)

不起作用(返回:xset:无法打开显示“”)

我尝试“setterm powerdown”命令,但它只“清除”屏幕,但它仍然产生光(黑屏但有背景光......)

因此,经过谷歌的主要研究后,我来到这里。最酷的事情是在不活动后关闭监视器,并在按下键盘按键时打开电源。

只有关闭屏幕电源就可以了,因为我使用 ssh 来管理服务器。

linux debian shutdown monitor

2
推荐指数
1
解决办法
7209
查看次数

标签 统计

python ×2

debian ×1

json-rpc ×1

linux ×1

monitor ×1

python-3.x ×1

shutdown ×1