将一串keyword =值转换为字典的最简单方法是什么,例如以下字符串:
name="John Smith", age=34, height=173.2, location="US", avatar=":,=)"
Run Code Online (Sandbox Code Playgroud)
到下面的python字典:
{'name':'John Smith', 'age':34, 'height':173.2, 'location':'US', 'avatar':':,=)'}
Run Code Online (Sandbox Code Playgroud)
'avatar'键只是为了表明字符串可以包含=和,所以简单的'拆分'是不行的.有任何想法吗?谢谢!
以下代码:
def f(a=1):
pass
kwargs = {}
kwargs['a'] = 1
kwargs['b'] = 2
f(**kwargs)
Run Code Online (Sandbox Code Playgroud)
(正确)引发异常:
Traceback (most recent call last):
File "tt.py", line 8, in <module>
f(**kwargs)
TypeError: f() got an unexpected keyword argument 'b'
Run Code Online (Sandbox Code Playgroud)
有没有办法,使用functools或其他方法来绕过这个并找出函数没有使用哪些参数,以便能够将它们传递给另一个函数?例如,我可能有另一个功能:
def g(a=None, b=None):
pass
Run Code Online (Sandbox Code Playgroud)
我想打电话给你,比如说
g(**kwargs)
Run Code Online (Sandbox Code Playgroud)
但我只想b通过,因为a在之前的功能中已经"用完了".
现在我知道这不是理想的编码,但有些情况下它可以派上用场,而且实际上很容易向用户解释,例如"附加参数将传递给f,任何未传递给f的参数都将被传递给g".
有人能说出我在做错了吗?
import numpy as np
a = np.array([1,2,3,4,5],dtype=int)
b = np.array(['a','b','c','d','e'],dtype='|S1')
np.savetxt('test.txt',zip(a,b),fmt="%i %s")
Run Code Online (Sandbox Code Playgroud)
输出是:
Traceback (most recent call last):
File "loadtxt.py", line 6, in <module>
np.savetxt('test.txt',zip(a,b),fmt="%i %s")
File "/Users/tom/Library/Python/2.6/site-packages/numpy/lib/io.py", line 785, in savetxt
fh.write(format % tuple(row) + '\n')
TypeError: %d format: a number is required, not numpy.string_
Run Code Online (Sandbox Code Playgroud) 我正在使用一个numpy object_数组来存储可变长度的字符串,例如
a = np.array(['hello','world','!'],dtype=np.object_)
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以在不绕过所有元素的情况下找到数组中最长字符串的长度?
在python中使用sqlite3模块时,除列名之外的cursor.description的所有元素都设置为None,因此该元组不能用于查找查询结果的列类型(与其他符合DB-API的模块不同).获取列的类型pragma table_info(table_name).fetchall()以获取表的描述,将其存储在内存中,然后将cursor.description中的列名与整个表描述相匹配是唯一的方法吗?
我有兴趣了解是否有关于并行代码是否可扩展的正式定义,或者它是否只是一个时髦的词?如果我将串行墙时间测量为t_S并将平行墙时间测量为t(P),那么我可以将效率定义为E(P)= t_S /(t(P)*P),是否有一个标准如何效率必须随P(和问题大小)而变化才能使代码具有可扩展性?
我有一个并行的fortran代码,我只希望rank = 0进程能够写入stdout,但我不想乱丢代码:
if(rank==0) write(*,*) ...
Run Code Online (Sandbox Code Playgroud)
所以我想知道做以下事情是不是一个好主意,或者是否有更好的方法?
program test
use mpi
implicit none
integer :: ierr
integer :: nproc
integer :: rank
integer :: stdout
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world, rank, ierr)
call mpi_comm_size(mpi_comm_world, nproc, ierr)
select case(rank)
case(0)
stdout = 6
case default
stdout = 7
open(unit=stdout, file='/dev/null')
end select
write(stdout,*) "Hello from rank=", rank
call mpi_finalize(ierr)
end program test
Run Code Online (Sandbox Code Playgroud)
这给出了:
$ mpirun -n 10 ./a.out
Hello from rank= 0
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议!
我想使用'with'语句将一大块Python代码的std输出记录到文件中:
with log_to_file('log'):
# execute code
Run Code Online (Sandbox Code Playgroud)
最简单的方法是log_to_file手动定义,例如:
import sys
class log_to_file():
def __init__(self, filename):
self.f = open(filename, 'wb')
def __enter__(self):
self.stdout = sys.stdout
self.stderr = sys.stderr
sys.stdout = self.f
sys.stderr = self.f
def __exit__(self, type, value, traceback):
sys.stdout = self.stdout
sys.stderr = self.stderr
Run Code Online (Sandbox Code Playgroud)
或者是否有可以执行此操作的内置类?
我试图在Jenkins中运行使用PyQt4的Python包,测试创建窗口.由于我在Jenkins中运行测试,我需要重定向图形输出,所以我使用的是xvfb-run.大多数情况下,这是有效的,但只有一小部分时间,测试将随机失败:
/usr/bin/xvfb-run: line 171: kill: (27375) - No such process
Run Code Online (Sandbox Code Playgroud)
如果我重新运行测试,它在大多数时间都能正常工作(所以这只是一次性问题).
有没有人遇到过这个问题?您对改进测试稳定性的变通方法有什么想法吗?
我正在使用Matplotlib的plot_directive Sphinx扩展,并且有类似的东西:
.. plot::
:context:
:include-source:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
[stuff here]
Text here
.. plot::
:context:
:include-source:
ax.set_xlim(0., 100.)
ax.set_ylim(0., 100.)
Run Code Online (Sandbox Code Playgroud)
问题是该情节第二次没有出现.我可以获得另一个绘图的唯一方法是实例化一个新的plt.figure().有没有办法强制输出图出现在上例中的第二个..plot指令之后,而无需从头开始重新创建新图?
python ×8
numpy ×2
arrays ×1
dictionary ×1
fortran ×1
matplotlib ×1
mpi ×1
plot ×1
pyqt4 ×1
scalability ×1
sqlite ×1
string ×1
testing ×1
xvfb ×1