小编Mar*_*ark的帖子

Python:为什么不(a,b,c)=(*x,3)

显然我不能用Python(2.7)做到这一点:

x = (1, 2,)
(a, b, c) = (*x, 3)
Run Code Online (Sandbox Code Playgroud)

它在我的头脑中是有道理的,但是......我可以创建一个函数:

make_tuple = lambda *elements: tuple(elements)
Run Code Online (Sandbox Code Playgroud)

那我就能做到

(c, a, b) = make_tuple(3, *x)
Run Code Online (Sandbox Code Playgroud)

但不是,例如

(a, b, c) = make_tuple(*x, 3)
(a, b, c, d) = make_tuple(*x, *x)
y = [3, 4]
(a, b, c, d) = (*x, *y,)
Run Code Online (Sandbox Code Playgroud)

所以我要问的是

  1. 是不是有理由不允许这个?(第一件事)
  2. 什么是最接近的工作?

我目前对#2的猜测:

(a, b, c) = x + (3,)
(a, b, c, d) = x + x
(a, b, c, d) = x + tuple(y)
Run Code Online (Sandbox Code Playgroud)

python

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

chart.js 中填充折线图中的悬停/单击区域

给定 chart.js 中的折线图,其中填充了曲线下方的区域。当用户悬停或点击填充区域时,有没有办法获得有用的事件?

var chart_canvas = document.getElementById("myChart");
var stackedLine = new Chart(chart_canvas, {
    type: 'line',
    data: {
        labels: ["0.0", "0.2", "0.4", "0.6", "0.8", "1.0"],
        fill: true,
        datasets: [{
            label: 'Usage',
            data: data[0],
        },
        {
            label: 'Popularity',
            data: data[1],
        }]
    },
    options: {
        onHover: function (elements) {
            console.log(elements);
        }
        // more stuff
    }
});
Run Code Online (Sandbox Code Playgroud)

我试过了,onHover但是在填充区域时,唯一的参数是一个空数组。

我有一个堆积的、填充的图表,如图像中的曲线。当鼠标位于浅灰色区域的任何位置时,我想要一个事件。

带有chart.js的填充折线图示例(带堆叠)

编辑这是一个小提琴:https : //jsfiddle.net/markv/rvqjkrp9/1/

javascript charts mouseover dom-events chart.js

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

使用带有Kotlin多平台的Gradle子项目

我使用科特林多平台(JVM和JS),这在IDEA创建三个项目:demo,demo-jsdemo-jvm.

我想将公共代码拆分为更多子项目/子模块.让我们说我补充commonmod; 我如何编译?

现在的错误gradle run -p demo-jvm是:

demo/demo-js/src/main/kotlin/demo/commonmod/example.kt: (3, 12): Actual function 'getPlatform' has no corresponding expected declaration
Run Code Online (Sandbox Code Playgroud)

但我认为我这样做根本就是错误的,因为我不知道应该依赖什么(虽然我尝试过一些迭代).如果我解决了这个错误,我会得到其他的,然后是其他的,直到我回到这个.


作为一个最小但仍然很大的例子,我有:

demo/settings.gradle:

rootProject.name = 'demo'

include 'demo-jvm', 'demo-js', 'commonmod'
Run Code Online (Sandbox Code Playgroud)

demo/build.gradle:

buildscript { ... }

apply plugin: 'kotlin-platform-common'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
    compile project(':commonmod')
}
Run Code Online (Sandbox Code Playgroud)

demo/demo-jvm/settings.gradle:

rootProject.name = 'demo'
Run Code Online (Sandbox Code Playgroud)

demo/demo-jvm/build.gradle:

buildscript { ... }

apply plugin: 'kotlin-platform-jvm'
apply …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin gradle-dependencies kotlin-multiplatform

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

如何将参数传递给使用setTimeout调用的函数?

我想将一个参数传递给一个名为using的函数setTimeout.我找到了这三个选项:

A = 1;
// Method 1: closure things
setTimeout(function() { whatsA(A); }, 100);
// Method 2: third argument (same result with [A])
setTimeout(whatsA, 100, A);
// Method 3: eval
setTimeout('whatsA(' + A + ')', 100);
A = 2;
function whatsA(X) { console.log(X); }
Run Code Online (Sandbox Code Playgroud)

这在Internet Explorer 9中显示2,undefined1.

方法1:显然,我不希望在传递之后更改参数(当然在简单整数的情况下).

方法2:如果只有Internet Explorer支持它,这将是完美的.

方法3:这似乎是唯一的选择.但它看起来并不像其他人那么漂亮,传递的东西要被评估而不是功能.

有没有更好的办法?

javascript closures scope settimeout

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

服务器无法读取Django在一个输入中的多个文件

当我向Django提交一个多文件上传表单时

<input type="file" name="files" multiple />
Run Code Online (Sandbox Code Playgroud)

我得到了一个明智的结果request.FILES:

(MultiValueDict: {u'files': [(InMemoryUploadedFile: 0202.jpg (image/jpeg)), (InMemoryUploadedFile: 0203.jpg (image/jpeg))]})
Run Code Online (Sandbox Code Playgroud)

但后来我的困惑开始了.我以为request.FILES['files']会包含几个文件(似乎是一个列表),但它只显示

0203.jpg
Run Code Online (Sandbox Code Playgroud)

没有任何InMemoryUploadedFile部分,更重要的是:只有最后一个文件!

只通过那个文件循环request.FILES,.iteritems()显然request.FILES['files']是难以理解的; 以下代码实际上冻结了控制台并使其无休止地发出哔哔声:

for v in request.FILES['files']:
    print v
    print type(v)
