小编fdm*_*ion的帖子

用于Python的快速RC4密码流?

我正在尝试编写一个需要大量加密强度伪随机字节的应用程序.

RC4密码对此非常理想; 它的重量轻,易于理解.所以,我得到了规范并用Python编写了一个RC4算法.

它完全按预期工作,但是,它像糖蜜一样慢.在我的Core i7 2.2GHz上,我只能从算法中获得大约1MB /秒的速度.

很明显,Python的解释性质并不是最适合这类任务的.我的问题是我不熟悉C编码 - 我用C做的最好的是一些Hello World的东西和一些文件读写的实验.无论哪种方式,我对C使用Python-C API肯定不够好.

我知道.NET/C#,我在Windows上用C#编写了相同的算法,并且我能够轻松地超过60MB /秒.所以.NET的CLR更加优化.但是,Python应用程序的目标平台是Unix/Linux.

理想情况下,我不想通过大量的中间层来获得优化的RC4密码到Python应用程序中.

由于RC4依赖于状态,理想情况下我会用类来做(这就是我用Python实现的方式.)所以,这里是我想要做的一小部分:

rc4 = RC4Encrypter()
rc4.seed(myKey) # seed the RC4 algorithm with bytes from string myKey
rc4.getRC4Bytes(1048576) # get the next 1MB of RC4 cryptostream bytes as a binary string
rc4.encryptWithRC4(myString) # encrypt myString's bytes with RC4 bytes using xor and return
Run Code Online (Sandbox Code Playgroud)

有什么建议?我很想学习C,但对于这个简单的项目来说,这是一个很大的学习曲线.

python encryption rc4-cipher

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

根据键列表将一个 dict 的一部分复制到一个新的 dict

样本:

d = {
    "test": 1,
    "sample": 2,
    "example": 3,
    "product": 4,
    "software": 5,
    "demo": 6,
}

filter_keys = ["test","sample","example","demo"]
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的字典,它只包含第一个字典中键出现在列表中的那些项目。换句话说,我想要:

d2 = {
    "test": 1,
    "sample": 2,
    "example": 3,
    "demo": 6,
}
Run Code Online (Sandbox Code Playgroud)

我可以用一个循环来做到这一点:

d2 = {}
for k in d.keys():
    if (k in filter_keys): 
        d2[k] = d[k]
Run Code Online (Sandbox Code Playgroud)

但这似乎非常“非 Pythonic”。我还猜测,如果您有一个巨大的 dict,比如说 5,000 个左右的项目,与更直接的方式相比,向新 dict 不断添加新项目会很慢。

此外,您还希望能够处理错误。如果列表包含不是字典中的键的内容,则应该忽略它。或者它可能被添加到新的字典中,但值为 None。

有没有更好的方法来实现这一点?

python dictionary

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

关于代码结构的建议,以防止代码重复(Python,列表)

游戏中的场景是我有一个有序的项目列表.我想将该列表转换为单个字符串.

然而.

这不仅仅是将每个项目转换为字符串并连接的问题.作为转换的一部分,我需要在列表上进行一些处理.

这是一个粗略的例子:

列表:

[1, 
 2,
 3,
 0,
 1,
 9,
 -4,
 3,
 2]
Run Code Online (Sandbox Code Playgroud)

我想要的输出是这样的:

The total of a group is 6.
The total of a group is 10.
The total of a group is 5.
Run Code Online (Sandbox Code Playgroud)

这是我写的代码可以做到这一点:

total = 0
result = ""
for item in myList:
    if (item <= 0):
        result += "The total of a group is %d.\n" % total
        total = 0
        continue
    total += item

# NOTICE THE CODE DUPLICATION HERE...
result += "The total of …
Run Code Online (Sandbox Code Playgroud)

python structure list

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

C#:在带参数的函数条件下?

我正在使用一个使用out参数的函数的API .我想out在while循环中使用其中一个参数中的值.例如:

static int counter = 0;

static void getCounterValue(out int val)
{
    val = counter;
    counter++;
}

static void Main()
{
    // Right now, I'm having to do this:
    int checkVal = 0; // I have to figure out an appropriate starting value.
    while (checkVal < 10) 
    {
        getCounterValue(out checkVal);
        Console.WriteLine("Still waiting.");
    }
    Console.WriteLine("Done.");
}
Run Code Online (Sandbox Code Playgroud)

