小编Chr*_*ris的帖子

为什么一个旧的.pyc文件破坏了Django?

我今天使用git删除了最新的代码,我收到以下错误:

ImportError at /
cannot import name Like
Run Code Online (Sandbox Code Playgroud)

这可能与循环导入有关.我检查了追溯:

Traceback:
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/handlers/base.py" in get_response
  101.                             request.path_info)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/urlresolvers.py" in resolve
  298.             for pattern in self.url_patterns:
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/urlresolvers.py" in url_patterns
  328.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/urlresolvers.py" in urlconf_module
  323.             self._urlconf_module = import_module(self.urlconf_name)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/Users/Desktop/python/mystuff/Project/Project/urls.py" in <module>
  7. admin.autodiscover()
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/contrib/admin/__init__.py" in autodiscover
  29.             import_module('%s.admin' % app)
File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)
Run Code Online (Sandbox Code Playgroud)

看起来可能导致问题的唯一代码是urls.py.那有以下代码:

from django.contrib import admin
admin.autodiscover()
Run Code Online (Sandbox Code Playgroud)

所以在这个时候我注意到我们之前编写的admin.py文件在最新的合并中被删除了但是admin.pyc仍然存在.删除.pyc文件继续修复循环导入错误,现在似乎工作正常.

我的问题是:这到底发生了什么?Git配置为忽略所有pyc文件,因此在合并之后,即使.py被删除,.pyc也会卡住.但是,如果.py本身被删除,那么python是否应该足够聪明,不要尝试调用.pyc中的任何编译代码?

python django

11
推荐指数
2
解决办法
2977
查看次数

打破递归函数?

我想知道如何打破主函数的递归循环.我正在尝试做一个简单的回文练习.该函数应为"redivider"返回True,但返回True将传递给is_pal()并且函数不会中断.如果没有向is_pal添加第二个变量来跟踪True/False,那么打破这个递归循环的正确方法是什么?谢谢.

def first(word):
    return word[0]

def last(word):
    return word[-1]

def middle(word):
    return word[1:-1]

def is_pal(str):    
    if len(str) == 1: 
        return True

    if first(str) == last(str) and len(str) > 1: 
        is_pal(middle(str))

print is_pal("redivider")
Run Code Online (Sandbox Code Playgroud)

python

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

Golang Cgo:恐慌:运行时错误:cgo 参数具有指向 Go 指针的 Go 指针

我正在使用一个 C 库,与下面不同,我无法控制它。我需要将指向也包含指针的数组的指针传递给 C 函数。

package main

/*
#include <stdio.h>

typedef int* pInt;

void foo(pInt p[]) {
  printf("foo()\n");
}
*/
import "C"
import "unsafe"

func main() {
    var i C.int
    var p1 C.pInt = (*C.int)(unsafe.Pointer(&i))
    var p2 C.pInt = (*C.int)(unsafe.Pointer(&i))
    var ps []C.pInt = []C.pInt{p1, p2}
    C.foo(unsafe.Pointer(&ps[0]))
}
Run Code Online (Sandbox Code Playgroud)

此代码导致错误panic: runtime error: cgo argument has Go pointer to Go pointer。我想知道如何重写此代码的 Go 部分,使其满足 Cgo 的指针规则。我希望我可以在不必编写 C 帮助程序代码的情况下做到这一点。

pointers go cgo

6
推荐指数
2
解决办法
6468
查看次数

将字典中的键*值相乘?

a = {2: 4, 3: 2, 5: 1, 7: 1}
Run Code Online (Sandbox Code Playgroud)

键代表质数;这些值代表计数器。我想通过迭代字典键*值并求和来计算你得到的数字。什么是最 Pythonic 的方式来做到这一点?

>>> [k*v for k,v in a.items()]
[8, 6, 5, 7]
Run Code Online (Sandbox Code Playgroud)

但

>>> sum(k*v for k,v in a.items())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
Run Code Online (Sandbox Code Playgroud)

python

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

Clojure功能和gensym

我对Clojure的compojure库中的一些代码有疑问.

