小编OBu*_*OBu的帖子

在python 3中的函数中创建动态命名的变量/在python 3中理解exec/eval/locals

首先,让我说我在创建动态命名变量时阅读了许多具有类似主题的线程,但它们主要与Python 2相关,或者它们假设您正在使用类.是的,我在Python 2和Python 3中阅读了exec函数的行为.

我也知道在99%的时间内创建动态命名的变量是一个坏主意,字典是获得的方式,但我只想知道它是否仍然可行以及exec和locals在python 3中的运行方式.

我想展示一些示例代码来说明我的问题(斐波那契计算斐波纳契数,ListOfLetters提供["A","B",......]):

def functionname():
    for index, buchstabe in enumerate(ListOfLetters.create_list("A", "K"), 1): 
        exec("{} = {}".format(buchstabe, fibonacci(index)) ) #A = 1, B = 1, C = 2, D = 3, E = 5,...
        print(index, buchstabe, eval(buchstabe)) #works nicely, e.g. prints "4 D 3"
    print(locals()) #pritns all locals: {'B': 1, 'A': 1, 'index': 11, 'C': 2, 'H': 21, 'K': 89, ...
    print(locals()['K']) #prints 89 as it should
    print(eval("K")) #prints 89 as it should
    print(K) …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

Django 1.9a1 __init__.py在eclipse/PyDev中可见,即使它应该被删除(Windows)

我在这里有一个奇怪的行为:

我刚刚使用pip从Django 1.9a1升级到Django 1.9.4.安装顺利,Django运行顺利,但在启动时,它仍显示版本号"1.9a1".

只是为了确保我再次使用pip卸载Django并确认我的django文件夹不再存在于C:\ Program Files(x86)\ Python 3.5\lib\site-packages中(既不是"django"也不是"Django-1.9") .4"文件夹).

再次启动服务器后,我很惊讶地看到了错误消息

from django.core.management import execute_from_command_line
File "C:\Program Files (x86)\Python 3.5\lib\site-packages\django\__init__.py", line 1, in <module>
from django.utils.version import get_version
ImportError: No module named 'django.utils'
Run Code Online (Sandbox Code Playgroud)

我预计错误会像"未找到包django"或类似.由于eclipse提供了文件名作为链接,我点击了它,eclipse打开了一个包含内容的文件

from django.utils.version import get_version
VERSION = (1, 9, 0, 'alpha', 1)
__version__ = get_version(VERSION)
[...]
Run Code Online (Sandbox Code Playgroud)

我仔细检查了这个文件是不是通过命令行和Windows资源管理器提供的.

这个文件在哪里,我怎么能摆脱它?或者它是自动生成的(如果是,我该如何纠正这种机制)

还是我错过了一些完全明显的东西?

附加信息:我重新安装了位于C:\ Program Files(x86)\ Python 3.5\lib\site-packages\django__init __的Django 1.9.4和init .py文件.py显示正确的版本信息.但是,如果我运行Django项目,给出的版本信息是1.9a1.

即使我打开cmd提示并输入

python -c "import django; print(django.get_version())"
Run Code Online (Sandbox Code Playgroud)

答案是1.9a1

更新2016-03-13 17:57:我再次卸载并使用了alecxe建议的显式== 1.9.4.这解决了部分问题:现在,如果我打开命令行,

python -c "import django; print(django.get_version())"
Run Code Online (Sandbox Code Playgroud)

给了我正确答案(1.9.4).但是在Eclipse/PyDev中,我的项目不再开始了.第一条错误消息是:

Unhandled exception in …
Run Code Online (Sandbox Code Playgroud)

python eclipse windows django pydev

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

没有确认对话框的taskwarrior“任务删除”

在taskwarrior中,有一些命令需要确认,例如删除2个以上的任务或修改重复任务。我不想每次都确认,并且我已经在文件 .taskrc 中设置了“确认关闭”。

我正在使用 python 中的 subprocess 模块来调用 taskwarrior 命令。例如,我正在调用task del 1,2,3,外壳程序现在等待手动确认删除请求。

如何避免手动确认?

python shell subprocess confirmation taskwarrior

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

如何在Django Admin中为计算的模型属性实现排序,而无需编写两次逻辑?

在我的Django中model,我定义了一个@property效果很好的属性,该属性可以在管理中显示,list_display没有任何问题。