有没有更简单的语法来做到这一点?我想要更经典的东西while (getCounterValue() < 10),但我必须处理out参数,因为它是一个我无法改变的API.

c#

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

Resharper:在C#7.0功能上启用警告?

我的问题与我在网上找到的每个问题完全相反.

我想在Resharper中启用 C#7.0警告/错误(在VS2017中运行,今天刚安装的版本.)

我需要这样做,因为我正在处理的项目将发布到我的工作场所的服务器,当使用C#7.0功能时,他们的CI会抛出致命错误R# C# 7.0 language feature,因此我无法使用它们(他们不会接受任何项目他们的CI失败了.)

他们在CI中使用Resharper CLI.所以我想让我的Resharper抛出相同的错误,这样我就可以快速找到并消除C#7.0的功能.我的Resharper显示项目是干净的(除了一些小的"它可能是一个问题,但它不适合我"),所以当我运行代码分析时,我没有致命的错误甚至是关于C#7.0的警告.

到目前为止我遇到的每个问题都是询问如何禁用有关C#7.0的警告.我的Resharper没有发出任何警告或错误,而我们的CI则是.

我查看了选项,但找不到任何明显的"C#7.0"选项.我找了类似"最大支持语言/抛出错误,如果使用更高版本的语言功能/等",但我似乎无法找到任何东西.

编辑:Web.config codedom部分:

<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  </compilers>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)

它肯定设置为语言版本6 ...

resharper c#-7.0

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

Python:没有类的模块中的持久变量?

编辑:这是我尝试失败的实际代码:

sounds.py

import audio
import time

localAudioPlayer = None

def Play(soundString, wait=True):
    if (localAudioPlayer != None): 
        localAudioPlayer.stop()
    localAudioPlayer = audio.stream("sound/%s.ogg" % soundString)
    localAudioPlayer.play()
    if (wait == True):
        while (localAudioPlayer.playing == True):
            time.sleep(0.1)
    return
Run Code Online (Sandbox Code Playgroud)

"audio"是我写的一个完整的库(在带有init的文件夹中),允许音频播放.

这里的想法是,如果在声音已经播放的同时调用Play(),则应停止该声音.

我没有我的代码设置,我可以实例化audio.stream()对象,而无需播放实际文件,因此预先初始化它并不是一个好主意.

我尝试了与原始示例类似的代码(我设置stuffLocalVar = None然后在函数中测试它为None)并且它工作正常.所以这是特定代码的特定内容.

当我在Python控制台上"导入声音"并尝试直接执行Play()时,我得到了相同的回溯.

追溯:

>>> sounds2.Play("file.ogg")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "sounds2.py", line 7, in Play
    if (localAudioPlayer != None): 
UnboundLocalError: local variable 'localAudioPlayer' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

原版的

我不确定这个设置的正确术语,所以让我举个简短的例子:

mainApp.py:

import stuff
print stuff.do() …
Run Code Online (Sandbox Code Playgroud)

python module

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

Python 2:一行或非常紧凑的代码,用于检查几个字符串的"startswith"?

场景:

我有一个清单:

['item','place','thing']
Run Code Online (Sandbox Code Playgroud)

我有一些字符串:

"item", "item1", "thing55", "place_C", "stuff", "junk5"
Run Code Online (Sandbox Code Playgroud)

在上面,我希望前四个匹配,最后两个不匹配.startswith函数最适合此检查.

(测试字符串"item","item1"等的列表不是python列表;它只是一组可能被检查的样本数据.但是,要匹配"item","place"的字符串列表,"thing"是代码中的python列表.)

我可以遍历第一个列表并将字符串与startswith进行比较:

successVar = False
for s in myStrings:
    if (testString.startswith(s)): 
        successVar = True
        break
#  Now you would check successVar to decide if string matched
Run Code Online (Sandbox Code Playgroud)

但在所有情况下,这并不一定最好.例如,假设这是if/elif结构的一部分:

if (testString == "hello"):
    # do something based on exact string match
elif (testString.endswith("!")):
    # do something if string ends with _one_ specific entity
elif <somehow, do the above comparison in here>
    # do something if string starts with any of the …
Run Code Online (Sandbox Code Playgroud)

python list

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

标签 统计

python ×5

list ×2

c# ×1

c#-7.0 ×1

dictionary ×1

encryption ×1

module ×1

rc4-cipher ×1

resharper ×1

structure ×1