(defn compile-route
  "Compile a route in the form (method path & body) into a function."
  [method route bindings body]
  `(make-route
    ~method ~(prepare-route route)
    (fn [request#]
      (let-request [~bindings request#] ~@body))))
Run Code Online (Sandbox Code Playgroud)

我只看到了在宏的上下文中使用的gensyms,它们用于防止宏中使用的绑定和本地作用域中的绑定之间的冲突.

我认为,由于以上是一个功能而不是宏,它对此免疫.因此,我想知道像宏一样编写这个函数的理由是什么.

(如果你想知道,我检查了提交历史,看看这个函数最初是作为一个宏编写的.它不是.)

clojure

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

减少Clojure

有人可以解释下面的匿名函数如何评估?

(defn min-by [f coll] 
  (when (seq coll)
    (reduce (fn [min this]
        (if (> (f min) (f this)) this min))
      coll)))

(min-by :cost [{:cost 100} {:cost 36} {:cost 9}])
;=> {:cost 9}
Run Code Online (Sandbox Code Playgroud)

我不明白争论的来源min和this来源.似乎coll可能是隐式破坏的.

我怎样才能更好地理解这个功能在做什么?

clojure

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

Clojure对字符串的"应用"功能

clojure.core/apply
([f args] [f x args] [f x y args] [f x y z args] [f a b c d & args])
  Applies fn f to the argument list formed by prepending intervening arguments to args.

user=> (apply str (reverse "racecar"))
"racecar"
user=> (str (reverse "racecar"))
"(\\r \\a \\c \\e \\c \\a \\r)"
Run Code Online (Sandbox Code Playgroud)

我不明白这种行为是如何与文档一致的.我错过了什么?

string clojure

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

Clojure IndexOutOfBoundsException

((fn [coll] (letfn [(add-item [acc coll idx] 
                              (conj acc (nth coll idx)))

                    (add-group [acc coll] 
                               (conj acc (create-group coll)))

                    (decrease-coll [coll acc] 
                                   (drop (count (last acc)) coll))

                    (not-group-member? [idx coll] 
                                       (not= (first coll) (nth coll idx)))

                    (out-of-bounds? [idx coll] 
                                    (or (empty? coll) (> idx (count coll))))

                    (create-group [coll] (loop [idx 0 
                                                coll coll
                                                acc []]
                                           (if (or (out-of-bounds? idx coll)
                                                   (not-group-member? idx coll))
                                             acc
                                             (recur (inc idx) coll (add-item acc coll idx)))))
                    (process-coll [coll] (loop [coll coll
                                                acc []]
                                           (if …
Run Code Online (Sandbox Code Playgroud)

clojure

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

将两个列表相乘会导致堆栈溢出

test :: [Int] -> [Int]
test l   | (length l) > 5 = l
         | otherwise = test l ++ take 1 searchSpace
    where searchSpace = zipWith (*) [100..999] [100..999]
Run Code Online (Sandbox Code Playgroud)

上面的代码为我提供了堆栈溢出.我假设Haskell正在完全评估并在searchSpace中存储zipWith的结果.如果我只想逐步申请我的程序,那么创建此列表的懒惰方式是take 1什么?

haskell

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

是否可以优化此表达式

check x = filter((==0) . (\(x,y) -> x `mod` y)) $ zip (replicate 20 x)  [1..20]
main = do 
   print $ take 1 $ filter ((==20) . length) [check x | x <- [1..]]
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行上面的通道,http://www.compileonline.com/compile_haskell_online.php但它似乎使用了太多的资源,因为被评估的数量增加,所以我可以搜索filter(==18)但不是filter(>=19).反正是否有优化表达式以便运行?

haskell

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

如何将CIDER升级到0.8?

MELPA上最新版本的CIDER为0.7.最新的Github是0.8,还没有推出MELPA.

在这种情况下,升级CIDER的最佳方法是什么?我对emacs比较陌生,所以请详细说明你究竟要做什么.

编辑:我意识到了我的问题.我的init文件定义了MELPA,指的是Melpa-Stable服务器.常规服务器似乎更新.

emacs clojure cider

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

标签 统计

clojure ×5

python ×3

haskell ×2

cgo ×1

cider ×1

django ×1

emacs ×1

go ×1

pointers ×1

string ×1