我不仅需要在管理员中使用此属性,还需要在其他地方的代码逻辑中使用此属性,因此将其作为模型的属性是有意义的。

现在,我想使此属性的列可排序,并在When对象的Django文档的帮助下,此F()计算的StackOverflow问题以及此排序的链接,我设法构建了如下所示的工作解决方案。

在这里提出问题的原因是:实际上,我实现了两次逻辑,一次在python中实现,一次以表达式形式实现,这违反了只实现一次逻辑的设计规则。所以我想问我是否错过了一个更好的解决方案。任何想法表示赞赏。

这是模型(标识已修改):

class De(models.Model):

    fr = models.BooleanField("[...]")
    de = models.SmallIntegerField("[...]")
    gd = models.SmallIntegerField("[...]")
    na = models.SmallIntegerField("[...]")
    # [several_attributes, Meta, __str__() removed for readability]

    @property
    def s_d(self):
        if self.fr:
            return self.de
        else:
            return self.gd + self.na
Run Code Online (Sandbox Code Playgroud)

这是Model Admin

class DeAdmin(admin.ModelAdmin):
    list_display = ("[...]", "s_d", "gd", "na", "de", "fr" )

    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        queryset = queryset.annotate(
            _s_d=Case(
                When(fr=True, then='s_d'),
                When(fr=False, then=F('gd') + …
Run Code Online (Sandbox Code Playgroud)

python django django-admin

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

Eclipse CDT Debug不是可执行格式:草莓安装后无法识别文件格式

也许我遗漏了一些明显的东西,因为我在互联网上搜索了一段时间,但找不到解决以下问题的方法:

我正在使用Eclipse Kepler SP2(Build id:20140224-0627),CDT和MinGW作为编译器后端.用gdb调试C代码一直很好,直到今天(至少我注意到了今天的问题).现在,当我想在调试器中启动一个程序时,我收到以下错误消息:

Error in final launch sequence
Failed to execute MI command:
-file-exec-and-symbols C:/[...]/Debug/test.exe
Error message from debugger back end:
"C:\[...]\Debug\test.exe": not in executable format: File format not recognized
Run Code Online (Sandbox Code Playgroud)

该程序运行良好,所以我想我可能搞砸了一些设置.但是当我尝试调试旧程序时,一切正常,直到我重新编译旧程序 - >同样的问题.如果我要求C向导使用MinGW创建一个新的"Hello World"ANSI C应用程序,则会出现同样的问题.

使用的编译命令是

gcc -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\test.o" "..\\src\\test.c" 
gcc -o test.exe "src\\test.o" 
Run Code Online (Sandbox Code Playgroud)

我之间并没有更新我的MinGW,而是更新了Eclipse.

你有什么指针在哪里寻找问题?

编辑:我刚检查了二进制类型:我的旧项目都是[x86/le],新编译的是[amd64/le].这应该是一个跟踪....将根据进度更新发布.

编辑2:我几天前安装了草莓perl,并且安装程序已将MINGW_HOME原始BUILD SYSTEM中的环境变量更改为c:\strawberry\c,这搞砸了我的构建.将其重置为我c:\MinGW解决了问题.我也会将此作为答案发布.标题和标签已更新,以更直接地指向此问题.

c eclipse mingw eclipse-cdt strawberry-perl

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

opencv 3.x 是否有可用的 C 接口?

我试图在 Wondows 10 PC 上使用 MinGW/Eclipse 的普通 C 程序中使用 opencv 3.4。按照此处的说明编译和安装 opencv 工作得很好,但是当我在 Eclipse 项目设置中只包含库、头文件等时,我得到一个

C:/opencv/MinGW_build/install/include/opencv2/imgproc/imgproc_c.h:1041: undefined reference to cvRound (在此之前有许多警告)

我的编译命令是 gcc "-IC:\\opencv\\MinGW_build\\install\\include" "-IC:\\opencv\\MinGW_build\\install\\include\\opencv2" "-IC:\\opencv\\MinGW_build\\install\\include\\opencv" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\opencv_c_testproject.o" "..\\src\\opencv_c_testproject.c"

我使用了这里的示例代码。

在挖掘了一些帖子之后,问题可能是在 opencv 3 中放弃了对 C 的支持?或者我只是搞砸了我的配置?

一个简单的 c++ 项目使用我的构建很好地工作。

任何帮助表示赞赏。

c eclipse opencv

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