1.创建函数
使用def语句就可以实现函数的定义,python中函数也包括以下几个部分:
- 函数名(自定义,但是要符合命名规则,不能使用关键字)
- 形参列表(可以有0个或多个形参)
- 函数体
- 返回值(用return语句实现,也可以没有返回值(或者说返回None))
#定义一个名为hello的函数,并调用它
def hello(name):
return 'Hello, '+name+'!'
print hello('world')
# Hello, world!
print hello('Gumby')
#Hello, Gumby!
#定义一个计算斐波那契数列的函数
def fibs(num):
result = [0,1]
for i in range(num-2):
result.append(fibs[-2]+fibs[-1])
return result
fibs(10)
#[0,1,1,2,3,5,8,13,21,34]
2.关键字参数与默认值
举例说明:
def hello_1(greeting,name):
print '%s,%s!' % (greeting,name)
#调用hello_1函数,这里就使用了关键字参数
hello_1(greeting='Hello',name='world')
#这类使用参数名提供的参数就叫做关键字参数
在使用关键字参数的时候,即使传入的参数的顺序与形参的顺序不一致,也能够得到预期的结果,而且也能够明确每个传入参数的含义。
def store(patient,hour,minute,hour,day.month):
print patient,hour,minute,hour,day.month
#以下两个语句得到的效果一样
store(patient = 'Mr Brainsample',hour = 10,minute = 20,day = 30,month = 5)
store(hour = 10,patient = 'Mr Brainsample',day = 30,minute = 20,month = 5)
关键字参数可以在函数中给参数提供默认值
def hello_2(greeting = 'Hello',name = 'world'):
print '%s,%s!' %s (greeting,name)
#有了默认值以后,不用传入参数,可以实现对函数的正确调用
hello_2()
#Hello,world!
hello_2('Greeting')
#Greeting,world!
hello_2('Greeting','universe')
#Greeting,universe!
如果想给name参数传入值,而让greeting参数使用默认值,那么采用如下方法:
hello_2(name='Gumby')
# Hello,Gumby!
3.收集参数
如果用户传入的参数的数目大于函数中定义的参数的数目,那么这个时候就要用到收集参数:
- *params :将多余的参数收集到一个元组中,不能处理多余的关键字参数
- **keypars:将多余的参数收集到一个字典中,用于处理多余的关键字参数
def print_params(*params):
print params
print_params('Testing')
#('Testing',)
print(1,2,3)
# (1,2,3)
def print_params_1(**keypars):
print keypars
print_params_1(x=1,y=2,z=3)
#{'z':3,'x':1,'y':2}
args = {'name':'Gumby','age':42}
print_params_1(**args)
def print_params_2(x,y,z=3,*params,**keypars):
print x,y,z
print params
print keypar
print_params_2(1,2,3,4,5,6,7,foo=1,bar=2)
# 1 2 3
(4,5,6,7)
{'foo':1,'bar':2}
4. 作用域
作用域分为全局作用域与局部作用域。如果想在函数内部修改全局变量的值,需要用到global关键字。
x = 1
def change_global():
global x
x = x+1
5.递归
#利用递归实现阶乘
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)