python __setitem__ 和 __setattr__关于无限递归算法实现步骤

python对递归太不友好了吧_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:193,709贴子:
python对递归太不友好了吧收藏
满了,看来没做尾递归优化,不过C也没有,但也有65090啊而试了下perl,好像是无限的……
51CTO学院12年行业品牌,1600万用户选择,中国专业IT技能学习平台.python资深大牛授课,0基础从入门到精通,python报名与培训中心.
我记得Lua是有尾调用的,但是比须写的很严格
python又没叫你写尾递归
我的python比你的好,跑到981了,哈哈
To iterate is human, to recurse divine
不是python不够友好,是LZ太不够友好了
3.2跑到982
我跑到976。。提示Traceback (most recent call last): File "test", line 6, in &module&
f(1)RuntimeError: maximum recursion depth exceeded while calling a Python object
用了这个sys.setrecursionlimit(1000000)然后在打印了32709发生了segmentation fault。。。
您这没写终止递归的代码啊
python,Python业内名师授课,根据企业要求,打造全新精华实用Python培训体系,学成薪资翻一番.快乐编程,我选Python.详情点击咨询!
自带的http服务只是用来开发用的,经不起折腾
登录百度帐号最近在写学生选课系统,我看同学的是把学生写成一个类,我觉得这样比较好,就想把自己的也写成一个类。没想到一开始就出了问题。看下边:
public class Student
string 学号;
string 学号
get{return 学号}
set{学号=value}
}编译时就出问题了,说 “学号”已定义,然后我就把学号改成 //string 学号;
结果编译时通过了,运行时就遇到一个未处理的异常,说什么“确保没有无限递归或无限循环”,苦思冥想不知为什么,在网上查了好多资料,都没有跟这个相符的。第二天我想到网上看的的都是用英文写的,而且其中写获取或返回方法名称时第一个字母都是大写,如下:public class Student
string Sno
get{return sno}
set{sno=value}
}我就想是不是因为我写的是中文的原因,然后就把变量名和方法名改为英文,并且方法名首字母大写,如上。编译、运行时竟然成功通过,实在让人万分欣喜。欣喜后我就想难道不可以用中文吗?感觉不是这回事。就有把变量名和方法名改为中文,当然遇到与第一次同样的错误,于是,我就这么改了下:public class Student
string 学号;
string S学号
get{return 学号}
set{学号=value}
}结果竟然也编译、运行时成功通过。我就想是不是方法名字可以随便写,不是说方法名非得是变量名把首字母大写得来的,于是就把方法名随便改了一下,编译、运行成功通过。这下终于知道为什么错了,原来方法名和变量名不能一样。
我在VS里边看到的方法名显示为属性图标,有点纳闷——我觉得变量才是属性。想起在网上看的一篇文章中说到,变量在C#中叫做“域”,而我所说的方法叫做“属性”,感觉一下豁然开朗,感觉应该是它们共同构成一个属性,一个定义了域,一个设定域的访问方法。
最终结论:域名和方法名必须不同,域的值由方法内部访问器set和get来设定。
错误往往是service的相互引用之类的。 好好排查
@JsonIgnore @JsonFilter @JsonBackReference @JsonManagedReference @JsonIgnoreProperties
jackson中的@Jso...
public int sumByMax(int max){
if(max&=2){
return max+sumByMax(max-1);
关于__getattribute__和__getattr__的区别,请参照:http://www.cnblogs.com/bettermanlu/archive//2087642....
因为前段时间用到了jsTree这个插件,其实个人是觉得ztree相对而言更好用一些,领导拍板没办法,就研究看了一下,因为我们这边有个很深层次的树结构,因此后台便需要递归将其需要的json数据传到前台,...
Hibernate实体定义的时候对类Photo和OtherPhoto设置了一对多和多对一的关联,Photo里有OtherPhoto集合。OtherPhoto里有Photo对象。这样在得到Photo的l...
例如计算a-99之间的n个奇数或偶数:function add($a, $n=false){ //默认不限制次数
if($n !== false && $n == 0) {
controller 返回 geometry 字段报错
Infinite recursion (StackOverflowError)
(through reference chain: c...
Hibernate 这种ORM框架 通过实体类间相互关联来表示数据库表数据的外键。在使用Jackson序列化时就会出现无限循环或递归的问题导致序列化报错。现在百度一搜就会出现很多几乎一样的解决方法,使...
今天在编译的时候强制关闭了IDE,引发的问题就是编译输出文件产生了一个恐怖递归的文件夹。使用普通的删除根本删不掉。360强力删除、粉碎删除都无法删除。
在网上学习了下其他大神的解决方法,很有效果特此转...
没有更多推荐了,在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
hi, 最近看了关于Python协程的相关文章,说协程可以无限递归,于是想写一个协程示例练练,于是:
import time
def ping():
print 'ping 0'
pi,po = yield s
print 'ping ' + str(count)
count += 1
time.sleep(1)
po.send([po, pi])
except StopIteration:
def pong():
print 'pong 0'
po, pi = yield s
print 'pong ' + str(count)
count += 1
time.sleep(1)
pi.send([pi,po])
except StopIteration:
s = ping()
r = pong()
s.send([s,r])
运行结果是:
Traceback (most recent call last):
File "D:\test\coroutine.py", line 34, in &module&
s.send([s,r])
File "D:\test\coroutine.py", line 12, in ping
po.send([po, pi])
File "D:\test\coroutine.py", line 25, in pong
pi.send([pi,po])
ValueError: generator already executing
那篇文章使用了,我想实现一个原始的方法。但是出错,不知道要实现无限递归的话,应该怎么写嘞?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你需要的是用一个 run 函数管理协程。在 ping 和 pong 函数内,yield 返回 run。在 run 函数内,用 next() 对协程进行调度。
import time
def ping():
print 'ping 0'
print 'ping ' + str(count)
count += 1
time.sleep(1)
def pong():
print 'pong 0'
print 'pong ' + str(count)
count += 1
time.sleep(1)
def run(co):
co = co.next() # 这行实现 ping 和 pong 交替运行
pi = ping()
po = pong()
运行结果:
ping 0pong 0ping 1pong 1ping 2pong 2ping 3pong 3ping 4pong 4.........
========================================================带消息传递版:
import time
def ping():
print 'ping 0'
msg = yield (po, 'msg from ping')
print 'ping get', msg
print 'ping ' + str(count)
count += 1
time.sleep(1)
def pong():
print 'pong 0'
msg = yield (pi, 'msg from pong')
print 'pong get', msg
print 'pong ' + str(count)
count += 1
time.sleep(1)
def run(cur, msg='msg from run'):
cur, msg = cur.send(msg)
pi = ping()
po = pong()
运行结果:
ping 0pong 0ping get msg from runping 1pong get msg from pingpong 1ping get msg from pongping 2pong get msg from pingpong 2ping get msg from pongping 3pong get msg from pingpong 3ping get msg from pongping 4..............
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你写的确实是有问题,不过最主要的是,Stackless是一个修改版的Python,它的coroutine和标准CPython里的貌似不太一样,如果你想要在CPython里面实现类似的功能,可能需要基于greenlet来做。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
应该是把generator自身传递造成了问题,send自己导致的
要是pi po是全局变量应该不会有问题
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
生成器的用法明显错误,s 没有被 yield 挂起 , 你再去 send/next 当然会报这个错误
不知道你具体是要实现什么, 如果是要 “ping pong” 交替打印, 用一个generator 就行了
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。关于__getattribute__和__getattr__的区别,请参照:
使用object作为基类,若想调用self.key则替换为object.__getattribute__(self,key)
具体请参考:
Python __getattribute__ vs __getattr__ 浅谈
相信大家看到这个标题的时候也会立马在脑海里面过一遍,觉得大多数时候我们并不太需要关注getattribute和getattr的一些细节(至少我自己吧:)),
一般情况下消费我们自定义的类的时候,我们...
Python中内建属性__getattribute__的用法总结
首先理解__getattribute__的用法,先看代码:
class Tree(object):
def __init__(self,name):
self.name ...
python中__getAttribute__的用法
__getattribute__是访问属性的方法,我们可以通过方法重写来扩展方法的功能。
对于python来说,属性或者函数都可以被理解成一个属性,且可以通过__getattribute__获取。
...
Python语言学习讲解十七:python之__gettattr__、__getattribute__和__setattr__详解
http://blog.csdn.net/windgs_yf/article/details/
&&& print(testobj.__dict__)
{'__methods__'...
python __getattribute__ 的优先级问题
The way__getattribute__() works needs to be covered, as it was implemented to behave in a very speci...
点击打开链接
__get__,__getattr__和__getattribute都是访问属性的方法,但不太相同。
object.__getattr__(self, name)
当一般位...
__get__,__getattr__和__getattribute__都是访问属性的方法,但不太相同。
object.__getattr__(self, name)
当一般位置找不到attr...
其中,__getattribute__是无条件被调用.
对任何对象的属性访问时,都会隐式的调用__getattribute__方法,比如调用t.__dict__,其实执行了t.__getattribu...
class C(object):
def fun(self):
print 'this fun'
def __getattribut...
python之四种方式读取文档
第一种:读取纯文本
# coding=utf-8
@author: jiajiknag
程序功能: 读取txt文件
没有更多推荐了,在python里递归最多达到多少次?因为在跑的时候,次数有时多有时少,以前没有想过这个问题。那就自己动手在验证验证,
代码如下:
recursion(n):
recursion(n
__name__ ==
"__main__":
recursion(1000)
当在我自己的机器运行以上代码时,发现最多能打印到998,然后就会抛出 “RuntimeError: maximum recursion depth exceeded” 的错误了。 嘿,还真有限制。但转念一想,python不会这么弱吧。经过查找,发现这是python专门设置的一种机制用来防止无限递归造成Python溢出崩溃,
最大递归次数是可以重新调整的。 (http://docs.python.org/2/library/sys.html#sys.setrecursionlimit),修改代码如下:
sys.setrecursionlimit(1500)
recursion(n):
recursion(n
__name__ ==
"__main__":
recursion(1200)
再次运行,顺利通过!!!
测试python最大递归层次
写了个程序,测试了一下python的最大递归层次,d
python 最大递归次数 RuntimeError: maximum recursion depth exceeded
帮别人看代码,偶然遇到这个问题,原来python解释器有一个默认的最大迭代次数是999。举个例子:def recursion(n):
Python 阶乘的实现和递归的最大深度
阶乘两种实现方法#采用函数递归的方式
def factorial_v1(n):
if n == 0:
return n *...
Python学习笔记之递归
今天在做python练手,使用python设计快速排序算法之时,当列表规模变大的时候非常容易出现异常
RuntimeError: maximum recursion depth exceeded
...
调整python默认递归深度
python默认的递归深度是很有限的,大概是900多的样子,当递归深度超过这个值的时候,就会引发这样的一个异常。
解决的方式是手工设置递归调用深度,方式为
import sys
RuntimeError: maximum recursion depth exceeded while calling a Python object
大意是调用 Python 对象时超出最...
1、为什么学习Python?2、通过什么途径学习的Python?3、Python和Java、PHP、C、C#、C++等其他语言的对比?4、简述解释型和编译型编程语言?5、Python解释器种类以及特点...
需求 : 对于列表中的元素,求最大值。你可能会想到或者对列表进行迭代,max变量始终记录最大的值,如果迭代过程中有比该最大值还大的,我们就更新我们的max值以上方法是使用循环,今天我们可以使用递归来进...
作者:武沛齐
出处:https://www.cnblogs.com/wupeiqi/p/9078770.html本文版权归作者和博客园共有各位大佬暂时先来315道题尝尝吧,后面有时间再继续补充。有...
没有更多推荐了,

我要回帖

更多关于 python递归函数 的文章

 

随机推荐