def xxx(x1,x2,n=3):
#一般函数中会传递数一个或数个可变参数以及一个默认位置参数
#可变参数 *karg
def xxx(*xx):
s=0
for i in xx:
s+=i
return s
#可以在函数中输入一个或多个变量,系统默认将多个变量组成tuple来处理
num=[1,2,3,4]
print(xxx(*num)) #如果参数就是个列表,那么在函数之中,可以对列表名加个可变参数符号*,将列表变成可变参数传递
#关键词参数,可以不受限制的输入,以dict的形式传入
def xxx(name='bob',age=24,**kw):
print({'NAME':name,'AGE':age,'others':kw})
print(xxx('bob',24,city='nanjing',nation='china'))
print(xxx('bob',24,city='nanjing',nation='china',waihao='stupid'))
#和上面可变参数一样,如果输入参数本身就是一个字典,则可以将字典名加上**,将字典中的元素传递函数当中
d={'city':'nanjing','nation':'china','birth':1994}
print(xxx(**d))
#命名关键词参数,限制关键词的输入
#例如只想要city和nation的信息,在关键词之前加上* 如果函数参数中有可变参数。则不需要加*
def xxx(name='bob',age=24,*,city,nation): def xxx(name='bob',age=24,*args,city,nation)
print({'NAME': name, 'AGE': age, 'city':city,'nation':nation})
xxx(city='nanjing',nation='china')
#一个完整的函数中包括必选参数、默认参数、可变参数、命名关键字参数和关键字参数,顺序不能打乱
def xxx(name,age=24,*args,city,**kw):
def xxx(name,age=24,*,city,**kw):
#递归函数 (一个函数在内部调用函数自身)
#比如阶乘函数:
def xxx(n):
if n==1:return 1
return n*xxx(n-1)
#函数式编程 (高阶函数) 将函数本身作为变量赋予另一个函数
#map(),reduce(),filter(),sorted()
def F(x,y,f): #这里f本身就是一个函数
return f(x)+f(y)
print(F(1,-4,abs))
#map/reduce的用法 (高阶函数)
'''map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。'''
def fun(x):
return x*x
print(list(map(str,[3,4,5,6,7]))) #将列表所有元素转换为字符串
'''reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)'''
from functools import reduce # 阶乘/累乘
def f(x,y):
return x*y
print(reduce(f,[1,2,3,4,5,6]))
#过滤函数filter() filter(fun,list),筛选掉那些不满足函数的值,用法和map相似
#返回0-1000内所有的回数(左到右或右到左一样)
def huishu(x):
s=str(x)
return s[::]==s[::-1]
print(list(filter(huishu,range(10,1001))))
#sorted()排序函数 对象时iterable对象
#sorted(l,key=function,reverse=False) key实现自定义排序,reverse=True实现倒序
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
L=np.array(L)
#对列表名字实现排序
def byname(l):
return l[0]
print(sorted(L,key=byname)
print(sorted(L,key=lambda l:l[0])) 利用匿名函数
#对成绩高低实现排序
def byscore(s):
return s[1]
print(sorted(L,key=byscore,reverse=True))
#函数中return函数 ‘闭包’
#还未更新
#匿名函数 lambda
def is_odd(n):
return n%2==1
print(list(filter(is_odd,range(1,20))))
print(list(filter(lambda x:x%2==1,range(1,20))))
#装饰器 decorator
#还未更新
#偏函数 partial function 将函数的 关键词参数 修改为默认值
#把一个函数的某些参数固定住并赋予一个新的函数,使新函数在使用起来更简单
from functools import partial
max2=partial(max,10)
print(max2(1,2,3,4,5)) 等价于 print(max2(10,2,3,4,5))
int2=partial(int,base=6) #int2改为六进制
print(int2('120'))