python第四章学习笔记

函数:参数传递的方式:

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值