父与子的编程---函数
学到什么:
- 什么是函数
- 什么是参数(argument 或 parameter)。
- 如何向函数传递一个参数。
- 如何向函数传递多个参数
- 如何让函数向调用者返回一个值。return
- 变量作用域是什么,什么是局部变量和全局变量。
- 如何在函数中使用全局变量。global
要把程序分解成较小的部分,主要有 3 种方法。
- 函数(function)就像是代码的 积木,可以反复地使用。
- 利用对象(object),可以把程序中的各部分描述为自包含 的单元。
- 模块(module)就是包含程序各部分的单独的文件。
最简单地讲,函数就是可以完成某个 工作的代码块。这是可以用来构建更大 程序的一个小部分。可以把这个小部分 与其他部分放在一起,就像用积木搭房 子一样。
创建或定义函数要使用 Python 的 def关键 字。
创建一个函数
def printMyAddress():
print "Warren Sande"
print "123 Main Street"
print "Ottawa, Ontario, Canada"
print "K2M 2E9" print
printMyAddress()

调用函数
调用函数是指运行函数里的代码。如果我们定义了一个函数,但是从来不调用 它,这些代码就永远也不会运行。
调用函数时要使用函数名和一对括号。有时括号里还会有些东西,有时也可能 什么也没有。
使用函数还有一个原因,每次函数运行时可以让它有 不同的表现。
向函数传递参数
你希望对你的所有家庭成员使用这个地址打印函数。所有人的地址都是一样的,但是每一次人名会有所不同。
def printMyAddress(myName):
print myName
print "123 Main Street"
print "Ottawa, Ontario", Canada print "K2M 2E9"
printMyAddress("Carter Sande")

有多个参数的函数
谈到向函数传递信息时,你可能还会听到这样一个词:形参(parameter)。有些人 说参数(argument)和形参(parameter)可以互换。所以你可以说, “我向这个函数传递两个形参(parameter)”,或者 “我向这个函数传递两个参数(argument)”。
不过有些人认为,谈到传递部分(调用函数)时应当称作实参(argument),而谈到 接收部分(函数内部)时应该称为形参(parameter)。
使用参数(不论是 argument 还是 parameter)讨论向函数传递值时,程序员都明 白你是什么意思。
每一个人发送卡特的信,我们的地址打印函数需要两个参数:一 个对应人名,另一个对应门牌号码:
def printMyAddress(someName, houseNum):
print someName
print houseNum,
print "Main Street"
print "Ottawa, Ontario, Canada"
print "K2M 2E9"
printMyAddress("Carter Sande", "45")
printMyAddress("Jack Black", "64")
printMyAddress("Tom Green", "22")
printMyAddress("Todd White", "36")

如果你的函数有超过 5 到 6 个参数,可能就应该考虑采用别的做法了,一种做法的把所有参数收集到一个列表,然后把这个列表传递到函数,这样一来,就只是传递 一个变量(列表变量),只不过其中包含有一组值。这样可以让你的代码更易读。
返回值的函数
函数只是为我们做一些工作。不过函数的一个突出作用是:它们还 可以向你发回一些东西。可以向函数发送信息(参数),不过函数还可以向调用者发回信 息。从函数返回的值称为结果(result)或返回值(return value)。
返回一个值
让函数返回一个值,需要在函数中使用 Python 关键字 return



变量作用域
对于函数而言,函数内的名字只是在函数运行时才会创建。在函数运行之前或者完成运行之后甚至根本不存在。python提供了内存管理器(memory management)可以自动完成这个工作。Python 在函数运行时会创建新的名字在函数内使用,当函数完成时会把它们删除。最后这部分很重要:函数运行结束时,其中的所有名字都不再存在。
局部变量
a,b,total是函数test的局部变量
全局变量
我们使用全局变量( global)表示有更大作用域的变量。在这种情况下,更大是指程序的主部分,而不是函数内部。完全可以在另一个位置使用变量,它们仍然有之前给定的值。它们仍在合法的作用城中(in scope)。因为我们可以在程序的任何地方使用这些变量,所以把它们称作全局变量(global variable)。

总结:在函数外打印局部变量会报错;在函数内可打印全局变量,如果内部重新赋值了和全局变量同名的变量,打印结果不同,为两个同名的不同变量(一个为局部变量,一个为全局变量),如果没有重新赋值,打印结果函数外和函数内结果一样,为同一个变量。
强制为全局:关键字global
如果试图从函数内改变一个全局变量的值,会在函数内创建一个新的局部变量,那么为了防止函数改变全局变量的值,客园用还关键字global来做。
如果使用 global 关键字,Python 不会建立同名的局部变量,而是 会使用同名 的全局变量。另外,如果还没有定义此名的全局变量, Python 就会创建一个。

关于变量命名的一点建议
强烈建议你不要重复使用变量名。容易出bug。

浙公网安备 33010602011771号