我想有一个可以选择返回或产生结果的函数.这是一个例子.
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
存在,则结果将是生成器.有没有办法绕过这个并制作一个可以随意返回或屈服的功能?
我试图做一些非常基本的字符串格式设置,但立即陷入困境。
此代码有什么问题?
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'
但我不知道该如何解决。
我使用以下代码片段来解析命令行参数并将它们存储在表中。
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)
在本例中,args
is {i: somefile.txt}
,这就是我想要的(键:值对)。
但如果我使用./mytool -i somefile.txt
then args
is {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) 我需要一个函数将可迭代对象分割成块,并可以选择块之间有重叠。
\n\n我编写了以下代码,它给出了正确的输出,但效率相当低(慢)。我不知道如何加快速度。有更好的方法吗?
\n\ndef 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) 我正在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) 在NIM 0.17 toLower is deprecated
.那么,在NIM中更改字符串大小写的正确方法是什么?
从 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
。这不应该是这种情况。这是一个错误还是我错过了什么?
我有一个 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 行块?
在使用 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 上对此进行了测试,结果没有改变。