创建函数
返回斐波那契数列的函数(任一个数是前两数之和的数字序列)
def fib(s) result= [0,1] fori in range(num-2) #循环N-2次 result.append(result[-2]+ result[-1]) #每次循环把(result[-2]+result[-1]的值加入result数组) return result
改变参数
在函数内为参数赋予新值不会改变外部任何变量的值:
>>>def try_to_change(n): n=’Mr. Gumby’ >>>name =’Mrs. Entity’ >>>try_to_change(name) >>>name ‘Mrs.Entity
当2个变量引用同一个列表时,值则可以改变
def hello(greeting,name): print ‘%s , %s!’ %(greeting,name) >>>hello(‘Hello’,’world’) Hello,world
关键字参数和默认参数
>>>def change(n): n[0]=’Mr.Gumb’ >>>name=[‘Mrs.Entity’ ,’Mrs Thing’] >>>change(name) >>>name [‘Mr.Gumb’ , ‘Mrs Thing’]
若调用函数时,提供参数的名字,叫做关键字参数(明确每个参数的作用)
>>>hello(greeting=’Hello’ , name=’world’) Hello,world
在函数定义的时候也可以提供默认参数
def hello1(greeting=’Hello’,name=’world’) print ‘%s,%s!’ %(greeting,name)
当函数有默认参数时,调用时可以不提供参数,也可以提供单个或两个参数。
收集参数
在参数前加星号将所有值放在一个元组。
def print_params(*params): printparams
>>>print_params(1,2,3)
(1,2,3)
可联合普通参数使用
def print_params_2(title,*params): printtitle printparams >>>print_params_2(‘Parms:’, 1,2,3)
处理关键字的收集操作,需在参数前加**,收集的所有数值放入字典中。
def print_params_4(x,y,z=3,*pospar,**keypar): printx,y,z printpospar printkeypar
>>>print_params_4(1,2,3,5,6,7,foo=1,bar=2)
1 2 3
(5,6,7)
{‘foo’:1 , ‘bar’:2}
反转过程,调用参数
def add(x,y):return x+y params=(1,2) >>>add(*params) #调用函数时,使用*传递元组 3 def hello_3(greeting=’Hello’,name=’world’): print ‘%s,%s!’ %(greeting,name) >>>params={‘name’: ‘ Sir Robin’ , ‘greeting’:‘Well met’} >>>hello_3(**params) #调用函数时使用**传递字典 Well met . Sir Robin
递归
实现n的阶乘
循环实现:
def factorial(n): result=n for i in range(1,n) result*=i returnresult
伪代码:一、1的阶乘是1;
二、大于1的数n的阶乘是n乘n-1 的阶乘
def factorial(n): ifn==1: return1 else: returnn*factorial(n-1)