小编Ste*_*ini的帖子

如何正确组织包/模块依赖树?

早上好,

我目前正在编写一个python库.目前,模块和类以无组织的方式部署,没有合理的设计.当我接近更正式的版本时,我想重新组织类和模块,以便他们有更好的整体设计.我绘制了一个导入依赖关系图,我计划按层级聚合类.此外,我正在考虑对类进行一些修改,以减少这些依赖性.

您对可能复杂且正在制作的python库进行良好整体设计的策略是什么?你有什么有趣的建议吗?

谢谢

更新:

我确实在寻找一个经验法则.例如,假设发生这种情况(为清楚起见,删除了init .py)

foo/bar/a.py
foo/bar/b.py
foo/hello/c.py
foo/hello/d.py
Run Code Online (Sandbox Code Playgroud)

现在,如果您碰巧有d.py导入bar.b和a.py导入hello.c,我会认为这是一个糟糕的设置.另一个案例是

foo/bar/a.py
foo/bar/baz/b.py
foo/bar/baz/c.py
Run Code Online (Sandbox Code Playgroud)

假设a.py和b.py都导入c.你有三个解决方案:1)b导入c,导入baz.c 2)你在foo/bar中移动c.a.py导入c,b.py导入.c 3)你将c移动到其他地方(比如foo/cpackage/c.py)然后a和b导入cpackage.c

我倾向于更喜欢3),但如果c.py作为独立模块没有意义,例如因为你想将它保持为"私有"进入条形包,我会优先选择1).

还有许多其他类似的案例.我的经验法则是尽量减少依赖关系和交叉的数量,以防止高度分支,高度交织的设置,但我可能是错的.

python

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

mysql警告

