本文待整理到:
中去。
【问题】
要求是 我是这样写的 def by_three(x): if x%3==0: return cube(x) else: return False def cube(n): result=n**3 return result by_three(11) by_three(12) by_three(13) 有一点不太清楚的就是by_three里面,return cube(x),这里是应该用x吗?还是用n |
【问题解答】
1.如果你只是问
x和n有啥区别。
那标准答案就是:
除了字母不一样,其他没啥区别。都是某个函数中的某个参数(变量)而已。
而变量名,是可以(在保证符号语法要求的前提下)随便写的。
比如你的cube函数,就可以改为:
def cube(x): result=x**3 return result
而更加好的写法是:
def cube(inputIntValue): threeCubedResult =inputIntValue**3; return threeCubedResult
这样才叫做代码的可读性好一些。
2.从你代码本意看,就是
当输入数据是3的倍数时,就返回该数的3次方
否则就返回False
而且代码也是如你所愿的去运行了。
你还有啥疑问???
3.你说的
argument
parameter
简单说:
都是个英文单词,都可以表示函数的参数。
用哪个都可以。
4.反正是说了半天,没看到你到底想问啥。。。。
貌似终于看懂你问的了。。。
简答:
用x
详解:
用x还是n
主要是:
你本身对于函数,参数调用,的概念,完全搞混淆了。
简单解释就是:
你先去搞懂函数变量的概念
然后就自动懂了如何调用函数,如何传递参数
此处就是:
def by_three(x): if x%3==0: return cube(x) else: return False
中的x,是函数by_three的一个变量
此变量的值,是输入的参数决定的
如果改为n,那么就是:
代码非法,
因为当前函数by_three内,根本就没有n这个变量
所以无法使用。
再总结为:
函数实现的时候,你的函数参数的名字和你被调用的时候,没有半毛钱关系。
即
cube函数实现时,用的参数名字叫做n,而by_three中调用cube的时候写的x
两者没有关系。
有关系的是:
在别的函数(by_three)中,调用被调用的那个函数(cube)时,确保传递的参数类型是要匹配的,一致的(此处都是int型)
【深入的解释:调用函数中的参数的名字和被调用函数中的参数名字,没有半毛钱关系】
对于之类问题,再举个通用的例子:
void functionCaller() { int para1 = 1; int para2 = 2; functionBeCalled(para1, para2); } int functionBeCalled(int para1, int para2) { int sum = para1 + para2; return sum; }
其中的,调用函数functionCaller中的para1和para2,和被调用函数functionBeCalled中的,函数参数的para1和para2,没有任何关系。
即,换成这种:
void functionCaller() { int para3 = 1; int para4 = 2; functionBeCalled(para3, para4); } int functionBeCalled(int para1, int para2) { int sum = para1 + para2; return sum; }
也是完全可以的,含义没有任何改变。
对于上述例子中的几个变量,更深入的解释,其实是:
para3和para4,都是函数functionCaller中的普通的一个,局部,函数内部的,变量而已。
然后调用别的函数(functionBeCalled),将此两个普通的局部变量的值,传递到被调用的函数中去;
然后被调用函数functionBeCalled中的para1和para2,也只是普通的,函数functionBeCalled内部的局部变量而已。
所以,如上的代码,其真实的含义,可以理解为:
void functionCaller() { int para3 = 1; int para4 = 2; { int para1 = para3; int para2 = para4; int sum = para1 + para2; } }
可见,对于para3和para4,你改为别人任何名字,都是无所谓的。
【总结】
不论是,
调用函数中的,传递给被调用函数的变量,也只是普通的,调用函数中的局部变量而已->其变量名,想叫啥就叫啥;
被调用函数中的参数->等价于被调用函数中的局部变量->唯一不同的是,它们的值,是在函数调用发送时,从被调用函数传递过来的->给被调用函数的参数进行初始化赋值而已
=> 调用函数中的参数,和被调用函数的参数,两者的变量名之间,没半毛钱关系;