这不是那些在操作系统级别设置了只读标志的文件,而是关于用户不打算修改的每个文件.我只是希望sublime文本忽略任何更改并阻止将任何内容保存到此类文件中.这种情况的一个示例是当用户正在阅读不应该被改变的源代码时.
"只是要非常小心,不要按任何按钮"无疑是一个很好的建议,但如果我"意外"(< - 空中引号)删除评论前面的octothorpe,或者在文件中添加新行对这些事情敏感(Linux中的一些配置文件),然后偶然遇到保存......
我在github上找到了这个插件,但它实际上是在切换文件权限(只读,写入) - 不是我想要的.
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) 我的脚本中有一行代码,它们将这两个操作符链接在一起.从文档引用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
A foobar package
foobar的
- __init__.py
- foo.py
酒吧
- bar.py
Inside the __init__.pyfrom . 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在整个主题上有一个惊人的教程.我刚才看过整件事,但我想我应该再看一遍,重新回顾一切.
如果我执行以下操作:
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之后通常会停止循环.那么范围如何产生这种模式 - 它在每次迭代后重新开始.
标题说全部.
我的代码:
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) 我试图匹配一个数字后面出现的单词 - 在下面的句子中,它是单词"米".
塔高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测试链接.
考虑一个矩形和一个正方形.如果我们将它们视为对象,很明显,正方形可以从矩形继承其大部分或全部属性,因为正方形是矩形的特殊情况.唯一的限制是正方形必须具有相似的边长.
看看这个非常基本的实现.
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 ×6
arguments ×1
delete-file ×1
file ×1
inheritance ×1
optimization ×1
packages ×1
performance ×1
python-3.4 ×1
python-3.x ×1
range ×1
regex ×1
subclassing ×1
sublimetext2 ×1