Python基础教程笔记——第6章:抽象(函数)

(1)计算裴波那契数列:

1 fbis=[0,1]
2 num=int(input("please input the number"))
3 for i in range(num-2):
4     fbis.append(fbis[-2]+fbis[-1])
5 print(fbis)      

6.3 创建函数

callable():函数可以确定函数是否可以被调用

最简单的例子:

1 def hello(name):
2     return "hello"+name+"are you OK?"

输入个数,输出裴波那契数列的函数

 1 def fbis(num):
 2     if num<=0:
 3         return "input error"
 4     if num==1:
 5         return [0]
 6     if num==2:
 7         return [0,1]
 8     f=[0,1]
 9     for i in range(num-2):
10         f.append(f[-1]+f[-2])
11     return f

记录函数:给函数写说明文档和查看函数的说明文档

1 def hello(name):
2     'this is a print function'#函数说明文档作为字符串
3     print("hello "+name)
4 
5 #查看函数文档
7 >>> hello.__doc__
8 'this is a print function'

6.4 函数参数

函数的参数和C,C++一样也是值传递

下面两种情况下参数的改变对实参的影响不同

 1 def change(name):
 2     name[0]='yanliang'
 3 
 4 #这里直接将列表a传入,实参和形参变量引用同一个列表
 5 >>> a=['fun','a']
 6 >>> change(a)
 7 >>> a
 8 ['yanliang', 'a']
 9 
10 #这里行参为实参的一个拷贝,两个是独立的
11 >>> a=['fun','s']
12 >>> change(a[:])
13 >>> a
14 ['fun', 's']

 split 拆分函数,针对的是字符串

1 >>> b='yang liang'
2 >>> b
3 'yang liang'
4 >>> a=b.split()
5 >>> a
6 ['yang', 'liang']

 下面是一个初始化函数

1 #初始化的函数
2 def init(name):
3     name['first']={}
4     name['last']={}
5     name['all']={}
6 ##>>> stroge={}
7 ##>>> init(stroge)
8 ##>>> stroge
9 ##{'all': {}, 'first': {}, 'last': {}}

关键字参数和默认值

本来一般函数在调用时,各个参数的名字要和函数体是一一对应的。

在这里只要在函数调用时,把形参名也给出来,那么就算顺序不对也没有关系。

1 def hello1(name,greet):
2     print(name+"###"+greet)
3 
4 >>> hello1(greet='func',name='yanliang')
5 yanliang###func

函数可以提供默认参数

1 def hello1(name='yan',greet='hello'):
2     print(name+"###"+greet)
3 
4 >>> hello1(name='yanliang')
5 yanliang###hello

用户提供任意多个参数,采用*来收集参数

1 def hell0(*name):
2     print(name)
3 
4 >>> hell0('yan','liang')
5 ('yan', 'liang')#这里的输出作为一个元组

还有一种**的方法

1 def hello1(x,y,z=3,*name1,**name2):
2     print(x,y,z)
3     print(name1)
4     print(name2)
5     
6 >>> hello1(1,2,4,5,6,7,89,ho=2,ju=3)
7 1 2 4
8 (5, 6, 7, 89)
9 {'ho': 2, 'ju': 3}#将加了关键字的变成了一个字典

 反转过程:这里不是将参数收集起来,而是将参数分配出去

第一种:* 将元组分配出去

1 def add1(x,y):
2     return x+y
3 
4 >>> parms=(1,2)
5 >>> add1(*parms)
6 3

第二种:**将字典解析出来

1 def hello1(name,greet):
2     print(name+' ### '+greet)
3 
4 >>> zidian={'name':'yanliang','greet':'hello'}
5 >>> hello1(**zidian)
6 yanliang ### hello

6.5 作用域

 除了全局作用域外每一个函数的调用都会创建一个新的作用域。

6.6 递归

(1)阶乘:

1 def jiechen(n):
2     if n==1:
3         return 1
4     else:
5         return jiechen(n-1)*n

(2)求幂:

1 def powerd(x,n):
2     if n==1:
3         return x
4     else:
5         return powerd(x,n-1)*x
原文地址:https://www.cnblogs.com/yanliang12138/p/4712601.html