Code notes: Explaining the what is happening in the code
本问题已经有最佳答案,请猛点这里访问。
我是个新手。我已经使用了下面的代码,但我想了解最后一行是如何工作的,有人能给我解释一下代码的最后一行
1 2 3 4 5 | def power(a,b): if b == 0: return 1 else: return eval(((str(a)+"*")*b)[:-1]) |
eval评估python代码,或者让python程序在自己内部运行python代码。例子:
1 | CODE: |
eval('print(a + 3)')
1 | OUTPUT: |
1 | 18 |
当您返回以下内容时
1 | eval(((str(a)+"*")*b)[:-1]) |
你基本上是这样做的(例如,如果你是计算能力(2,5)):
1 2 3 | str(a) -> changes the value of a to string. in this case"2" str(a)+"*" -> concatinate the above string to the multiplication sign. now we have"2*" (str(a)+"*")*b) -> duplicates the above string b times. That is"2*"+"2*"+"2*"+"2*"+"2*", that is five times and now you have"2*2*2*2*2*" |
但正如你所看到的,结尾还有一个额外的"*"。要删除这个,我们使用[:-1]。这基本上是选择除最后一个以外的所有选项。":"基本上就是全部。
所以最后要计算的表达式是
等于
1 2 3 4 5 6 | a_str=str(a) # convert a in STRING a_star=a_str+"*" # concat the string a_str with"*" a_repeted=a_star*b # repeat a_star"b" times exp=(a_repeted)[:-1] # get all a_repeted car except the last on (ex 3*3*3*3 for a=3 and b=4) res=eval(exp) # evalutate the expression return res |
它相当于(真的更好;-)!):
1 2 | def power(a,b): return a ** b |
最好的方法是使用
一个可怕的想法,如其他人所说-如果你是一个新手,考虑找一个更好的向导!
使用
您只需要
1 2 | def power(a,b): return a ** b |