Run Code Online (Sandbox Code Playgroud)

那么......这是否正常?我究竟做错了什么?

因为我开始认为这可能是一个错误:我在Windows 7上使用Django 1.4.2和Python 2.7.

django file-upload

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

Django会话竞争条件?

总结:Django会话中是否存在竞争条件,如何防止它?

我对Django会话有一个有趣的问题,我认为由于同一用户的同时请求而涉及竞争条件.

它出现在一个脚本中,用于同时上传多个文件,在localhost上进行测试.我认为这很可能同时发生来自同一用户的请求(由于本地主机的响应时间很短,因文件上传而导致请求时间过长).尽管如此,在localhost之外的正常请求仍然可能,但不太可能.

我发送了几个(文件发布)请求,我认为这样做:

  1. Django自动检索用户的会话*
  2. 不相关的代码需要一些时间
  3. 得到request.session['files'](字典)
  4. 将有关当前文件的数据附加到字典中
  5. request.session['files']再次存储字典
  6. 检查它确实已存储
  7. 更多不相关的代码需要时间
  8. Django自动存储用户的会话

这里的检查将指示信息确实已存储在会话中.但是,未来的请求表明有时它有,有时它没有.

我认为正在发生的是这些请求中的两个(A和B)同时发生.请求A request.session['files']首先检索,然后B执行相同的操作,更改并存储它.当A终于完成时,它会用B覆盖会话更改.

两个问题:

  1. 这确实是发生了什么?django开发服务器是多线程的吗?在Google上,我发现有关使其成为多线程的网页,建议默认情况下不是这样吗?否则,可能是什么问题?
  2. 如果这种竞争条件是问题,那么解决它的最佳方法是什么?这是一个不便,但不是安全问题,所以如果机会可以显着减少,我已经很高兴.

在更改之前检索会话数据并立即保存它应该会减少我认为的机会.但是我还没有找到办法做到这一点request.session,只能使用它来解决它django.contrib.sessions.backends.db.SessionStore.但是我认为如果我改变它,那么Django将request.session在请求结束时覆盖它.

所以我需要一个request.session.reload()request.session.commit(),基本上是这样.

python django session multithreading race-condition

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

matplotlib:sys.exitfunc中的错误

error in sys.exitfunc在使用matplotlib时一直在努力.例如,以下代码将它抛给matplotlib 1.3.0/Python 2.7.3/Ubuntu 12.04.3 LTS

from matplotlib.pyplot import figure, show
from numpy.random import random
fh = figure(figsize = (15, 10, ))
ax = fh.add_axes((.1, .1, .8, .8, ))
ax.scatter(random((100, )), random((100, )))
fh.show()
Run Code Online (Sandbox Code Playgroud)

这产生了

Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/usr/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/_pylab_helpers.py", line 86, in destroy_all
    manager.destroy()
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk3.py", line 427, in destroy
    self.canvas.destroy()
AttributeError: FigureManagerGTK3Agg instance has no attribute 'canvas'
Error in sys.exitfunc:
Traceback (most …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

带有OMP的f2py:无法导入模块,未定义的符号GOMP_*

我希望使用openmp来加速我通过f2py运行的Fortran代码.但是,在成功编译之后,我无法在Python中导入模块.

对于像这样的Fortran95模块:

module test
implicit none
contains
subroutine readygo()
real(kind = 8), dimension(10000) :: q
!$OMP WORKSHARE
q = 7
!$OMP END WORKSHARE
end subroutine
end module
Run Code Online (Sandbox Code Playgroud)

使用以下命令编译和导入:

f2py -m SOmod --fcompiler=gnu95 --f90flags='-march=native -O3 -fopenmp' -c SOtest.f95
python2 -c "import SOmod"
Run Code Online (Sandbox Code Playgroud)

我收到一个错误.错误是导入 - 编译直接使用f2py或gfortran工作正常(仅获得有关'使用已弃用的NumPy API'的警告).

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: ./SOmod.so: undefined symbol: GOMP_barrier
Run Code Online (Sandbox Code Playgroud)

我为不同的OMP指令得到了不同的GOMP_*错误.没有指令(但使用-openmp标志)它可以工作.

任何帮助将不胜感激.

python fortran numpy openmp f2py

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

Python ical:获取一天的活动,包括重复活动

有没有一种简单的方法可以从Python中的ical文件中获取一天的事件?

对于非经常性的,有一天的事件,我使用了类似的东西

from icalendar import Calendar
for event in Calendar.from_ical(ical).walk('vevent'):
    if edate > ref_ref_day_start and event.get('dtstart').dt < ref_day_end:
        # code here
Run Code Online (Sandbox Code Playgroud)

但重复发生的事件只发生walk一次.

我可以看到如何在没有结束的情况下重复事件的无限事件迭代可能是一个问题.但仍然必须有一个比自己计算重复更简单的方法,对吗?

(我找不到太多的文档.我阅读了与重复发生的事件相关的icalendar测试,但它似乎没有做这样的事情).

python icalendar datetime rfc5545

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

调整最小图像尺寸

这似乎是之前有人问过的问题,但我找不到重复的东西,所以......

我希望图像的最小尺寸在保持纵横比的同时最大缩放 200。所以:

  • 600x400 图像的最小尺寸为 400,应为 200,因此按 0.5 缩放:新图像将为 300x200
  • 同样,400x800 将是 200x400
  • 100x300 的最小尺寸已经 < 200,因此它将保持为 100x300。

显然,如果它可以用 css 来完成,那么它比 javascript 更受欢迎。

javascript css aspect-ratio image-resizing

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