我想为我的make文件编写一个清理例程,除了我文件夹中的必要源文件之外,它会删除所有内容.例如,我的文件夹包含具有以下扩展名的文件:.f .f90 .F90 .F03 .o .h .out .dat .txt .hdf .gif.
我知道我可以用以下方法完成此任务
find . -name \( '*.o' '*.out' '*.dat' '*.txt' '*.hdf' '*.gif' \) -delete
Run Code Online (Sandbox Code Playgroud)
使用否定,我可以这样做:
find . -not -name '*.f*' -not -name '*.F*' -not -name '*.h' -delete
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时:
find . -not -name \( '*.f*' '*.F*' '*.h' \)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
find: paths must exceed expression: [first expression in the above list]
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,我会得到:
find: paths must exceed expression: *.f*
)
你能解释为什么会这样,以及如何做我想做的事情?每次我想在列表中添加文件扩展名时,我都讨厌编写-not -name.另外,我想找出为什么这会给我一个错误,这样我就可以更好地学习Linux.
谢谢!
c1 和 c2 的构造函数中的默认值应该为 b 和 b 生成新的实例变量。相反,看起来 c1.a 和 c2.a 正在引用相同的变量。@dataclass 是否创建了一个类变量?这似乎与预期的功能不一致,我在文档中找不到关于类变量的任何信息。所以,我认为这是一个错误。有人可以向我解释如何修复它吗?我应该将其报告为 python 跟踪器上的错误吗?
我知道这个问题必须与 python 按引用传递对象和按值传递内置类型的方式有关,因为 b 属性(它只是一个浮点数)显示了预期/期望的行为,而 a 属性(这是一个用户定义的对象)只是一个引用。
谢谢!
从数据类导入数据类
"""输入"""
@dataclass
class VS:
v: float # value
s: float # scale factor
def scaled_value(self):
return self.v*self.s
@dataclass
class Container:
a: VS = VS(1, 1)
b: float = 1
c1 = Container()
c2 = Container()
print(c1)
print(c2)
c1.a.v = -999
c1.b = -999
print(c1)
print(c2)
Run Code Online (Sandbox Code Playgroud)
"""输出"""
Container(a=VS(v=1, s=1), b=1)
Container(a=VS(v=1, s=1), b=1)
Container(a=VS(v=-999, s=1), b=-999)
Container(a=VS(v=-999, …Run Code Online (Sandbox Code Playgroud)