最赞回答 / 慕粉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
已采纳回答 / coolandcold
通俗地讲:比如a=8; 意为变量a指向整型8对于某个函数来说,比如g(),那么函数的名字g也就是变量g表示指向了g()这个函数,和a指向8一个道理;最外层函数f返回变量g,由于g表示指向g(),所以也相当于返回了函数g()本身
2018-10-25
已采纳回答 / wow蜗牛
所谓装饰器,你可以理解为:在保持原函数factorial(n)内部程序不变的基础上,给他增加一行代码 print ('call '+ f.__name__ + '()...'),得到一个新函数,而现在我们又把这个新函数也命名为factorial(n)。于是我们可以看作是factorial()的功能增强了(原函数只能计算阶乘,新函数不仅可以计算阶乘还能打印出函数名称),也就是可以看成是原函数factorial(n)被装饰了一下,加了一行输出代码,所以叫做装饰器。大家在学这个装饰器的时可以先忽略掉@Log这个...
2018-10-24
已采纳回答 / JefferyZ
如果子类和父类不在同一个文件里面,你可以把父类封装成模块,然后引入子类中继承。不存在无法继承的问题。甚至在不同的包里面也可以继承,只要你的文件路径对。
2018-10-14
已采纳回答 / 小肥鱼2020
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。add是函数名,def是函数的定义语句add(25, 9, math.sqrt)是对上面函数的调用
2018-10-06