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

时间:2024-09-21 09:34:20

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

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

6.3 创建函数

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

最简单的例子:

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

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

 def fbis(num):
if num<=0:
return "input error"
if num==1:
return [0]
if num==2:
return [0,1]
f=[0,1]
for i in range(num-2):
f.append(f[-1]+f[-2])
return f

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

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

6.4 函数参数

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

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

 def change(name):
name[0]='yanliang' #这里直接将列表a传入,实参和形参变量引用同一个列表
>>> a=['fun','a']
>>> change(a)
>>> a
['yanliang', 'a'] #这里行参为实参的一个拷贝,两个是独立的
>>> a=['fun','s']
>>> change(a[:])
>>> a
['fun', 's']

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

 >>> b='yang liang'
>>> b
'yang liang'
>>> a=b.split()
>>> a
['yang', 'liang']

下面是一个初始化函数

 #初始化的函数
def init(name):
name['first']={}
name['last']={}
name['all']={}
##>>> stroge={}
##>>> init(stroge)
##>>> stroge
##{'all': {}, 'first': {}, 'last': {}}

关键字参数和默认值

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

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

 def hello1(name,greet):
print(name+"###"+greet) >>> hello1(greet='func',name='yanliang')
yanliang###func

函数可以提供默认参数

 def hello1(name='yan',greet='hello'):
print(name+"###"+greet) >>> hello1(name='yanliang')
yanliang###hello

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

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

还有一种**的方法

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

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

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

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

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

 def hello1(name,greet):
print(name+' ### '+greet) >>> zidian={'name':'yanliang','greet':'hello'}
>>> hello1(**zidian)
yanliang ### hello

6.5 作用域

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

6.6 递归

(1)阶乘:

 def jiechen(n):
if n==1:
return 1
else:
return jiechen(n-1)*n

(2)求幂:

 def powerd(x,n):
if n==1:
return x
else:
return powerd(x,n-1)*x