小编Ren*_*der的帖子

Sublime Text 2是否具有只读模式?

这不是那些在操作系统级别设置了只读标志的文件,而是关于用户不打算修改的每个文件.我只是希望sublime文本忽略任何更改并阻止将任何内容保存到此类文件中.这种情况的一个示例是当用户正在阅读不应该被改变的源代码时.

"只是要非常小心,不要按任何按钮"无疑是一个很好的建议,但如果我"意外"(< - 空中引号)删除评论前面的octothorpe,或者在文件中添加新行对这些事情敏感(Linux中的一些配置文件),然后偶然遇到保存......

我在github上找到了这个插件,但它实际上是在切换文件权限(只读,写入) - 不是我想要的.

sublimetext2

13
推荐指数
1
解决办法
3263
查看次数

在代码重复和性能之间进行权衡

Python作为动态语言,提供了多种方法来实现相同的功能.这些选项的可读性,可维护性和性能可能不同.尽管我用Python编写的常用脚本具有可支配性,但我现在有一个我正在研究的项目(学术性的)必须是可读的,可维护的并且表现相当好.由于我以前没有在Python中进行任何严格的编码,包括任何类型的分析,我需要帮助来决定上面提到的三个因素之间的平衡.

这是我正在研究的科学包中的一个模块的代码片段.它是一个具有非常基本骨架结构的n-ary Tree类.这是用继承和子类编写的.

注意:在下面的代码中,树与节点是相同的.每棵树都是同一个Tree树的一个实例.

class Tree(object):

    def __init__(self, parent=None, value=None):
        self.parent = parent
        self.value = value
        self.children = set()
Run Code Online (Sandbox Code Playgroud)

下面的两个函数属于这个类(以及许多其他函数)

    def isexternal(self):
        """Return True if this is an external tree."""
        return not bool(self.children)

    def isleaf(self):
        """Return True if this is a leaf tree."""
        return not bool(self.children)
Run Code Online (Sandbox Code Playgroud)

这两个函数都完全相同 - 它们只是两个不同的名称.那么,为什么不将它改为:

    def isleaf(self):
        """Return True of this is a leaf tree."""
        return self.isexternal()
Run Code Online (Sandbox Code Playgroud)

我怀疑的是:

我已经读过Python中的函数调用相当昂贵(为每个调用创建新的堆栈),但我不知道如果一个函数依赖于另一个函数是好还是坏.它将如何影响可维护性.这在我的代码中多次发生,我从另一个方法调用一个方法以避免代码重复.这样做是不好的做法?

以下是同一类中此代码重复方案的另一个示例:

def isancestor(self, tree):
    """Return True if this tree is an ancestor of the specified tree."""
    return …
Run Code Online (Sandbox Code Playgroud)

python optimization performance code-duplication

12
推荐指数
2
解决办法
824
查看次数

Python运算符优先级 - 和vs大于

我的脚本中有一行代码,它们将这两个操作符链接在一起.从文档引用BOOLEAN AND的优先级低于COMPARISON GREATER THAN.我在这段代码中得到了意想不到的结果:

>>> def test(msg, value):
...     print(msg)
...     return value

>>> test("First", 10) and test("Second", 15) > test("Third", 5)
First
Second
Third
True
Run Code Online (Sandbox Code Playgroud)

我期待第二次或第三次测试在第一次测试之前发生,因为>操作员具有更高的优先级.我在这做错了什么?

https://docs.python.org/3/reference/expressions.html#operator-precedence

python operator-precedence

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

没有__init__.py,但仍被视为包裹?

A foobar package

  • foob​​ar的

    • __init__.py
    • foo.py
    • 酒吧

      • bar.py

Inside the __init__.py

from . import foo
from . import bar
Run Code Online (Sandbox Code Playgroud)

