小编ale*_*inn的帖子

python3中的可选yield或return.如何?

我想有一个可以选择返回或产生结果的函数.这是一个例子.

def f(option=True):
    ...
    for...:
        if option:
            yield result
        else:
            results.append(result)

    if not option:
        return results
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,我已经尝试使用python3,无论我设置什么选项值,我总是得到一个生成器.据我所知,python检查函数体,如果yield存在,则结果将是生成器.有没有办法绕过这个并制作一个可以随意返回或屈服的功能?

python yield return generator python-3.x

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

使用NIM的基本字符串格式

我试图做一些非常基本的字符串格式设置,但立即陷入困境。

此代码有什么问题?

import strutils
import parseopt2

for kind, key, val in getopt():
    echo "$1 $2 $3" % [kind, key, val]
Run Code Online (Sandbox Code Playgroud)

我知道了,Error: type mismatch: got (TaintedString) but expected 'CmdLineKind = enum'但我不知道该如何解决。

nim-lang

4
推荐指数
2
解决办法
797
查看次数

如何在 NIM 中通过命令行正确传递参数?

我使用以下代码片段来解析命令行参数并将它们存储在表中。

var args = initTable[string, string]()
for kind, key, val in getopt():
    args.add(key,val)
Run Code Online (Sandbox Code Playgroud)

=但是,只有当我传入命令行时它才有效

./mytool -i=somefile.txt
Run Code Online (Sandbox Code Playgroud)

在本例中,argsis {i: somefile.txt},这就是我想要的(键:值对)。

但如果我使用./mytool -i somefile.txtthen argsis {somefile.txt: , i: },这绝对不是我所期望的(两个键,没有值)。

不使用 解析参数的正确方法是什么=

这是两种情况下 kind、key 和 val 的打印输出:

$ ./diceof -a=ACTGCTGTGTGCACAGTGTCACGTGT -b=ACTGCTGTGTGCACAGTGTCACGTGa
kind:cmdShortOption
key :a
val :ACTGCTGTGTGCACAGTGTCACGTGT
kind:cmdShortOption
key :b
val :ACTGCTGTGTGCACAGTGTCACGTGa


$ ./diceof -a ACTGCTGTGTGCACAGTGTCACGTGT -b ACTGCTGTGTGCACAGTGTCACGTGa
kind:cmdShortOption
key :a
val :
kind:cmdArgument
key :ACTGCTGTGTGCACAGTGTCACGTGT
val :
kind:cmdShortOption
key :b
val :
kind:cmdArgument …
Run Code Online (Sandbox Code Playgroud)

parameter-passing nim-lang

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

将序列分割成重叠块的更好方法?

我需要一个函数将可迭代对象分割成块,并可以选择块之间有重叠。

\n\n

我编写了以下代码,它给出了正确的输出,但效率相当低(慢)。我不知道如何加快速度。有更好的方法吗?

\n\n
def split_overlap(seq, size, overlap):\n    \'\'\'(seq,int,int) => [[...],[...],...]\n    Split a sequence into chunks of a specific size and overlap.\n    Works also on strings! \n\n    Examples:\n        >>> split_overlap(seq=list(range(10)),size=3,overlap=2)\n        [[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9]]\n\n        >>> split_overlap(seq=range(10),size=3,overlap=2)\n        [range(0, 3), range(1, 4), range(2, 5), range(3, 6), range(4, 7), range(5, 8), range(6, 9), range(7, 10)]\n\n        >>> split_overlap(seq=list(range(10)),size=7,overlap=2)\n        [[0, 1, 2, 3, 4, 5, …
Run Code Online (Sandbox Code Playgroud)

python split overlap

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

不一致的TypeError:无法序列化_io.TextIOWrapper对象

我正在Jupyter 5上使用Python 3.6.1。我的目标是测试Portalocker如何管理在同一文件上的并发追加。

为此,我制作了一个简单的函数,该函数将单行追加到同一文件,并使用multiprocessing.Pool和Pool.map()并行运行该函数。

这是Jupyter笔记本中的代码。

单元1

from time import time
from multiprocessing import Pool
import portalocker


