很多时候我发现自己写的东西看起来像这样:
try:
procedure_a()
except WrongProcedureError:
try:
procedure_b()
except WrongProcedureError:
try:
procedure_c()
except WrongProcedureError:
give_up()
Run Code Online (Sandbox Code Playgroud)
这很可怕.是否有更优雅的方式来实现这种"尝试直到一个不例外"的逻辑?看起来这种事情会出现很多; 我希望有一些语言功能,我不知道这是为这个确切的东西设计的.
以下代码段:
for weight, item in itemlist do
weight_total=weight_total+weight
end
Run Code Online (Sandbox Code Playgroud)
在该代码段的第一行导致错误"尝试调用表值".为什么?
Itemlist是权重和字符串表的表,如下所示:
local itemlist = {
{4,"weapon_pistol"},
{2,"weapon_357"},
...
Run Code Online (Sandbox Code Playgroud)
据我所知,没有任何东西被称呼; 为什么会出现这个错误?
在C及其许多衍生产品中,i++增量i并计算增值i前的值,并++i递增i并计算增值i 后的值.
我可以看到特定增量运算符的推理; 当时许多处理器都有一个比添加更快的特殊增量操作码,而概念上"增量"与"添加"是一个不同的概念,理论上它们的编写方式可能会使代码更具可读性.
我不明白的是需要预增量运算符.不能用它写任何实际用途吗?
#This...
x = i++;
#becomes this:
x = i;
++i;
Run Code Online (Sandbox Code Playgroud)
可能有一个我不知道的历史原因吗?你是否无法"抛弃"原始版本的C中运算符的返回值?
我正在开发一个带有虚拟机器人的项目(计算机工艺模块中的Turtles for Minecraft),机器人将处于迷宫般的隧道中并且必须在其中导航.世界很方便地已经分为瓦片(它们的2D笛卡尔图,每个都有一个布尔可通过/不可通过的值),构建隧道的机器人将在他去的时候映射它们.
此外,在机器人需要快速进入的区域内散布着传送器"快捷方式".
问题是:让机器人找到目的地的最佳途径是什么?系统如何识别需要传送器的区域?A*是最着名的算法,但还有其他更适合应用程序的算法吗?请记住,我对寻路算法的经验很少,因此您可能需要将其分解为基本术语,以便我理解.有什么建议?
这个是一个很糟糕的,但请耐心等待.
我正在调用一个具有无限期等待某种输入的函数的库.不幸的是,这个函数以这样的方式被窃听:它允许它从中读取的管道填充不相关的输入,导致程序在等待它自己失明的输入时锁定.该库完全是关键的,非常难以复制,维护者不接受拉取请求或错误报告.
我需要在这个函数的主体中注入一个"flush the pipe"函数调用.以前我通过利用具有回调参数的类似函数来解决这个问题,但是这个特定的函数没有这样的参数.
我能做什么?
我有一个 Python 应用程序,我最近在其中添加了一个 Cython 模块。使用 pyximport 从脚本运行它工作正常,但我还需要一个我用 cx_Freeze 构建的可执行版本。
问题是,尝试构建它给了我一个可执行文件,该可执行文件在尝试导入 .pyx 模块时引发了 ImportError。
我修改了我的setup.py喜欢,看看我是否可以先编译 .pyx 以便 cx_Freeze 可以成功打包它:
from cx_Freeze import setup, Executable
from Cython.Build import cythonize
setup(name='projectname',
version='0.0',
description=' ',
options={"build_exe": {"packages":["pygame","fx"]},'build_ext': {'compiler': 'mingw32'}},
ext_modules=cythonize("fx.pyx"),
executables=[Executable('main.py',targetName="myproject.exe",base = "Win32GUI")],
requires=['pygcurse','pyperclip','rsa','dill','numpy']
)
Run Code Online (Sandbox Code Playgroud)
...但是所有给我的都是No module named fx在构建时的 cx_Freeze 中。
我如何使这项工作?
当我使用Python 3.4时,我使用MinGW来编译模块.不幸的是,3.5 MinGW支持不再有效.我已经安装了正确的Visual C++,但pip仍尝试使用MinGW编译器并失败.
如何告诉它使用正确的编译器?
长话短说......当对一个threading.Thread对象的所有引用都丢失时会发生什么,例如在这个函数中:
def myfunc():
def thread_func():
while True:
do_useful_things()
thethread = threading.Thread(target = thread_func)
thethread.run()
return
Run Code Online (Sandbox Code Playgroud)
看起来线程一直在运行,但它的行为很奇怪,我想知道是否会发生奇怪的事情,因为垃圾收集器不正确地删除了它或其他什么。
或者即使生成线程本身没有主动跟踪它们,线程是否会正常继续(我知道threading它自己有获取活动线程的方法)?
是否有一种Pythonic方式可以说"这个迭代中的任何元素都是如此"吗?或者,换句话说,是否有一个更清洁的版本:
if [True for x in mylist if my_condition(x)]:
...
Run Code Online (Sandbox Code Playgroud) 所以,我正在开发一个应用程序,每次启动时都必须根据哈希列表检查 ~50 GB 的数据。显然这需要并行化,我不希望应用程序在“加载...”屏幕上挂一分半钟。
我正在使用multiprocessing.Pool'smap_async来处理这个问题;主线程调用map_async(checkfiles, path_hash_pairs, callback)并提供一个回调,告诉它在发现不匹配时发出警告。
问题是……什么都没发生。使用我的任务管理器查看 Python 进程显示它们生成然后立即终止而不做任何工作。他们从不打印任何东西,当然也永远不会完成并调用回调。
这个缩小的例子也表现出同样的问题:
def printme(x):
time.sleep(1)
print(x)
return x**2
if __name__ == "__main__":
l = list(range(0,512))
def print_result(res):
print(res)
with multiprocessing.Pool() as p:
p.map_async(printme, l, callback=print_result)
p.join()
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
运行它,然后......没有任何反应。交换map_async的map工程完全按照预期。
我只是犯了一个愚蠢的错误还是什么?
python ×7
python-3.x ×4
algorithm ×1
c ×1
c++ ×1
cartesian ×1
conventions ×1
cx-freeze ×1
cython ×1
for-loop ×1
garrys-mod ×1
list ×1
lua ×1
next ×1
path-finding ×1
python-3.5 ×1
robotics ×1
windows ×1