函数不仅是C/C++等高级语言的基本功能单元,而且也支持Python。Python中不仅可以调用内部函数,还可以自己定义函数。
一、定义函数
例子:
#FileName:function.py
def Hello():
print 'Hello World!' #函数体
Hello() #调用函数
输出:
>>> ================================ RESTART ================================
>>>
Hello World!
函数通过def
关键字定义。def关键字后跟一个函数的名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾,告诉Python接下来是缩进的一个代码块(亦称函数体)。
二、调用函数
调用函数是指运行函数里的代码,或是直接调用Python内置的函数,否则代码永远也运行不出来。
例子(1):
#FileName:function.py
def Print():
print "Love ,promised between the fingers."
print "Every man hath his weak side. "
print "Good advice is harsh to the ear."
print
Print() #调用函数
输出:
>>> ================================ RESTART ================================
>>>
Love ,promised between the fingers.
Every man hath his weak side.
Good advice is harsh to the ear.
例子(2):
>>> int (45.6)
45
>>> a = int #变量a指向int函数
>>> a(45.6) #变量a调用int函数
45
例子(1)表述的是自定义函数,调用函数时使用函数名和括号。例子(2)是调用内置函数数据类型转换的 int 函数。
三、在函数中传递参数
我们都知道函数得到的参数是我们提供给函数的值。参数在函数定义的圆括号对内指定,用逗号分割。函数中的参数名称为形参,而提供给函数调用的值称为实参。
#FileName:function.py
def Print(sentence): #sentence是形参
print sentence
print "Good advice is harsh to the ear."
print "Grasp all, lose all."
print "Handsome is he who does handsomely."
print
Print("best sentence:") #将"best sentence:"作为实参传入函数,函数中的形参sentence的值就是"best sentence:"
输出:
>>> ================================ RESTART ================================
>>>
best sentence:
Good advice is harsh to the ear.
Grasp all, lose all.
Handsome is he who does handsomely.
四、返回值return语句
我们用return语句来返回一个函数的值,或是从一个函数返回。
#FileName:function.py
def Max(x, y):
if x > y:
return x
else:
return y
print Max(4, 5)
输出:
>>> ================================ RESTART ================================
>>>
5
由上可知,Max函数返回参数中的最大值,它使用简单的if和else
语句来找出较大的值,然后返回最大值。
注:没有返回值的return
语句等价于return None
。None
是Python中表示没有任何东西的特殊类型。
#FileName:function.py
def Max():
pass
如果我们在定义一个空函数时,还不清楚函数的具体实现是什么,就写个pass(空语句块),让代码运行起来,如果不写pass就会出现语法错误。
五、变量作用域
1.局部变量:在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。
#FileName:function.py
def Print(x): #声明形参x
x = 2 #局部变量x值
print " x = ", x
x = 50 #主块程序x值
Print(x)
print " now x = ", x
输出:
>>> ================================ RESTART ================================
>>>
x = 2
now x = 50
在函数中,我们把值2
赋给形参x
。x
是函数的局部变量。当我们在函数内改变x
的值的时候,在主块中定义的x
不受影响。
2.全局变量:可以表示更大的作用域的变量,使用global关键字,可以为函数外定义全局变量赋值,也可以指定多个全局变量。
#FileName:function.py
def Print():
global x
x = 2
print 'x = ', x
x = 50
Print()
print 'now x =', x
输出:
>>> ================================ RESTART ================================
>>>
x = 2
now x = 2
global语句被用来声明x是全局变量,我们在函数内把值赋给x
的时候,主块使用x的值也会发生变化。
六、不同类型的参数值
1.使用默认参数值:如果我们不想要为函数参数赋值,这些参数就使用默认值。我们可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。
#FileName:function.py
def Message(message, times = 1): #给形参times默认赋值为1
print message * times
Message('hello World!') #字符串打印一次
Message('Hello World~', 3) #字符串打印三次
输出:
>>> ================================ RESTART ================================
>>>
hello World!
Hello World~Hello World~Hello World~
>>>
注:我们在给形参赋默认值的时候,一定要只有在形参表末尾的那些参数可以有默认参数值(如def func(a, b = 1)有效),即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。(如def func(a = 1, b)无效)
2.使用关键参数值:如果我们定义的函数有许多参数,只想使用其中的一部分,那我们就能通过命名的方式,也就是使用关键字的方式来给函数指定实参。
#FileName:function.py
def func(a, b = 3, c = 5):
print 'a is', a, 'and b is', b, 'and c is', c
func(3, 7)
func(25, b = 12)
func(c = 25, a = 100)
输出:
>>> ================================ RESTART ================================
>>>
a is 3 and b is 7 and c is 5
a is 25 and b is 12 and c is 5
a is 100 and b is 3 and c is 25
>>>
关键参数值优点:1.按照顺序来给参数赋值,没有赋值的参数就使用默认值;2.我们可以给我们任意想要的参数赋值,不管参数有没有默认值。