def f(*args):
    while time() < start + 1:
        pass
    with open('portalocker_test.txt', 'a') as f:
        portalocker.lock(f, portalocker.LOCK_EX)
        f.write(f'{time()}\n')
Run Code Online (Sandbox Code Playgroud)

单元格2

start = time()
with Pool(4) as p:
    p.map(f, range(4))
Run Code Online (Sandbox Code Playgroud)

单元格3

with open('portalocker_test.txt', 'r') as f:
    for line in f:
        print(line, end='')
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码一次,便得到了预期的结果:

离开单元格3:

1495614277.189394
1495614277.1893928
1495614277.1893911
1495614277.1894028
Run Code Online (Sandbox Code Playgroud)

但是,如果我再次运行单元2(而不重新启动笔记本),则会得到:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-db9c07d32724> in <module>()
      1 start = time()
      2 with …
Run Code Online (Sandbox Code Playgroud)

python-3.x jupyter-notebook

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

如何在NIM中更改字符串大小写?

在NIM 0.17 toLower is deprecated.那么,在NIM中更改字符串大小写的正确方法是什么?

tolower nim-lang

3
推荐指数
1
解决办法
150
查看次数

time.time_ns() 在 macOS 上没有正确返回纳秒?

从 Python 3.7 开始,我们有了支持纳秒分辨率的新时间函数。但是,我不确定time.time_ns()应该如何工作。

看下面的例子:

>>> for n in range(10):
...     time.sleep(random.random())
...     print((time.time(), time.time_ns(), time.monotonic_ns()))
...
(1545306865.8667252, 1545306865866727000, 439497985080)
(1545306866.084973, 1545306866084974000, 439716229679)
(1545306866.2972622, 1545306866297264000, 439928562751)
(1545306866.635714, 1545306866635716000, 440267014751)
(1545306866.745001, 1545306866745003000, 440376301646)
(1545306867.212074, 1545306867212076000, 440843415181)
(1545306867.7111092, 1545306867711111000, 441342449470)
(1545306867.792372, 1545306867792374000, 441423713091)
(1545306867.821886, 1545306867821887000, 441453223973)
(1545306868.127483, 1545306868127485000, 441758824065)
Run Code Online (Sandbox Code Playgroud)

如您所见,time.time_ns()时间确实以纳秒精度的整数形式返回,但最后一位数字始终为000。这不应该是这种情况。这是一个错误还是我错过了什么?

time python-3.x

3
推荐指数
1
解决办法
1991
查看次数

熊猫一次迭代多行重叠

我有一个 Pandas DataFrame,需要将其以 n 行的块形式输入下游函数(print在示例中)。块可能具有重叠的行。

让我们从一个虚拟的 DataFrame 开始:

d = {'A':list(range(1000)), 'B':list(range(1000))}
df=pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

在具有 1 行重叠的 2 行块的情况下,我有以下代码:

a = df.index.values[:-1]
for i in a:
    print(df.iloc[i:i+2])
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

...
       A    B
996  996  996
997  997  997
       A    B
997  997  997
998  998  998
       A    B
998  998  998
999  999  999
Run Code Online (Sandbox Code Playgroud)

这正是我想要的。

是否有更好/更快的方法来迭代 pandas.DataFrame 的 n 行块?

python iteration pandas

3
推荐指数
1
解决办法
2409
查看次数

使用 python 2.7 和 3.5 的 string.strip() 中的奇怪错误

在使用 string.strip() 进行非常简单的字符串操作时,我得到了一些非常奇怪的结果。我想知道这是一个只影响我的问题(我的 python 安装有问题?)还是一个常见的错误?

这个错误是非常有线的,它是这样的:

>>> a = './omqbEXPT.pool'
>>> a.strip('./').strip('.pool')
'mqbEXPT' #the first 'o' is missing!!!
Run Code Online (Sandbox Code Playgroud)

仅当 'o' 跟在 './' 之后时才会发生!

>>> a = './xmqbEXPT.pool'
>>> a.strip('./').strip('.pool')
'xmqbEXPT'
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?!我已经在 python 2.7 和 3.5 上对此进行了测试,结果没有改变。

python string strip

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