小编rit*_*att的帖子

尽管有2个参数,为什么lambda要求2个参数?

这是我的代码:

filter(lambda n,r: not n%r,range(10,20))

我收到错误:

TypeError: <lambda>() takes exactly 2 arguments (1 given)

那么我试过:

foo=lambda n,r:not n%r

哪个工作正常.所以我认为这会奏效:

bar=filter(foo,range(10,20))

但又一次:

TypeError: <lambda>() takes exactly 2 arguments (1 given)

地图也会发生类似情况.但减少工作正常.我究竟做错了什么?我是否遗漏了使用过滤器或地图所需的重要内容?

python lambda map filter

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

如何使用2 ^ 50个元素处理dict变量?

我必须找到2 ^ 25个随机字符串的SHA256哈希值.然后寻找碰撞(使用生日悖论的最后一个,比如说只有50位的散列).

我在dict变量中存储字符串:hash对.然后使用值(而不是键)对变量进行排序,然后使用O(n)循环查找冲突.

问题是因为有2 ^ 25个字符串和它们的2 ^ 25个哈希值,所以dict变量中有2 ^ 50个值.这是非常耗费资源的.那么,我如何使用有限的RAM(例如1GB左右)来做到这一点?

我已经尝试过:
1.使用6GB交换空间运行它.该程序一夜之间运行,但仍未完成.这基本上比O(n_square)搜索更慢!哈希计算的RAM使用量约为3.2 GB.但在那之后,当涉及到sort命令时,使用的RAM再次开始拍摄!我虽然python排序使用In-Place-Quicksort :(
2.我只存储了哈希并发现了一个碰撞.但由于没有存储它,所以找不到相应的字符串.

我不应该使用数据库等.最多是一个文本文件,但这没有帮助.另外,我对Python很新,但不要限制你的答案水平.

PS:这是一项任务.有人声称在一分钟内发现了300MB RAM的冲突.不知道这是不是真的.我已经解决了问题,但答案无法实现!在工作中,所以现在无法访问代码.将很快添加.

码:

from Crypto.Hash import SHA256
import os
import random
import string
from operator import itemgetter

def shaa():

    trun=[]
    clist={}
    for i in range(0,33554432):

        sha=SHA256.new(str(i)).hexdigest()
        sha=int(bin(int(sha,16))[-50:],2)
        clist[i]=sha

    print 'Hashes done.'

    clist=sorted(clist.items(), key=itemgetter(1))  
    for i in range(0,33554432):

        if(clist[i]==clist[i+1]):
            #print string[i],string[i+1]
            print clist[i]
            return 1
    return 2

result=2
while(result==2):
    result=shaa()
Run Code Online (Sandbox Code Playgroud)

python hash ram dictionary hash-collision

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

这个简单的python元类有什么问题?

Digression开始

我刚学会了Python中的元类.我不认为python的创建者希望每个人都使用它们.我的意思是名字,在大多数情况下可能不是一个类的元类足以让大多数人远离这个概念!

题外话题结束

关于我的问题.我编写了这个简单的元类来为模块中创建的所有类添加默认的文档字符串.但它不起作用:

def metest(cls,name,bases,dict):
    cls.setattr(cls,'__doc__',"""Default Doc""")
    return type(cls,(),{})

__metaclass__=metest

class test(object):
    pass

print test.__doc__

t=test()

print t.__doc__
Run Code Online (Sandbox Code Playgroud)

输出:

None
None
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python metaclass

6
推荐指数
1
解决办法
1072
查看次数

Teamcity NUnit测试 - 未找到任何组件

我正在尝试让TeamCity为项目设置.我想运行一个计划的构建,其中包括运行NUnit测试的步骤.

我的NUnit构建步骤如下所示:

Runtime: NUnit-2.6.3 v4.0 MSIL
Run tests on: **/Tests/*.dll
Execute: If all previous steps finished successfully
Run Code Online (Sandbox Code Playgroud)

但每次我运行构建时都会收到错误消息:

No assemblies were found.

为什么会发生这种情况,我该如何解决?此外,从概念上讲,此构建步骤将在项目实际构建之前发生.但除非项目是在第一个构建的,否则将如何存在任何测试DLL(程序集)?

teamcity nunit unit-testing

6
推荐指数
1
解决办法
6920
查看次数

无法理解这个python装饰器

我是python decorators的新手.我借助简单的例子理解了基本概念.但是当我试图阅读这个更实用的装饰时,我感到迷茫.以下是我的问题所遵循的代码:

class countcalls(object):
   "Decorator that keeps track of the number of times a function is called."

   __instances = {}

   def __init__(self, f):
      self.__f = f
      self.__numcalls = 0
      countcalls.__instances[f] = self

   def __call__(self, *args, **kwargs):
      self.__numcalls += 1
      return self.__f(*args, **kwargs)

   def count(self):
      "Return the number of times the function f was called."
      return countcalls.__instances[self.__f].__numcalls

@countcalls
def f():
   print 'f called'

f()
f()
f()
print f.count() # prints 3
Run Code Online (Sandbox Code Playgroud)

我的疑惑:

  1. 当我们将装饰器添加到函数前面时,这是否意味着我们正在创建装饰器类的对象?在我们的例子中,当它说:

    @countcalls def f(): print 'f called'

@countcalls …

python decorator

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

从两个不同的进程访问时,为什么共享内存值会发生变化?

我在父母和孩子之间创建共享内存.然后我从子进程向共享内存写一个值并从父进程中读取它.但价值观是不同的.这是代码:

#include <sys/shm.h>
#include <sys/stat.h>
#include <stdio.h>

int main()
{
    int seg_id, pid;
    int fib1 = 1, fib = 1, temp;
    int i, tempsize;
    int *result;

    seg_id = shmget(IPC_PRIVATE, 8, S_IRUSR | S_IWUSR);
    result = (int *) shmat(seg_id, NULL, 0);

    printf("Enter size\n> ");
    scanf("%d", &tempsize);

    pid = fork();
    if (pid == 0) 
    {
         for(i = 0; i < tempsize; i++)
         {
             temp = fib;
             fib = fib + fib1;
             fib1 = temp;
         }
         printf("fib value %d\n", fib);

         result = fib; …
Run Code Online (Sandbox Code Playgroud)

c pointers shared-memory

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

如何验证序列化/反序列化期间至少存在两个字段之一

我正在使用 Django Rest Framework 并定义我的 Serializer 类。Serializer 类正在验证的输入包含两个字段,如下所示:

"absolute_date_range":{
  "start":...,
  "end":...,
}

"relative_date_range"="last_7"
Run Code Online (Sandbox Code Playgroud)

用户可以选择传递其中之一或两者。但至少必须存在其中之一。如果不是,那么它应该会导致验证错误。

required=True条件仅适用于单个字段。如果我使用自定义逻辑执行此操作,那么将此逻辑放入序列化程序或自定义字段字段级验证中的最佳位置是哪个?

如何在我的序列化器中强制执行此操作?

django validation serialization deserialization django-rest-framework

3
推荐指数
2
解决办法
3965
查看次数

如何从 Django 中的编码 URL 获取请求参数?

我正在使用 Django Rest 框架。

API 接收带有编码到 URL 中的 json 对象的 GET 请求。例如:

/endpoint?%7B%0D%0A++%22foo%22%3A%5B%22bar%22%2C%22baz%22%5D%0D%0A%7D

解码参数在哪里

{
  "foo":["bar","baz"]
}
Run Code Online (Sandbox Code Playgroud)

我在 Django 或 DRF 的文档中找不到任何指向框架如何处理此问题的内容,以便我QueryDict通过执行以下操作来获取其中的 json 对象:

request.query_params # Should yield a dict -> {foo=[bar,baz]}

如何在 Django Rest Framework 中解码 JSON 编码的 URL?

请注意,我的实际参数要复杂得多。使用 POST 不是因为调用者严重依赖缓存和书签

python django json urlencode django-rest-framework

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

Maven 未运行 JUnit 测试

我的pom.xml

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter</artifactId>
  <version>5.8.1</version>
  <scope>test</scope>
</dependency>
...
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.0.0-M5</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但当我这样做时mvn clean test

-------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Run Code Online (Sandbox Code Playgroud)

请注意,IntelliJ 确实可以识别测试 在此输入图像描述 (尽管当我单击test文件夹并选择时Run All Tests,它会说No tests found

为什么 Maven 不运行我的单元测试以及如何修复它?

java junit maven maven-surefire-plugin

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

如何使用Python在后台运行DOS批处理文件?

如何使用Python在后台运行DOS批处理文件?

我在说C:\的地方有一个test.bat文件。
现在,我想在后台使用python运行此bat文件,然后返回到python命令行。

subprocess.call('path\to\test.bat')从python命令行运行批处理文件。它在与python命令行相同的窗口中运行批处理文件。

如果仍然不清楚/ TL.DR-

怎么了:

>>>subprocess.call('C:\test.bat')
(Running test.bat. Can't use python in the same window)
Run Code Online (Sandbox Code Playgroud)

我想要的是:

>>>subprocess.call('C:\test.bat')
(New commandline window created in the background where test.bat runs in parallel.)
>>>
Run Code Online (Sandbox Code Playgroud)

python command-line subprocess

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