#抽象-函数定义
#内建函数callable函数可以用来判断函数是否可用
import math
x=1
y=math.sqrt
print(callable(x))
print(callable(y))
#函数定义:使用def语句
#斐波那契数列函数定义:
#为函数添加注释,并使其与函数一同存储在内存,以备后续查看:在函数开头直接写字符串,
#通过函数名.__doc__可以访问,也可以通过help(函数名)查看
def fibs(num):
'计算num项斐波那契数列,并返回其列表'
re=[0,1]
for i in range(num-2):
re.append(re[-2]+re[-1])
return re
num=int(input("input fibs items number:"))
print(fibs(num))
print(fibs.__doc__)#__doc__为函数属性,doc左右都是两根下划线
print(help(fibs))
#函数参数存储在局部作用域,在函数内为参数赋予新值不会改变外部任何变量,但若列表作为参数,
#则在内部修改则会影响外部对应列表,这是需要传入列表的副本
#关键字参数:不需要记住参数的具体位置,而通过形参数来提供值
def Hello(greeting,name):
print(greeting,name)
Hello(name='li',greeting='nice to meet you!')
#*号作用:函数参数前的*号为将其余位置的参数收集放置在一个元组中
def PrintItem(title,*text):
print(text)
PrintItem('a,','b','c','d')
#**收集函数的关键字参数(默认参数)
def func(**item):
print(item)
func(x=1,y='a',z="Z")
#参数使用实例
def story(**k):
return "Once upon a time,there was a"\
"%(job)s called %(name)s."%k
def power(x,y,**others):
if others:
print('Received redundant parameters:',others)
return pow(x,y)
def interval(start,stop=None,step=1):
'Imitats range() for step >0'
if stop is None:
start,stop=0,start#指定参数的值
re=[]
i=start
while i<stop:
re.append(i)
i+=step
return re
print(story(job='King',name='Gumby'))
params={'job':"Txt",'name':'text'}
print(story(**params))#参数收集的逆过程,在调用时加**
print(power(2,3))
print(interval(5,10,2))
#作用域:函数内的变量为局部变量,屏蔽同名的全局变量,不会影响全局变量,
#不同名时可以使用全局变量
s='A'
def PrintStr(s):
print(s+'-'+globals()['s'])
#参数s与全局变量同名,需使用globals()返回全局变量所在的字典,然后以变量名作为键访问其内容;
PrintStr("a")
x=1
def Add():
global x#global声明了x为全局变量,可以改变全局变量x的值,称为重绑定全局变量
x=x+1
print(x)
Add()
#函数的嵌套定义:可以用一个函数去定义另一个函数,并将其返回
def mul(x):
def mulx(y):
return x*y
return mulx
x=mul(2)
print(x(10))#定义了x*y函数