要把程序分解成较小的部分,主要有3种方法。函数就像是代码的积木,可以反复到使用。利用对象,可以把程序的各个部分描述为自包含的单元。模块就是包含程序各部分的的单独文件。
创建或定义函数要使用Python的def关键字:
def printSmoething(): #用def定义一个函数,函数名为printSmothing()
print "LSM"
print "YMY"
print "Fairy"
print "Little fairy man"
print
printSmoething() #调用函数。程序就是从这里开始运行的。
第1行中,使用def关键字定义了一个函数。函数名后边有一对括号“( )”,然后是冒号。这个冒号和for循环、if语句等中的冒号用法一样。
调用函数就是运行函数中的代码。假若定义一个函数,但是从来不调用,这些代码就永远不会运行。
上例中,就算我们不定义函数仍然可以输出同样的结果:
print "LSM"
print "YMY"
print "Fairy"
print "Little fairy man"
那我们为什么要自找麻烦呢让程序更复杂呢?
使用函数的主要原因是,一旦定义了函数,就可以通过调用反复使用,我们如果想把以上内容打印5次,只需调用函数5次即可:
printSmoething()
printSmoething()
printSmoething()
printSmoething()
printSmoething()
当然,也有人可能说,我用循环也能做到。确实没错~~但是如果在程序不同位置打印,而不是全部一次完成,循环是不是就不行了呢。
前边说到定义函数后要加一个“( )”,它就是用来传递参数的。
如下:
def mathMark(myName):
print myName
print "80"
print
mathMark("YMY")
def mathMark(Name):
print Name
print "The score is 80"
print
mathMark("YMY")
mathMark("LSM")
mathMark("Cat")
每次调用输入的参数不同,人名会变,因为我们每次都向函数传入了不同的人名。
如果我们每个人的成绩不一样,那要怎么办呢?我们在上例只用名字一个参数,完全可以再添加一个分数的参数。顺便说一下:调用函数时称为实参,定义函数时称为形参。
def mathMark(name,score):
print name
print "The score is ",score
print
mathMark("YMY","80")
mathMark("LSM","99")
mathMark("Cat","0")
虽然说参数的个数是不限制的,但是如果函数超过5-6个参数,就考虑用别的做法。一种做法是把所有的参数收集到一个列表中,然后把这个列表传递到函数。
函数的返回值即函数可以向调用者发回信息。
返回一个值:
要让函数返回一个值,需要在函数中使用Python关键字return:
def calculateTax(price,tax_rate):
taxTotal = price +(price * tax_rate)
return taxTotal
my_price = float(raw_input("Enter a price "))
totalPrice = calculateTax(my_price,0.06)
print "price = ",my_price,"Total price = ",totalPrice
程序中使用或者可以使用变量的部分称为这个变量的作用域。
在上例最后增加一行代码:
def calculateTax(price,tax_rate):
taxTotal = price +(price * tax_rate)
return taxTotal
my_price = float(raw_input("Enter a price "))
totalPrice = calculateTax(my_price,0.06)
print "price = ",my_price,"Total price = ",totalPrice
print price
会出现错误,这是为什么呢?因为在calculateTax( )函数以外,变量price根本没有定义,它只是在函数运行时才存在,当函数完成时,就会被删除。试图在函数之外打印price的值,就会出现一个错误。像这个price、taxTotal、tax_rate都是一个局部变量。
与局部变量不同,全局变量可以用在函数的任意地方。
def calculateTax(price,tax_rate):
taxTotal = price +(price * tax_rate)
print my_price
return taxTotal
my_price = float(raw_input("Enter a price "))
totalPrice = calculateTax(my_price,0.06)
print "price = ",my_price,"Total price = ",totalPrice
在函数中打印my_price,结果正确。如果使用在主函数中定义过的变量名,Python允许使用,只要你不试图改变它。
强制为全局变量
可以用Python的关键字global来做到:
def calculateTax(price,tax_rate):
global my_price
(1) 编写一个函数,用大写打印你的名字,并多次调用这个函数。
def printName():
print "L SSSS M M"
print "L S M M M M"
print "L S M M M M"
print "L SSSSS M M M M"
print "L S M M M M"
print "L S M M M M"
print "LLLLL SSSS M M M"
print
for i in range(5):
printName()
(2) 建立一个函数,可以手动输入并打印全世界任何人名、性别、城市、国家。
def printSomething(name,sex,city,country):
print
print "The name is ",name
print "The sex is ",sex
print "The city is ",city
print "The country is ",country
print
nam = raw_input("Enter the name: ")
se = raw_input("Enter the sex ")
cit = raw_input("Enter the city: ")
countr = raw_input("Enter the country: ")
printSomething(nam,se,cit,countr)