点(.)和美元符号有($)什么区别?据我了解,它们都是不需要使用括号的语法糖.
我一直想知道,一般来说,在循环之前声明一个抛弃变量,而不是在循环内部重复,是否会产生任何(性能)差异?Java中的一个(毫无意义的)示例:
a)循环前的声明:
double intermediateResult;
for(int i=0; i < 1000; i++){
intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
b)声明(重复)内循环:
for(int i=0; i < 1000; i++){
double intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
哪一个更好,一个还是b?
我怀疑重复变量声明(例子b)在理论上会产生更多的开销,但是编译器足够聪明,所以它并不重要.实施例b具有更紧凑的优点,并且将变量的范围限制在其使用的位置.尽管如此,我倾向于根据示例来编码一个.
编辑:我对Java案件特别感兴趣.
看来这里已经有一些关于python 3中相对导入的问题了,但是在经历了很多这些问题后,我仍然找不到我的问题的答案.所以这是问题所在.
我有一个如下所示的包裹
package/
__init__.py
A/
__init__.py
foo.py
test_A/
__init__.py
test.py
Run Code Online (Sandbox Code Playgroud)
我在test.py中有一行:
from ..A import foo
Run Code Online (Sandbox Code Playgroud)
现在,我在文件夹中package,我跑了
python -m test_A.test
Run Code Online (Sandbox Code Playgroud)
我收到了消息
"ValueError: attempted relative import beyond top-level package"
Run Code Online (Sandbox Code Playgroud)
但如果我在父文件夹中package,例如,我运行:
cd ..
python -m package.test_A.test
Run Code Online (Sandbox Code Playgroud)
一切都好.
现在我的问题是:
当我在文件夹中时package,我在test_A子包中运行模块test_A.test,根据我的理解,..A只上升一个级别,它仍然在package文件夹中,为什么它给出了消息说beyond top-level package.导致此错误消息的原因是什么?
我发现JUnit的正确使用(或至少是文档)非常令人困惑.这个问题既可作为未来参考,也可作为真正的问题.
如果我理解正确,有两种主要的方法来创建和运行JUnit测试:
方法A(JUnit 3-style):创建一个扩展TestCase的类,并用该单词启动测试方法test.当作为JUnit Test(在Eclipse中)运行该类时,test将自动运行以该单词开头的所有方法.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Run Code Online (Sandbox Code Playgroud)
方法B(JUnit 4-style):创建一个"普通"类并@Test在方法前加一个注释.请注意,您不必使用单词启动方法test.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Run Code Online (Sandbox Code Playgroud)
混合两者似乎不是一个好主意,请参阅例如 …
如何判断我(Windows 7)PC上的特定Eclipse实例是32位还是64位版本?
我已经检查了关于屏幕和可以从那里调用的对话框的迷宫,但我没有找到任何线索.
此外,右键单击Windows资源管理器中的eclipse.exe并打开属性对话框没有给出任何提示.
虽然我知道Python的鸭子类型概念,但我有时会遇到函数的参数类型或函数返回值的类型.
现在,如果我自己编写函数,我就知道了类型.但是,如果有人想要使用并调用我的函数,他/她应该如何知道这些类型呢?我通常将类型信息放在函数的docstring中(如:"...the id argument should be an integer..."和"... the function will return a (string, [integer]) tuple.")
但是查找文档字符串中的信息(并将其作为编码器放在那里)真的应该如何完成?
编辑:虽然大多数答案似乎都指向"是的,文档!" 对于"复杂"类型,我觉得这并不总是很容易.
例如:如何在docstring 中简明扼要地描述函数返回元组列表,每个元组的元组(node_id,node_name,uptime_minutes)以及元素分别是字符串,字符串和整数?
文档字符串PEP文档没有给出任何指导.
我想反驳就是在这种情况下应该使用类,但我发现python非常灵活,因为它允许使用列表和元组来传递这些东西,即没有类.
是否有可能在IPython笔记本中以某种不同的颜色显示某些输出?例如,有些东西:
print("Hello Red World", color='red')
Run Code Online (Sandbox Code Playgroud) 什么是@property在Django?
这是我的理解:@property是一个类中方法的装饰器,用于获取方法中的值。
但是,据我所知,我可以像平常一样调用该方法,它就会得到它。所以我不确定它到底是做什么的。
文档中的示例:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
birth_date = models.DateField()
def baby_boomer_status(self):
"Returns the person's baby-boomer status."
import datetime
if self.birth_date < datetime.date(1945, 8, 1):
return "Pre-boomer"
elif self.birth_date < datetime.date(1965, 1, 1):
return "Baby boomer"
else:
return "Post-boomer"
@property
def full_name(self):
"Returns the person's full name."
return '%s %s' % (self.first_name, self.last_name)
Run Code Online (Sandbox Code Playgroud)
如果存在与不存在有什么区别?
我在Eclipse中为Mercurial集成安装了HgEclipse插件.我在Eclipse中有一个现有的(Java)项目,但我无法弄清楚如何为这个现有项目启用mercurial change tracking.
我似乎可以导入一个mercurial项目(File> Import> Mercurial> Clone ...),但这只适用于新的Eclipse项目......
当然,我可以通过命令行应用Mercurial,例如hg init在项目目录中,但这不会在Eclipse中被选中.
那么,如何为现有 Eclipse项目打开Mercurial ?
我从来没有决定评论if-then-else结构的最佳方式,所以我从来没有标准化以一致的方式来评论它们.我很欣赏任何见解.
一些选择:
一个)
if (blabla) {
// this comment explains what happens in the IF case
dothis();
} else {
// this comment explains what happens in the ELSE case
dosomethingelse();
}
Run Code Online (Sandbox Code Playgroud)
缺点:在多个dothis()语句的情况下,我喜欢评论主要块,在这种情况下,IF-comment是否属于第一个dothis()块或整个IF情况并不总是很清楚
或b)
if (blabla) { // this comment explains what happens in the IF case
dothis();
} else { // this comment explains what happens in the ELSE case
dosomethingelse();
}
Run Code Online (Sandbox Code Playgroud)
缺点:仅适用于简短评论.如果IF和ELSE情况没有直接从代码中清除,我通常会注释IF-THEN-ELSE结构,这通常需要长于一行的注释.
或c)
// if the following happens
if (blabla) { // then do this
dothis(); …Run Code Online (Sandbox Code Playgroud)