Skip to content

[Python learning] Function

Gukie edited this page Dec 18, 2017 · 2 revisions

Function is a collection of code


Pass By Value (传值)

跟Java是一样的, 调用方法的时候,传递参数,是该参数在内存中的地址 如果在方法中修改了,会:

  1. 如果参数是一个 不可修改的对象,比如int,那么会创建一个新的 不可修改的对象出来,原对象不会被修改
  2. 如果参数是一个 可以被修改的对象,比如 数组,那么原来的参数代表的对象就 会被修改

传递一个不可修改的变量

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)

Clone this wiki locally