在Python中将一个可变对象设置为函数中参数的默认值是一个常见的错误.以下是David Goodger撰写的优秀文章中的一个例子:
>>> def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
>>> print bad_append('one')
['one']
>>> print bad_append('two')
['one', 'two']
Run Code Online (Sandbox Code Playgroud)
之所以出现这种情况的解释是在这里.
现在我的问题是:这个语法有一个很好的用例吗?
我的意思是,如果遇到它的每个人都犯了同样的错误,调试它,理解问题,从而试图避免它,这种语法有什么用?
在IPython笔记本(例如v3.1)中,我可以添加一个~/.ipython/profile_default/static/custom/custom.js文件来执行一些自定义JavaScript.例如,我可以这样做:
require(['base/js/namespace', 'base/js/events'], function(IPython, events) {
console.log("A");
events.on('app_initialized.NotebookApp', function() {
console.log("B");
});
console.log("C");
});
Run Code Online (Sandbox Code Playgroud)
然后,在JS控制台中,我会看到A,接着是B,然后是C.
现在,从版本4.0开始,他们将它分解为Jupyter笔记本.加载相同的文件(尽管事实是它在下面~/.ipython,而不是在下面~/.jupyter),并且代码被执行.但是,我不再看到这B条线.我猜应用程序没有初始化.我仍然看到它在源代码中被触发,但是后来会发生,还是只是不起作用?
我如何让事情再次发挥作用?我不需要再等了app_initialized吗?在某处记录了这些吗?
这个页面似乎表明,现在的方法是创建一个自定义扩展并将所有操作放在该load_ipython_extension函数中.是对的吗?如果是这样,mathjax怎么样?和CodeMirror选项?
当我尝试从我的Windows 8笔记本电脑中弹出我的Android手机时(使用任务栏中的"安全删除硬件和弹出媒体"图标),我弹出一个"弹出USB复合设备的问题"弹出消息:
Windows无法阻止您的"Android ADB接口"设备,因为程序仍在使用它.关闭可能正在使用该设备的所有程序,然后稍后重试.
我有很多后台和Windows进程正在运行,但没有应用程序,所以任何想法可能导致这个?其中一个后台进程是"abd(32位)",那么我应该结束那个任务吗?或者只是拔掉设备并且不担心先将其弹出会更好吗?
我阅读了Stack Overflow上的几十篇帖子以及网页上的很多页面(包括GitHub的帮助页面),花了我几个小时才弄清楚如何做这个超级简单的事情,坦率地说根本不是很明显,所以我是我会在这里回答我自己的问题.
我正在使用GitHub for Windows(更新:它现在称为Github Desktop),我对我的本地文件进行了一系列更改.它变得如此混乱,我决定我只想将我的本地文件回滚到他们最后一次提交时的位置.我没有做出新的改变 - 我只是想摆脱它们.我怎样才能做到这一点?
我是R的新手,这个超出了我.下面的脚本使用两个虚拟表(结果和计数),每个表有两列(A和B).我正在运行排列测试来比较A和B的结果.具体来说,我正在查看A和B的结果/计数.结果和计数都有20行,我写了一个循环来运行排列测试每个前10行,然后是前11行,然后是12行,最多20行.当它工作时,它偶尔会有效,我最后得到一个漂亮的图形.
#Set up the dummy data - two competing tables (result & count)
result <- data.frame(matrix(runif(40)*100, nrow=20))
names(result)[1] <- paste("A"); names(result)[2] <- paste("B")
count <- data.frame(matrix(runif(40)*100, nrow=20))
names(count)[1] <- paste("A"); names(count)[2] <- paste("B")
n.iter <- 1e3
#Run a permutation test
permtest <- function(result, count) {
n <- dim(result)[1]
# print(n)
stat <- function(x, y) abs(diff(range(colSums(x)/colSums(y))))
swap <- function(x, i) { x[i, ] <- cbind(x[, "B"], x[, "A"])[i, ]; return (x) }
sim <- replicate(n.iter, { i <- runif(n) < 1/2; …Run Code Online (Sandbox Code Playgroud) 我正在使用Android Studio 2.2,我喜欢使用自动格式化我的代码ctrl-alt-L.然而,问题在于它还重新排序了我的所有方法.(出于某种原因,它希望将所有静态方法放在类的顶部.)有没有办法在自动格式化时禁用方法的重新排列?
注意:我猜我可以进入Settings -> Editor -> Code Style -> Java并在"安排"标签下删除所有"匹配规则",但必须有一个比这更简单的方法,不是吗?
我只是在Windows 10机器上安装蟒蛇,我以后做的第一件事是进入蟒蛇提示并运行conda udpate conda,然后conda update --all.正如所料,它更新了很多东西.然而,当我然后运行Spyder时,我得到一个弹出窗口说可以使用新版本的Spyder.
什么?我刚刚更新了一切.检查conda list我看到sypder 3.2.4确实安装了,所以我做了以下事情:
(基础)C:\ Users\Mark> conda update --all
解决环境:完成
已安装所有请求的包.
(基础)C:\ Users\Mark> conda update spyder
解决环境:完成
套餐计划
环境位置:C:\ Users\Mark\Anaconda3
添加/更新的规格: - spyder
将下载以下包:
Run Code Online (Sandbox Code Playgroud)package | build ---------------------------|----------------- spyder-3.2.6 | py36_0 2.6 MB以下包将更新:
Run Code Online (Sandbox Code Playgroud)spyder: 3.2.4-py36h8845eaa_0 --> 3.2.6-py36_0继续([y]/n)?
为什么conda update -all不查找和更新我安装的Spyder版本?
我遇到序列化问题,无法找到原因。这是Eclipse中的Android应用程序,给了我一个非常无用的堆栈跟踪,如下所示:
09-01 00:06:24.414: W/System.err(9961): java.io.NotSerializableException: com.myprogram.main.Entity$1
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
Run Code Online (Sandbox Code Playgroud)
找到Java标志以启用扩展的序列化调试信息后,我决定设置
-Dsun.io.serialization.extendedDebugInfo=true
Run Code Online (Sandbox Code Playgroud)
以下如何为从eclipse运行的程序指定默认的JVM参数?我将标志插入到JRE的VM参数中,但是堆栈跟踪没有更改。重新启动Eclipse没有帮助。因此,在编辑eclipse的vm args之后,我将标志添加到了eclipse.ini,但是堆栈跟踪仍然保持不变。我期望输出看起来像java.io.NotSerializableException-但是该字段在哪里?。
我得到它com.myprogram.main.Entity$1是不可序列化的。这很简单。问题是为什么?关于如何解决这个问题有java.io.NotSerializableException什么建议吗?