小编whi*_*kid的帖子

为什么这些Python代码的表现如此不同

请看下面的代码来解决同一组问题,我不认为提到问题无论如何会帮助目的,这是Josephus问题的又一次迭代:

解决方案1:

import sys
from math import log

cases= int(sys.stdin.readline())
current= 0
while current < cases:
    current += 1
    n = int(sys.stdin.readline())
    print 2*(n - 2**(int(log(n,2))))+1
Run Code Online (Sandbox Code Playgroud)

该解决方案在累计1.0912秒内解决了给定的10个测试用例,并消耗了4360KiB的内存.

解决方案2:

def josephus_2( n ):
    from math import log
    return 2*(n - 2**(int(log(n,2))))+1

import sys
cases= int(sys.stdin.readline())
current= 0
while current < cases:
    current += 1
    n = int(sys.stdin.readline())
    print josephus_2( n )
Run Code Online (Sandbox Code Playgroud)

该解决方案在总共1.0497秒和640KiB内存中解决了相同的10个测试用例.

作为一个Python n00b,我想知道,虽然根据在线评判,我获得两个相同的积分,但是什么使解决方案2比1更快,更高的内存效率?我知道时间差可以听起来很少,但同时我在最快的解决方案上排名第一,甚至比c/c ++/perl提交更快

这个截图有帮助吗?

python performance time python-2.7 josephus

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

如何从chrome扩展程序内安全地更新远程数据库?

我很难弄明白这一点.花了大约4个小时爬网没有SO帖子来救我.

想象一个场景:

  1. 我已经编写了一个chrome扩展,它捕获了网页上的一些特定操作(主要是按钮点击).该操作触发一个函数,该函数捕获一些用户信息和按钮信息(页面本身都存在)并显示它

  2. 现在我希望插件应该能够将其更新为远程服务器上的数据库设置.

由于我精通PHP(因此MySQL是不错的选择),我正在寻找一种解决方案,以确保只从扩展本身进行更新.

为此,我认为最好的选择是运行一个GET/POST请求,例如http://remoteserver.tld/update-db.php?id = XXXX&action = YYYYY&foo = bar ....等等.但是如果用户打开/传递post vars到插件外的这个url?

数据仍将更新,完整性将丢失!

下一个最好的想法是包含带有请求的密钥,但是扩展程序再次用JS编写,几乎任何人都可以嗅出密钥.

引导我找到更新远程服务器上数据库的最佳方法,并确保操作已通过身份验证.

干杯!

php mysql javascript-security google-chrome-extension

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

在每个DOM更改"完成"时触发javascript事件

我知道这可以用某种方式处理,但截至目前,这给了我一个真正的困难时期.我正在编写一个脚本,并希望在DOM操作完成时触发一些特定的函数.我无法修改/添加/删除任何其他脚本(因为它可能使用某些框架注入页面).该页面使用ajax请求(未在jQuery中实现)来加载/修改内容.现在我希望在每个DOM修改完成后触发一个事件.我目前的方法是在每个DOMSubtreeModified事件中触发该函数.像这样的东西

$(document).bind('DOMSubtreeModified', doSomeStuff);
Run Code Online (Sandbox Code Playgroud)

但是这种方法的缺点是,假设ajax在调用中加载了10个元素,然后为每个元素触发doSomeStuff.这可以限制为仅在加载第10个元素后触发吗?重置$(document).ready()事件之类的东西?每次DOM准备好时(加载ajax内容后)都会触发$(document).ready()

html javascript ajax jquery dom

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

与Python2相比,Python3中的相同代码慢

在CodeChef编码了此问题,并将其作为Python3解决方案提交:

import sys

n,k = map(int,sys.stdin.readline().split(" "))
nos = map(int,sys.stdin.readlines())
ans = 0
for i in nos:
    if i>0 and i%k == 0:
        ans += 1
print(ans) 
Run Code Online (Sandbox Code Playgroud)

但是,如果我将代码编写为:

import sys

n,k = map(int,sys.stdin.readline().split(" "))
nos = map(int,sys.stdin.readlines())
ans = 0
for i in nos:
    if i>0 and i%k == 0:
        ans += 1
print ans 
Run Code Online (Sandbox Code Playgroud)

并将其提交为Python2解决方案,然后该解决方案将被接受。

我根本不明白这是怎么回事?

==== ###更新### ====

Sebastian的解决方案适用于Python3,但比我的python2.7解决方案了10 。我仍然没有得到答案,为什么最新版本的语言与以前的版本相比性能会下降?

python performance python-2.7 python-3.x

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