即使bar不是包或子包,它仍然作为模块导入(lolwut).我在print(type(bar))里面检查了导入类型__init__.py并打印出来<class 'module'>......就是这样.这里发生了什么?它是一个模块对象,所以我做print(dir(bar))了,输出是['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__'].现在,对我来说更令人困惑的是这方面的__path__变数.这不是一个只包装的东西吗?

这就是所谓的命名空间包吗?我想它不是,但我在该__init__.py文件中再尝试了一件事- 增加了一条线import bar.bar.它结束了ImportError.那么,总结一下我的问题,这个模块有用的是什么?为什么Python首先导入这个?

David Beazley在整个主题上有一个惊人的教程.我刚才看过整件事,但我想我应该再看一遍,重新回顾一切.

packages python-import python-3.4

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

为什么Python-3中的范围没有消耗殆尽?

如果我执行以下操作:

a = range(9)

for i in a:
    print(i)

# Must be exhausted by now
for i in a:
    print(i)

# It starts over!
Run Code Online (Sandbox Code Playgroud)

Python的生成器在提升StopIteration之后通常会停止循环.那么范围如何产生这种模式 - 它在每次迭代后重新开始.

python range python-3.x

4
推荐指数
1
解决办法
100
查看次数

删除文件(如果存在).如果没有,请创建它

标题说全部.

我的代码:

 try:
        os.remove("NumPyResults.txt")

 except IOError:

        with open("NumPyResults.txt", 'a') as results_file:
            outfile = csv.writer(results_file)
            outfile.writerow(.......)
Run Code Online (Sandbox Code Playgroud)

它附加的原因是因为它处于一个函数中并被多次调用.因此,每次运行程序时,我都想要一个新文件,删除旧文件并编写新文件.

但是,这不会创建新文件.我还在我运行的目录中创建了该文件,它也没有删除它.

我明白了

WindowsError: [Error 2] The system cannot find the file specified: 'NumPyResults.txt'
Run Code Online (Sandbox Code Playgroud)

python error-handling file delete-file

3
推荐指数
1
解决办法
4946
查看次数

两个字边界(\ b)隔离单个单词

我试图匹配一个数字后面出现的单词 - 在下面的句子中,它是单词"米".

塔高100 .

这是我尝试的模式不起作用:

\d+\s*(\b.+\b)

但是这个做了:

\d+\s*(\w+)

第一个不正确的模式与此匹配:

100 .

我不想要"高"这个词匹配.我期望以下行为:

\d+ match one or more occurrence of a digit
\s* match any or no spaces
( start new capturing group
\b find the word/non-word boundary
.+ match 1 or more of everything except new line
\b find the next word/non-word boundary
) stop capturing group

问题是我不知道关于正则表达式的问题,而且我非常喜欢菜鸟.我正在练习制造自己的问题并试图解决它们 - 这是其中之一.为什么比赛在第二次休息时没有停止(\b)


这是Python风格
这里是上述正则表达式的regex101测试链接.

python regex

2
推荐指数
1
解决办法
110
查看次数

参数和子类化

考虑一个矩形和一个正方形.如果我们将它们视为对象,很明显,正方形可以从矩形继承其大部分或全部属性,因为正方形是矩形的特殊情况.唯一的限制是正方形必须具有相似的边长.

看看这个非常基本的实现.

class Rectangle(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def get_area(self):
        return self.x * self.y


class Square(Rectangle):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.x != self.y:
            raise ValueError("x and y must be equal.")
Run Code Online (Sandbox Code Playgroud)

为简单起见,避免了类型检查.我使用args并且kwargs为了确保子类将是未来证明.但是,我不确定我是否正确行事.Rectangleclass' __init__可能会在将来添加更多参数.

问题是,如果x和y必须相等,为什么要首先要求它们?难道不应该只有一个吗?当前的继承方案有这个限制 - 用户被迫输入x和y.怎样才能解决这个问题.将x和y转换为关键字参数不是解决方案,因为不允许使用默认值(或None).

python inheritance arguments subclassing

0
推荐指数
1
解决办法
42
查看次数