精华内容
下载资源
问答
  • 金蝶KIS标准版报表提示循环引用

    千次阅读 2016-08-29 10:00:32
    金蝶KIS迷你版、标准版,资产负债表最后一行求和,单元格显示循环引用解决方法:
        金蝶KIS迷你版、标准版,资产负债表最后一行求和,单元格显示循环引用解决方法:


        原因:计算公式有重复


        解决方案:检查合计列的公式代码是否被其他列的公式使用
    展开全文
  • 近日,有同学咨询Python对象的循环引用以及垃圾回收问题,结合前些日子遇到的循环调用和循环导入问题,在整理答案的时候,我忽然意识到,这几个问题居然和困惑我多年的“两面镜子”问题居然有相通之处:看起来都...

    小时候,常被一些可笑的问题困扰——尽管成年以后面临的疑惑更多,但似乎是因为已经适应了在迷茫中前行,对于未解的问题反倒是失去了那种急于想知道答案的迫切感。比如,站在两面相对的镜子中间,会看到无数个自己吗?对于少时的我,这的确是一个非常魔幻的问题,直到理解了光量子能量衰减,才算找到了答案。
    在这里插入图片描述
    近日,有同学咨询Python对象的循环引用以及垃圾回收问题,结合前些日子遇到的循环调用和循环导入问题,在整理答案的时候,我忽然意识到,这几个问题居然和困惑我多年的“两面镜子”问题居然有相通之处:看起来都有些魔幻,转身即是真实的世界!

    1. 走向毁灭的函数循环调用

    如果多个函数相互调用,构成闭环,就形成了函数的循环调用。下面的例子中,函数a在其函数体中调用了函数b,而函数b在其函数体中又调用了函数a,这就是典型的函数循环调用。

    >>> def a():
    		print('我是a')
    		b()
    	
    >>> def b():
    		print('我是b')
    		a()
    	
    >>> a()
    

    此种情况下,调用函数(无论是a函数还是b函数),会发生什么呢?

    >>> a()
    我是a
    我是b
    我是a
    我是b
    ...... # 此处省略了一千余行
    Traceback (most recent call last):
      File "<pyshell#64>", line 1, in <module>
        a()
      File "<pyshell#59>", line 3, in a
        b()
    ...... # 此处省略了两千余行
    RecursionError: maximum recursion depth exceeded while pickling an object
    

    很快你就会发现,运行出现了问题,系统连续抛出异常,大约滚动了几千行之后,终于结束了运行。最后的提示是:

    RecursionError: maximum recursion depth exceeded while pickling an object

    意思是说,发生了递归错误,在序列化(pickle)对象时超过了最大递归深度。

    原来,循环调用类似于递归调用,为了保护堆栈不会溢出,Python环境一般都会设置递归深度保护,一旦查过递归深度,就会抛出递归错误,然后再一层一层退出堆栈。这就是屏幕滚动几千条错误信息的原因。

    关于Python环境递归深度,可以通过sys模块查看和设置。

    >>> import sys
    >>> sys.getrecursionlimit()
    1000
    >>> sys.setrecursionlimit(500)
    >>> sys.getrecursionlimit()
    500
    

    2. 同生共死的对象循环引用

    函数的循环调用不难理解,而对象的循环引用就有点费解了。什么是对象的循环引用呢?当一个对象被创建时(比如实例化一个类),Python会为这个对象设置一个引用计数器。如果这个对象被引用,比如被关联到一个变量名,则该对象的引用计数器加1,如果关联关系取消,则该对象的引用计数器减1。当一个对象的引用计数器为1时(关于这一点,仅凭个人观察得出,未见权威说法),系统将自动回收该对象。这就是Python的垃圾回收机制。下面的代码,借助于sys模块,可以直观地看到一个列表对象的引用计数器的变化。

    >>> import sys
    >>> a = list('abc')
    >>> sys.getrefcount(a)
    2
    >>> b = a
    >>> sys.getrefcount(a)
    3
    >>> del b
    >>> sys.getrefcount(a)
    2
    

    当多个对象存在相互间的成员引用,一旦形成闭环的时候,就会发生所谓对象的循环引用。我们来看一个例子:a和b是类A的两个实例对象,del这两个对象的时候,将会调用对象的__del__方法,最后显示“运行结束”。

    class A:
        def __init__(self, name, somebody=None):
            self.name = name
            self.somebody = somebody
            print('%s: init'%self.name)
        def __del__(self):
            print('%s: del'%self.name)
    
    a = A('a')
    b = A('b')
    
    del a
    del b
    
    print('运行结束')
    

    运行结果正如我们所希望的那样。

    a: init
    b: init
    a: del
    b: del
    运行结束

    然而,当我们创建了实例a和b之后,如果将a.somebody指向b,将b.somebody指向a,那么就产生了实例间成员相互引用形成闭环的情况。

    class A:
        def __init__(self, name, somebody=None):
            self.name = name
            self.somebody = somebody
            print('%s: init'%self.name)
        def __del__(self):
            print('%s: del'%self.name)
    
    a = A('a')
    b = A('b')
    
    a.somebody = b
    b.sombody = a
    
    del a
    del b
    
    print('运行结束')
    

    运行这段代码,你会发现,del这两个对象的时候,对象的__del__方法并没有被立即执行,而是程序结束之后才被执行的。

    a: init
    b: init
    运行结束
    a: del
    b: del

    这意味着,在程序运行期间,应该被回收的内存并没有正确回收。这样的问题,属于内存泄漏,应该给予高度重视。通常,我们可以使用gc模块强制回收内存。

    import gc
    
    class A:
        def __init__(self, name, somebody=None):
            self.name = name
            self.somebody = somebody
            print('%s: init'%self.name)
        def __del__(self):
            print('%s: del'%self.name)
    
    a = A('a')
    b = A('b')
    
    a.somebody = b
    b.sombody = a
    
    del a
    del b
    
    gc.collect()
    
    print('运行结束')
    

    再看运行结果,一切正常了。

    a: init
    b: init
    a: del
    b: del
    运行结束

    3. 转圈推磨的模块循环导入

    相对而言,模块的循环导入的情况一般极少发生。如果发生,一定是模块的功能分割不合理造成的,通过调整模块的定义,可以很容地解决问题。下面用一个最精简的例子,来演示一下模块循环导入是如何产生的。

    名为a.py的脚本文件内容如下:

    import b
    
    MODULE_NAME = 'a'
    print(b.MODULE_NAME)
    

    名为b.py的脚本文件内容如下:

    import a
    
    MODULE_NAME = 'b'
    print(a.MODULE_NAME)
    

    两个脚本互相引用,并且各自使用了对方定义的常量MODULE_NAME。无论我们运行哪个脚本,都会因为模块的循环导入而无法正确执行。

    Traceback (most recent call last):
    File “a.py”, line 1, in
    import b
    File “D:\temp\csdn\b.py”, line 1, in
    import a
    File “D:\temp\csdn\a.py”, line 4, in
    print(b.MODULE_NAME)
    AttributeError: module ‘b’ has no attribute ‘MODULE_NAME’

    展开全文
  • excel教程中循环引用是什么呢?excel循环引用就是公式引用自己所在的单元格,则不论是直接引用还是间接...这时可取消excel循环引用,或是让 Excel 利用先前的迭代计算结果计算循环引用中涉及的每个单元格一次。  如下

           excel教程中循环引用是什么呢?excel循环引用就是公式引用自己所在的单元格,则不论是直接引用还是间接引用,都称为循环引用。对Excel感兴趣的朋友可加Excel学习交流群:284029260

      只要打开的工作簿中有一个循环引用,Excel将无法自动计算所有打开的工作簿。这时可取消excel循环引用,或是让 Excel 利用先前的迭代计算结果计算循环引用中涉及的每个单元格一次。

      如下图A1单元格的公式:=A1+A2,显然A1单元格为循环引用。同时在下面的excel状态栏会显示excel循环引用的单元格地址。

    excel循环引用

      有这样一种情况:工作表中没有循环引用,Excel却总提示循环引用。原因是当前工作表引用了其他工作表的单元格,而其他工作表存在循环引用,就会提示excel循环引用。

      这时候,可以检查每张工作表的状态栏,有循环引用的工作表在状态栏会出现提示:如“循环引用:A1”。

      excel循环引用的正确方法是:先启用迭代计算,才能引用自身,否则就会引起循环引用错误。 但启用迭代计算,很容易引起计算的错误,因为每保存一次,就会自动迭代一次。所以必须小心谨慎为好。若能不用迭代计算,最好还是不用。

    展开全文
  • MVC中使用Json的时候:首先考虑运行HTTP中的Get请求和导航属性造成的循环引用(而循环引用使用匿名内部类)。

    今天在做MVC项目的时候,由于需要将对象转换为Json值,使用的代码如下:


           public ActionResult QuaryOrders()
            {
                var dataOrder = db.OrderDetails.Include(n => n.Product);         
                return Json(dataOrder, JsonRequestBehavior.AllowGet); 
            }

    但EF提示“序列化类型为XXX的对象时检测到循环引用”,截图如下:


    产生这种的原因是Entity Framework两个模型之间进行了相互引用,就是说这两个在数据中的表有主外键关系的

    解决方法有两种:

    方法一:使用匿名类来传递对象:

           public ActionResult QuaryOrders()
            {
                var dataOrder = db.OrderDetails.Include(n => n.Product).Select(n => new { Id=n.Id ,OrderId = n.OrderId});         
                return Json(dataOrder, JsonRequestBehavior.AllowGet); 
            }


    方法二:使用命名空间Newtonsoft.Json(该程序集可以使用Nuget来下载)中的方法来序列化Json对象,转换后对数据会包含转义字符“\”:

           public ActionResult QuaryOrders()
            {
                JsonSerializerSettings setting = new JsonSerializerSettings()
                {
                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                    Formatting = Formatting.None
                };
                var ret = JsonConvert.SerializeObject(dataOrder, setting);
                return Json(ret, JsonRequestBehavior.AllowGet);
            }

    补充:MVC中使用JSON的时候(考虑运行Get请求方式和导航属性造成的循环引用),在使用Get请求的使用要使用Json(ret, JsonRequestBehavior.AllowGet)方法,而由于导航属性造成的循环引用应该首先考虑使用匿名内部类来解决,也可以使用Json序列化工具Newtonsoft.Json中决序列化的循环引用问题,本文着重描述使用匿名内部类解决,其他方法可以上网搜索,谢谢!

    展开全文
  • OC和Swift中循环引用的问题

    千次阅读 2015-12-20 15:33:22
    总结一下自己对OC中和Swift中循环引用的认识。 一.OC中的循环引用分为类中的循环引用和对象之间的循环引用。 1.类的循环引用 造成原因: 在两个类的.h文件中使用了#import "" 而造成两个类之间的循环引用 解决办法:在...
  • 目前总结了一下,在iOS平台容易引起循环引用的几个场景: 一、parent-child模式 二、block(编译器会提示警告) 三、NSTimer
  • 【excel】开启了循环引用怎么关闭

    千次阅读 2019-08-26 12:25:36
    在工作时遇到的Excel表格整理,从不同的Excel列统计数据 粘到一个表中时,会发生【循环引用】,Excel保存关闭后再打开,出现提示信息:循环引用。现象:关闭一个Excel还有另一个Excel。 解决:2步 1、要取消...
  • vue 解决循环引用组件报错

    千次阅读 2018-02-05 15:38:47
    做项目时遇到使用循环组件,因为模式一样,只有数据不一样。但是按照普通的组件调用格式来做时报错,错误信息为Unknown custom element: - did you register the component correctly? For recursive components, ...
  • while和do-while的区别: while是先判断后执行 do-while是先执行后判断,至少循环一次循环体 语法 ①,初始化变量 do{ ②循环语句;...}while(循环条件) ...正确时结束循环提示登录成功 输入错误三次,退出...
  • Python 的type hint和循环引用

    千次阅读 2018-04-27 13:44:32
    # Python 的type hint和循环引用这两天拿 Python 在写电梯应用的多线程程序,碰到了这样的问题,我用 flask-socketio + HTML 做用户界面,这里碰到一个循环引用的问题:1. *main.py*```python...from LiftUtils....
  • 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用 解释报错原因  根据我们不同的需要,我们会在不同的时候选择序列化和反序列化,从而得到我们想要的对象或者字符串 返回json数据的时候...
  • [iOS]ARC下循环引用的问题

    千次阅读 2013-11-29 16:27:13
    [iOS]ARC下循环引用的问题 2013-8-30 最初 最近在开发应用时碰到使用ASIHttpRequest后在某些机器上发不出请求的问题,项目开启了ARC,代码是这样写的: @implement MainController...
  • 承接上文,已经简明阐述了使用Struct代替Class的好处,使用Class会使我们的程序出现“意外的共享”以及“循环引用”之类的危险,传统面向对象开发中对Class的依赖主要来自于我们对“继承”的依赖。Swift2.0引入协议...
  • ios避免循环引用

    千次阅读 2014-04-09 09:16:13
    ARC引入之后,内存管理变得很简单,但是即使不需要担心何时retain,release,依然有些规则去避免内存问题,本篇文章讨论关于循环引用的问题。 什么是循环强引用?比如说有两个对象,对象A 和对象 B,如果A强...
  • 正确使用Block避免循环引用(一)

    千次阅读 2016-10-09 23:22:49
    正确使用Block避免循环引用
  • spring循环引用的问题

    万次阅读 2012-02-13 18:32:24
      ...很久没写技术贴了,这两天被spring的循环引用搞死了,发文记之。 前几天,项目结构做了调整,把我所在的项目代码嵌入另一个项目,然后就杯具了,症状如下: Bean with name ‘xxxServi
  • python中的循环引用问题

    千次阅读 2019-11-15 01:31:01
    解决办法就是分层设计:比如flask中的蓝图概念, 将二者相互引用的操作,单分一层
  • VC++工程头文件重复和循环引用

    千次阅读 2013-11-04 09:21:39
    复杂工程中头文件众多,很容易发生包含顺序、重复引用以及循环引用导致的编译链接错误!最近整理工程中文件引用时遇到不少这方面的问题!一般来说,包含顺序问题会导致某些类型、函数等无定义,只要对工程有功能、...
  • block使用时的注意循环引用
  • iOS 面试题~避免循环引用~解决方法

    千次阅读 2017-12-22 09:55:00
     循环引用:指的是多个对象相互引用时,使得引用形成一个环形,导致外部无法真正是否掉这块环形内存。其实有点类似死锁。  其实循环引用就是说我们的强引用形成了闭环,还会有很多自己写的代码中会出现,...
  • Vue CLI组件循环引用踩坑(已解决),报错提示:"did you register the component correctly? For recursive components" 记录一个Vue组件使用小小的坑。 复制代码 背景介绍: 本人打算按照官方文档思路写一个用于...
  • ARC下循环引用的问题

    千次阅读 2014-07-17 17:51:08
    XCode提示说isLoading = NO和loadingView.hidden = NO两行都可能导致循环引用,这下难办了,对于loadingView,是可以跟self一样再声明一个__weak引用给block用,但像isLoading这样需要赋值的没法这样做,而且使用的...
  • 说到循环引用问题,最最最常遇到的,不是在项目中,而是在面试中。如果面试官问你开发中是否遇到过retain cycle,你如果说没遇到过,估计已经很难跟面试官继续友好的沟通下去了。 但是这个问题怎么回答呢,网络上...
  • 彻底分析block中的循环引用

    千次阅读 2015-05-10 19:43:48
    //系统有时候会提示你可能导致循环引用,但会有漏掉的情况,比如strong变量定义成全局变量的时候。 __weak AnimaViewController *weakSelfLocal = self;//弱引用,引用计数不会增加。 self.block = ^ (int num){ ...
  • 关于GC的循环引用问题(stupid)

    千次阅读 2005-11-04 10:56:00
    但是,从设计的框架上来看,在有循环引用存在的时候,这个GC工具会在垃圾收集的时候陷入死循环。 网上有段话,大概是这样来诠释循环引用的: 如果建立了一个类“Class人”,他有个属性 “手”。 private Class手 ...
  • 何谓循环引用?  举个例子来说吧,一个男孩类Boy中可以访问他的女朋友是类Girl,同样,类Girl也可以访问她的男朋友Boy类。而且一个男朋友和女朋友具有对应的关系(一对一);还有一种情况就是一对多的情况,比如...
  • 文章目录第一步:简单实现第二步:拷贝数组第三步:循环引用1、使用哈希表2、使用数组第四步:拷贝 Symbol 第一步:简单实现 其实深拷贝可以拆分成 2 步,浅拷贝 + 递归,浅拷贝时判断属性值是否是对象,如果是对象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 127,188
精华内容 50,875
关键字:

如何取消循环引用提示