最赞回答 / Awful_Leo
按照a, b = b, a+b的写法,一开始a = 0, b = 1,则等号右边为1, 1则a, b = 1, 1如果按照a = b, b = a+b的写法,一开始对于 a = b这个式子来说b = 1,将此值赋给a,此时有 a = 1, b = 1然后对于b = a+b这个式子来说a + b = 2,将此值赋给b,此时有 a = 1, b = 2两个结果是不一样的,原因在于,按照第二个写法,a的值在第二个式子中使用之前已经重新赋过值;而在第一个写法中,等号右边的a和b先取初始值,然后再赋给左边。
2018-11-10
最新回答 / 慕运维5384406
它意思是用了装饰器的函数,因为用了装饰器则实际上返回的函数名等不对,如果有依赖这些函数的代码就会失效。然后参数那一块和这块不能混了吧。但是参数那块我有点不太懂,老师最后教的说把*args,**kw改成x是什么意思,改成x就能接收到多个参数(如果传进来多个参数)?可是代码直接写*args和**kw 没报错呀
2018-11-09
最赞回答 / KingToAce
因为Python提供的基本库builtinls.py中的object类定义好的函数,所有的类默认继承object类,有兴趣可以研究一下Python所提供的基本库
2018-11-08
最赞回答 / 慕粉1149065707
你这两种代码,咋一看没区别,其实有区别的啊,本质上的区别就是:左边的是最后调用的时候,是调用fn(x),fn(x)函数封装了变化,实际上print('call')与原来的f1函数是作为一个整体封装咋fn(x)里面,print是在f1函数上的拓展。而右边,不能看成是拓展,你只能看成是在原f2函数的逻辑之前,在加了一个print('call')打印的逻辑。如果还是有点懵逼,我只能举个粒子了:你试试左边再多调用几次print(f1(6))print(f1(7))这当然是正常的,但是右边很容易出问题,如果你是这样...
2018-11-03
已采纳回答 / 慕UI8134040
两端代码其实是一样的。因为你在定义第二个函数def f(j=i)的时候引用了另外一个变量j,此时数组中的引用变量指向的也不是i,而是j所指向的内容。但是这里又因为外面套了一个for循环,所以,可以看做循环一次,调用一个变量j。如果你理解堆和栈,那就更容易理解了。总之,你可以理解成你的这个代码是答案的简写版。
2018-11-01