我有下表:

 CREATE TABLE `events` (
  `evt_id` int(11) NOT NULL AUTO_INCREMENT,
  `evt_name` varchar(50) NOT NULL,
  `evt_description` varchar(100) DEFAULT NULL,
  `evt_startdate` date NOT NULL,
  `evt_enddate` date DEFAULT NULL,
  `evt_starttime` time DEFAULT NULL,
  `evt_endtime` time DEFAULT NULL,
  `evt_amtpersons` int(11) DEFAULT NULL,
  `sts_id` int(11) NOT NULL,
  `adr_id` int(11) DEFAULT NULL,
  `evt_amtPersonsSubs` int(11) DEFAULT NULL,
  `evt_photo` varchar(50) DEFAULT NULL,
  `sys-mut-dt` timestamp NULL DEFAULT NULL,
  `sys-mut-user` varchar(20) DEFAULT NULL,
  `sys-mut-id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`evt_id`),
  KEY `sts_id` (`sts_id`),
  KEY `adr_id` (`adr_id`),
  CONSTRAINT `sts_id` …
Run Code Online (Sandbox Code Playgroud)

mysql sql

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

如何检查是否已在Django管理员中修改了FileField?

我正在尝试使用不应修改的文件来创建模型.但该文件的评论可以.

这是我做的,但我们无法修改评论.如何测试是否已发送新文件(使用浏览按钮),仅在此情况下,创建模型的新实例?如果没有上传新文件,请更新评论.

admin.py

class CGUAdminForm(forms.ModelForm):
    class Meta:
        model = ConditionsUtilisation

    def clean_file(self):
        if self.instance and self.instance.pk is not None:
            raise forms.ValidationError(_(u'You cannot modify the file. Thank you to create a new instance.'))
        # do something that validates your data
        return self.cleaned_data["file"]

class CGUAdmin(admin.ModelAdmin):
    form = CGUAdminForm

admin.site.register(ConditionsUtilisation, CGUAdmin)
Run Code Online (Sandbox Code Playgroud)

models.py

class ConditionsUtilisation(models.Model):
    date = models.DateField(_(u'Date d\'upload'), editable=False, auto_now_add=True)
    comment = models.TextField(_(u'Commentaire de modification'))
    file = models.FileField(_(u'CGU'), upload_to='subscription/cgu/', storage=CGUFileSystemStorage())
Run Code Online (Sandbox Code Playgroud)

python django django-forms django-admin django-file-upload

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

指针作为虚拟参数

我对以下程序有些困惑

module test
   implicit none

   type TestType
      integer :: i
   end type

contains
   subroutine foo(test)
      type (TestType), intent(out) :: test
      test%i = 5 
   end subroutine

   subroutine bar(test)
      type (TestType), intent(out) :: test
      test%i = 6 
   end subroutine

end module

program hello
   use test
   type(TestType) :: t

   call foo(t)
   print *, t%i 
   call bar(t)
   print *, t%i 
end program hello
Run Code Online (Sandbox Code Playgroud)

及其衍生物。稍后再谈。正如我们所知,Fortran语言传递程序参数作为一个传递引用,这意味着实体出现在伪参数test两者foobar被许可的堆栈上相同的内存空间program hello。到现在为止还挺好。

假设我在program hello中定义type(TestType) :: t为一个指针,并分配它。

program hello
   use …
Run Code Online (Sandbox Code Playgroud)

pointers fortran90

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

__coerce__与__ihook__的区别?

在python中,你有__coerce____ihook__.根据PEP 203(增强的分配),它们被调用,按此顺序执行对象的就地操作,__coerce__调用first和__ihook__next.我不知道这些方法是否专门用于增强赋值,但我想知道两者之间的实际区别.

python

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

函数调用的顺序.它是编译器还是情况依赖?

我注意到以下事实:功能评估的顺序,例如总和,在标准中未指定,因此可以以任何顺序执行.

这引出了一个问题:它依赖于编译器,依赖于优化,甚至可能依赖于执行(我怀疑它可能涉及代码的重新调整,但在今天的多核环境中,我猜一些编译器可能会看到这种缺乏的优化机会规范,通过并行隐式执行两个调用)?

编辑:我想澄清一下.标准中未指定顺序的事实并不意味着它没有为特定编译器指定(我可以选择在文档中指定它).未指定的行为可能使您不可移植,但编译器可能会根据给定规则一致地运行.我有兴趣知道,纯粹是出于学术上的好奇,如果这个规范实际上是由编译器(例如在手册中)做出的,如果是的话,如果这个选择是一致的,或者可能被编译器选项或其他因素改变.例如,拿gcc.它是如何表现的?它一致吗?

c c++

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

是什么导致这个琐碎的fortran代码的运行时差异?

我在这个琐碎的节目中发现了一个非常奇怪的效果

module Moo 
contains
   subroutine main()
      integer :: res 
      real :: start, finish
      integer :: i

      call cpu_time(start)

      do i = 1, 1000000000
         call Squared(5, res) 
      enddo
      call cpu_time(finish)

      print '("Time = ",f6.3," seconds.")',finish-start
   end subroutine

   subroutine Squared(v, res)
      integer, intent(in) :: v
      integer, intent(out) :: res 

      res = v*v 
   end subroutine 

!   subroutine main2()
!      integer :: res
!      real :: start, finish
!      integer :: i
!
!      call cpu_time(start)
!      
!      do i = 1, 1000000000
! …
Run Code Online (Sandbox Code Playgroud)

performance fortran

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

在Linux中访问另一个进程虚拟内存(调试)

gdb如何在Linux上访问另一个进程虚拟内存?这一切都是通过/ proc完成的吗?

linux gdb

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

如何在 packageVersion 之后以字符串形式获取完整版本?

 > packageVersion("stats")
 [1] ‘3.5.3’
Run Code Online (Sandbox Code Playgroud)

返回的实体不是字符串。它是一个类型为 package_version 的 S3 类

 > class(packageVersion("stats"))
 [1] "package_version" "numeric_version"
Run Code Online (Sandbox Code Playgroud)

这个实体没有属性,没有名字,什么都没有。

> attributes(packageVersion("stats"))
$class
[1] "package_version" "numeric_version"

> names(packageVersion("stats"))
NULL
Run Code Online (Sandbox Code Playgroud)

但不知何故这有效

> packageVersion("stats")$major
[1] 3
Run Code Online (Sandbox Code Playgroud)

还有次要和补丁。问题是,如何以字符串形式获取完整版本?推论问题,为什么当我询问名称时,major、minor 和 patch 不显示,以及如何查看该实体支持的完整名称列表?

r

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

在 R 中设置 .subset2 的等效项?

在 R 中,我可以使用.subset2充当调度[[$不充当调度。

> a <- new.env()
> a$foo  <- 3
> .subset2(a, "foo")
[1] 3
Run Code Online (Sandbox Code Playgroud)

但是,我似乎找不到不分派的设置操作的等效项:

> .subset2(a, "foo") <- 5
Run Code Online (Sandbox Code Playgroud)

.subset2(a, "foo") <- 5 中的错误:找不到函数“.subset2<-”

如何在不使用[[<-or$<-运算符隐式分派的情况下设置某些内容?

r subset r6

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