#抽象-函数定义
#内建函数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=startwhile i<stop:re.append(i)i+=stepreturn reprint(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+1print(x)Add()#函数的嵌套定义:可以用一个函数去定义另一个函数,并将其返回
def mul(x):def mulx(y):return x*yreturn mulx
x=mul(2)
print(x(10))#定义了x*y函数