小编rlm*_*lms的帖子

带有asyncio的非阻塞I/O.

我正在尝试用Pygame和asyncio编写一个网络游戏,但我无法弄清楚如何避免挂起读取.这是我的客户代码:

@asyncio.coroutine
def handle_client():
    print("Connected!")
    reader, writer = yield from asyncio.open_connection('localhost', 8000)
    while True:
        mouse_up = False
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()                
            elif event.type == pygame.MOUSEBUTTONUP:
                mouse_up = True

        if mouse_up:
            print("Writing")
            writer.write(b"Mouse up")
        print("Waiting to read")
        line = yield from reader.read(2**12)
        print(line.decode())

    writer.close()
Run Code Online (Sandbox Code Playgroud)

这就行了line = yield from reader.read(2**12).我以前认为asyncio的意思是它是非阻塞的,所以如果没有任何数据可以读取它就会继续执行.我现在看到情况并非如此.

如何将asyncio网络代码与Pygame绘图和事件代码集成?

python pygame python-3.x python-asyncio

19
推荐指数
2
解决办法
8104
查看次数

wordnet路径相似性是否可交换?

我正在使用nltk的wordnet API.当我将一个synset与另一个synset进行比较时,我得到了None但是当我比较它们时,我得到一个浮点值.

他们不应该给出相同的价值吗?有解释还是这是wordnet的错误?

例:

wn.synset('car.n.01').path_similarity(wn.synset('automobile.v.01')) # None
wn.synset('automobile.v.01').path_similarity(wn.synset('car.n.01')) # 0.06666666666666667
Run Code Online (Sandbox Code Playgroud)

python nlp nltk wordnet

15
推荐指数
2
解决办法
3538
查看次数

itertools.imap vs映射整个iterable

我很好奇http://docs.python.org/2/library/itertools.html#itertools.imap上的一条声明,即它描述了

sum(imap(operator.mul, vector1, vector2))
Run Code Online (Sandbox Code Playgroud)

作为一个有效的点产品.我的理解是imap给出了一个生成器而不是一个列表,虽然我理解如果你只考虑前几个元素,周围的sum(),它会更快/消耗更少的内存,我不知道如何它的行为与:

sum(map(operator.mul, vector1, vector2))
Run Code Online (Sandbox Code Playgroud)

python python-2.x python-itertools

10
推荐指数
2
解决办法
7614
查看次数

程序从python中的字符串中提取每个替代字母?

Python程序通常简洁明了,通常需要其他编程语言(我知道)的一堆行可以在python中用一行或两行完成.我试图编写的一个这样的程序是从字符串中提取所有其他字母.我有这个工作代码,但想知道是否有其他简洁方法可行?

>>> s
'abcdefg'
>>> b = ""
>>> for i in range(len(s)):
...   if (i%2)==0:
...      b+=s[i]
... 
>>> b
'aceg'
>>> 
Run Code Online (Sandbox Code Playgroud)

python string

8
推荐指数
2
解决办法
3万
查看次数

Python在numpy中通过2D数组进行枚举

我想要一个行为类似的函数enumerate,但是在numpy数组上.

>>> list(enumerate("hello"))
[(0, "h"), (1, "e"), (2, "l"), (3, "l"), (4, "o")]

>>> for x, y, element in enumerate2(numpy.array([[i for i in "egg"] for j in range(3)])):
        print(x, y, element)

0 0 e
1 0 g
2 0 g
0 1 e
1 1 g
2 1 g
0 2 e
1 2 g
2 2 g
Run Code Online (Sandbox Code Playgroud)

目前我正在使用此功能:

def enumerate2(np_array):
    for y, row in enumerate(np_array):
        for x, element in enumerate(row):
            yield (x, y, element)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?例如内置函数(我找不到任何内容),或者以某种方式更快的不同定义.

python arrays numpy enumerate

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

HTTP get请求的格式

我正在写一个HTTP服务器(仅用于教育自己).

典型的GET请求似乎是这样的:

GET /?a=1&b=2 HTTP/1.1 
Host: localhost    
User-Agent: my browser details
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
Accept-Language: en-gb,en;q=0.5    
Accept-Encoding: gzip, deflate    
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

我能看到发送变量的唯一地方是第一行.编写一个正则表达式以获取变量及其内容是很容易的,但我想知道是否有更简单的方法.我问,因为我一直认为这个概念url?first_variable=first_value&second_variable=second_value是协议的一部分,并且在某种程度上是特殊的.但是,据我所知,情况并非如此,我也可以做同样的url$first_variable-first_value?second_variable-second_value事情.

get http http-headers

7
推荐指数
1
解决办法
4万
查看次数

Haskell相当于这个Python代码

我在Python之后学习Haskell,我认为创建一个函数可以找到序列中不在另一个序列中的所有项(两个序列都有可以比较的元素)将是一个有趣的练习.我在Python中轻松地为此编写了一些代码:

def inverse(seq, domain):
    ss = iter(seq)
    dd = iter(domain)
    while True:
        s = next(ss)
        while True:
            d = next(dd)
            if d != s:
                yield d
            if d >= s:
                break
Run Code Online (Sandbox Code Playgroud)

(其中两个seqdomain排序)

但是,我努力将此代码转换为Haskell.我相信我只是使用列表(可能是无限的),而不是ssdd,我想我会使用s = next(ss)相同s = head ssss = tail ss,但我无法弄清楚如何我翻译成哈斯克尔.我也无法解决我对这两个while循环所做的事情.我认为我可以使用无限递归,但由于有两个循环我不知道是否需要两个函数或什么.

python haskell code-translation

7
推荐指数
1
解决办法
429
查看次数

为什么 W-DAY 在 Pandas 中的表现令人困惑?

等的行为freq = "W-SUN"似乎令人困惑且不一致。例如,d.date_range(pd.Timestamp('2019-07-09'), pd.Timestamp('2019-11-11'), freq='W-SUN')生成一系列星期日,但pd.Index([pd.Timestamp('2019-07-09')]).to_period('W-SUN').to_timestamp()生成星期一。这里发生了什么?

出现这种情况是因为我有一个日期索引,我想将其舍入到某个频率,同时还生成date_range具有相同频率和相位的日期索引。看起来应该适用index.to_period(freq).to_timestamp()于此pd.date_range(start, end, freq=freq),但当 freq 为 时则不然"W-DAY"

python datetime pandas

6
推荐指数
1
解决办法
1696
查看次数

这个双函子子集有名字吗?

双函数有一个具有以下签名的映射函数:

bimap :: (a -> b) -> (c -> d) -> p a c -> p b d 
Run Code Online (Sandbox Code Playgroud)

你也可以有这样的地图:

othermap :: ((a, c) -> (b, d)) -> p a c -> p b d
Run Code Online (Sandbox Code Playgroud)

具有此函数的类型是双函子的严格子集(您始终可以定义bimapusing othermap,但反之则不然)。第二个签名有名字吗?

追问:这个中间函数呢?

halfothermap :: ((a, c) -> b) -> (c -> d) -> p a c -> p b d
Run Code Online (Sandbox Code Playgroud)

haskell types functional-programming functor bifunctor

6
推荐指数
1
解决办法
258
查看次数

类中的生成器表达式不会产生我期望的输出

我想使用一些生成器表达式作为一些昂贵的数据计算的属性.如果可能的话,我希望能够做到这样的事情:

class Test:
    def __init__(self):
        self.data = []
        self.evens = (i for i in self.data if i % 2 == 0)

def __main__():
    t = Test()
    t.data = [1,2,3,4,5,6,7,8]

    for item in t.evens:
        print(item)

if __name__ == '__main__':
    __main__()
Run Code Online (Sandbox Code Playgroud)

我希望看到这个打印输出,2 4 6 8但这没有输出.我在这里犯了一些简单的错误吗?

我想在这里做什么可能或我需要yield用来做这个?

python class generator python-3.x

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