我最近读了很多Javascript,我注意到整个文件在要导入的.js文件中是像下面这样包装的。
(function() {
...
code
...
})();
为什么要这样做而不是简单的构造函数集呢?
我最近读了很多Javascript,我注意到整个文件在要导入的.js文件中是像下面这样包装的。
(function() {
...
code
...
})();
为什么要这样做而不是简单的构造函数集呢?
许多c++书籍包含这样的示例代码…
std::cout << "Test line" << std::endl;
...所以我也一直这么做。但我看到过很多开发者写的这样的代码:
std::cout << "Test line\n";
是否有技术上的原因,更喜欢其中一个,或者只是编码风格的问题?
根据文档,它们几乎是可以互换的。是否有使用其中一种而不是另一种的风格原因?
将数字转换为字符串的“最佳”方法是什么(从速度优势、清晰度优势、内存优势等方面考虑)?
一些例子:
字符串(n) n.toString() “”+n n+“”
是否有充分的理由说明在函数中只有一个return语句是一个更好的实践?
或者在逻辑上正确的情况下,可以从函数中返回,这意味着函数中可能有许多返回语句?
在类结构方面,是否有一个官方的c#项目顺序指南?
它是这样的:
公共字段 私有字段 属性 构造函数 方法 ?
我很好奇物品的摆放顺序是否有硬性规定?我有点到处都是。我想坚持一个特定的标准,这样我就可以在任何地方使用它。
真正的问题是我的更复杂的属性最终看起来很像方法,它们在构造函数之前的顶部感觉不合适。
任何建议/建议吗?
有时我会把if中的长条件分解成几行。最明显的方法是:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
视觉上不是很吸引人,因为动作与环境融为一体。然而,这是使用4个空格的正确Python缩进的自然方式。
目前我正在使用:
if ( cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
但这不是很漂亮
你能推荐另一种方法吗?
我一直认为如果不是x是None版本更清楚,但谷歌的风格指南和PEP-8都使用如果x不是None。是否存在任何微小的性能差异(我假设没有),是否存在其中一个确实不适合的情况(使另一个成为我的大会的明显赢家)?*
*我指的是任何单例,而不仅仅是None。
...比较单身人士喜欢 一个也没有。使用是或不是。
我见过Python中编写文档字符串的几种不同风格,最流行的风格是什么?
在支持它的语言中,返回多个值的规范方法通常是元组。
选项:使用元组
考虑下面这个简单的例子:
def f(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return (y0, y1, y2)
但是,随着返回值的增加,这很快就会出现问题。如果你想返回四个或五个值怎么办?当然,您可以继续对它们进行元组,但是很容易忘记哪个值在哪里。在任何你想要收到它们的地方拆开它们也是相当难看的。
选项:使用字典
下一个合乎逻辑的步骤似乎是引入某种“记录符号”。在Python中,最明显的方法是使用字典。
考虑以下几点:
def g(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return {'y0': y0, 'y1': y1 ,'y2': y2}
(澄清一下,y0 y1 y2只是抽象的标识符。正如所指出的,在实践中,您将使用有意义的标识符。)
现在,我们有了一种机制,可以将返回对象的特定成员投射出去。例如,
result['y0']
选项:使用类
然而,还有另一种选择。我们可以返回一个特殊的结构。我已经在Python上下文中构建了这个框架,但我相信它也适用于其他语言。事实上,如果你在C语言中工作,这可能是你唯一的选择。是:
class ReturnValue:
def __init__(self, y0, y1, y2):
self.y0 = y0
self.y1 = y1
self.y2 = y2
def g(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return ReturnValue(y0, y1, y2)
在Python中,前两者在管道方面可能非常相似——毕竟{y0, y1, y2}只是ReturnValue的内部__dict__中的项。
Python为小对象提供了一个额外的特性,__slots__属性。类可以表示为:
class ReturnValue(object):
__slots__ = ["y0", "y1", "y2"]
def __init__(self, y0, y1, y2):
self.y0 = y0
self.y1 = y1
self.y2 = y2
来自Python参考手册:
__slots__声明接受一个实例变量序列,并在每个实例中保留足够的空间来保存每个变量的值。由于没有为每个实例创建__dict__,因此节省了空间。
选项:使用数据类(Python 3.7+)
使用Python 3.7的新数据类,返回一个带有自动添加的特殊方法、类型和其他有用工具的类:
@dataclass
class Returnvalue:
y0: int
y1: float
y3: int
def total_cost(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return ReturnValue(y0, y1, y2)
选项:使用列表
另一个被我忽略的建议来自蜥蜴比尔:
def h(x):
result = [x + 1]
result.append(x * 3)
result.append(y0 ** y3)
return result
这是我最不喜欢的方法。我想我可能因为接触了Haskell而受到了影响,但是混合类型列表的想法总是让我感到不舒服。在这个特殊的例子中,列表是-非-混合类型的,但是可以想象它是混合类型的。
据我所知,以这种方式使用的列表实际上并没有获得任何关于元组的信息。Python中列表和元组之间唯一真正的区别是列表是可变的,而元组不是。
我个人倾向于继承函数式编程的约定:对相同类型的任意数量的元素使用列表,对预定类型的固定数量的元素使用元组。
问题
在冗长的序言之后,出现了一个不可避免的问题。你认为哪种方法最好?