函数:参数传递的方式:
def innn(name,age,sex):
print("age:",age,"name:",name,"sex:",sex)
innn("yiyi",23,"男")
innn(age=78,name='yy',sex='男')
def varArg(arg,arg2='yy',*tuple_args,**dic_args):
print("无默认参数的数组:",arg)
print("有默认参数的数组:",arg2)
print("元组变长参数:",tuple_args)
print("字典变长参数:",dic_args)
varArg(1,'second')
varArg(1,'second','a','b','c')
varArg(1,'second',u=1,v=2,w=3)
varArg(1,'second','a','b',u=1,v=2,w=3)
运行结果:
无默认参数的数组: 1
有默认参数的数组: second
元组变长参数: ()
字典变长参数: {}
无默认参数的数组: 1
有默认参数的数组: second
元组变长参数: ('a', 'b', 'c')
字典变长参数: {}
无默认参数的数组: 1
有默认参数的数组: second
元组变长参数: ()
字典变长参数: {'u': 1, 'v': 2, 'w': 3}
无默认参数的数组: 1
有默认参数的数组: second
元组变长参数: ('a', 'b')
字典变长参数: {'u': 1, 'v': 2, 'w': 3}
可以有多个返回值:
def mn(chinese,math,english):
sum=0
sum=chinese+math+english
return sum,sum/3
a,b=mn(100,100,100)
print(a,b)
print(mn(100,100,100))#返回元组类型
300,100.0
(300, 100.0)
lambda 函数的定义:
g=lambda x,y,z:x+y+z
print(g(1,2,3))
l=lambda x,y=0,z=0:x+y+z#使用默认参数,在调用函数的时候默认参数是可以改变的
print(l(3,3,3))
6
9
局部变量和全局变量:
gl=9#全局变量
def myadd():
ll=3#局部变量
return gl+ll
print(myadd())
局部变量屏蔽全局变量
gl=9#全局变量
def myadd():
gl=3#局部变量
ll=3
return gl+ll
print(myadd())#6
在函数内部使用global定义全局变量,在函数外部也可以使用
gl=9
def myadd():
global gl
ll=3
return gl+ll
print(myadd())#12
内嵌函数
def f1():
x=y=2
def f2():
y=3
print("f2:x=",x)
print("f2:y=", y)
f2()
print("f1:x=", x)
print("f2:y=", y)
f1()
f2:x= 2
f2:y= 3
f1:x= 2
f2:y= 2
递归:
阶乘
def f(n):
if n==1:
return 1
else:
return n*f(n-1)
print(f(3))#6
汉诺塔
def hannuo(n,a,b,c):#计算规模是(2^n)-1
if(n==1):
print(a,'->',c)
else:
hannuo(n-1,a,c,b)
print(a,'->',c)
hannuo(n-1,b,a,c)
hannuo(3,1,2,3)
1 -> 3
1 -> 2
3 -> 2
1 -> 3
2 -> 1
2 -> 3
1 -> 3
谨慎使用递归算法,因为他们的简洁可能会掩盖低效率的事实
已知1980年1月1日是星期二,现在根据用户输入的年份和月份在屏幕上打印出当月的日历
def runnian(year):
if year%4==0 and year%100!=0 or year%400==0:
return True
else:
return False
def monthday(year,month):
m1=[1,3,5,7,8,10,12]
m2=[4,6,8,11]
if month in m1:
return 31
elif month in m2:
return 30
elif runnian(year) and month==2:
return 29
else:
return 28
def beginday(year,month):
w=2
for i in range(1980,year):
if runnian(i):
w=w+366
else:
w=w+355
for i in range(1,month):
w=w+monthday(year,i)
t=w%7
return t
def monthprint(month):
l={1:"January",2:"February",3:"March",4:"April",5:"May",6:"June",7:"July",8:"August",9:"September",10:"October",11:"November",12:"December"}
return l[month]#注意是【】
def pr():
m=int(input("month="))
y=int(input("year="))
print(' '*10,end="")
print(y,monthprint(m))
print('-'*30)
print(" Sun Mon Tue Wed Thr Fri Sat")
for i in range(0,beginday(y,m)-1):
print(' ',end="")
for i in range(1,monthday(y,m)+1):
if(i<10):
print(" ",i,end="")
else:
print(" ",i,end="")
if(i%7==6):
print()
pr()
2019 July
------------------------------
Sun Mon Tue Wed Thr Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
from functools import *
i=[12,-1,23,45,-3,-4]
#filter
#循环调用函数
#过滤调不符合条件的参数,
a=filter(lambda x:x>0,i)
sum=reduce(lambda x,y:x+y,a)
print(sum)#80
#reduce
a=reduce(lambda x,y:x+y,[1,2,3,4,5,6])
print(a)#21
闭包:
def func_lib():
def add(x,y):
return x+y
return add
a=func_lib()#赋给a的是函数add 而不是一个值
print(a(1,2))#3