[Python learning] Function - Gukie/machine-learning GitHub Wiki
Function is a collection of code
Pass By Value (传值)
跟Java是一样的, 调用方法的时候,传递参数,是该参数在内存中的地址 如果在方法中修改了,会:
- 如果参数是一个 不可修改的对象,比如int,那么会创建一个新的 不可修改的对象出来,原对象不会被修改
- 如果参数是一个 可以被修改的对象,比如 数组,那么原来的参数代表的对象就 会被修改
传递一个不可修改的变量
def test_pass_value(intVal):
print("before calculating:",id(intVal))
intVal+=100
print("after calculating:",id(intVal))
int1 = 23
print(test_pass_value(int1))
print("outside after calculating:",id(int1))
output:
before calculating: 1582982048
after calculating: 1582985248
outside after calculating: 1582982048
传递一个可有修改的变量
def test_pass_value(arr):
print("before calculating:",id(arr))
arr.append(23)
print("after calculating:",id(arr))
arr = [1,2]
test_pass_value(arr)
print("outside after calculating:",id(arr))
output:
before calculating: 2715805246536
after calculating: 2715805246536
outside after calculating: 2715805246536
参数的传递方式
- 根据位置来
- 根据 关键字来
需要注意的是,关键字只能再位置的后面,否则会报错
def calculate(length, width, height):
return ( length*width-1)/height
result1 = calculate(1,2,3);
result2 = calculate(1,width=2,height=22)
result3 = calculate(1,width=2,333) // this is wrong
About Return values
- Python 的function都会返回一个值. void的function 返回 None
def none_return():
1+1
print(none_return())
- Python的 function可以返回多个值
def sor_num(num1, num2):
if(num1>num2):
return num2,num1
return num1,num2
num1 = 23
num2 = 20
small,big = sor_num(num1,num2)
print(small,big)