python17天学习打卡(第五天)

函数

1.函数的定义

· 函数的定义,即以def开头,后面包括函数名以及圆括号,圆括号内可以是调用的参数名,也可以空着,和c++区别不大。
· 命名完成后按enter键会自动换行并且在后面加上冒号,同时自动缩进。
· 可以返回一个值,也可以不返回,若要返回值使用return
2.函数的调用
· 没有返回值的函数

def hello():
    print('hello world')
hello()  #hello world

· 有参数的函数

a=int(input('请输入第一个数:'))
b=int(input('请输入第二个数:'))
def add(a,b):
    return a+b
c=add(a,b)
print(c)

3.函数参数
· 位置参数
位置参数的位置需要固定,即不能更改,在调用时也要注意。

def lalala(a):
    print(a)
a=3
lalala(a)

· 默认参数
默认参数就是一个固定的参数,可以在写函数定义时就写好,如果在引用的过程中为默认参数赋值,则使用新的值,否则在函数运行过程中运用默认的值。
同时应当注意的是,默认参数应当放在位置参数之后,否则会报错。
正确

def weizhi(a,b=8):
    print(a+b)
weizhi(3) #11

错误

def weizhi(a=8,b):
    print(a+b)
weizhi(3) #报错

· 可变参数
就是引用的函数参数可以是一个元组,元组里的元素可以是任何类型的,可以是字符型也可以是浮点型等,加一个*号就可以

def asd(*a):
    print('第二个字符是:',a[1])
    print('第四个字符是:',a[3])
asd(60,70,80,'那鲁多')
#第二个字符是: 70
#第四个字符是: 那鲁多

另外,在使用可变参数时仍然可以使用位置参数和默认参数,但应当注意的是,如若位置函数放在可变函数之后,应当在引用时特地将位置函数的值定义好。(其实我觉得在引用时避免就好了)

def asd(*a,exp):
    print(exp)
asd(60,70,80,'那鲁多',exp=8)
#8

· 关键字参数
这个东西,也不知道有啥用。。。但既然视频里看见了也列一下,也许以后用到就会懂了。

def qwer(**k):
    print(k)
qwer(a=1,b=2,c=3)
#{'a': 1, 'b': 2, 'c': 3}

4.变量
和c++一样,python的变量也分为局部变量和全局变量。
局部变量:在函数内部定义的变量
全局变量:在函数外部定义的变量
局部变量,只能在函数内部被使用,而全局变量,可以在整个程序中使用。
如果我们在函数中定义了一个与全局变量名字相同的局部变量,并且想要通过改变该局部变量的值来改变全局变量的值,可以使用global关键字

def qwer():
    global a
    a=10
    print(a)
a=5
qwer()
print(a)
#10 10

可以看到,全局变量a的值被改变
5.内嵌函数
即,函数里面套函数,套娃哈哈哈

def q(x):
    def w(y):
        return x+y
    return w
print(q(3)(4))
#7

6.闭包
对于闭包,我看了一些资料,但还是不大懂,感觉意思就是,内部函数,对于外部函数中的外部变量(非全局变量)进行引用,那么内部函数就是闭包。
值得注意的是,内部函数,无法对调用的外部变量的值进行更改,否则会报错。这与全局变量又有所不同,如果在函数内部建立一个新的局部变量,但名字与全局变量一样,那么会建立一个与全局变量名字一样的局部变量,不会报错。
同时,如果想修改,可以使用nonlocal关键字

def q():
    num=10
    def w():
        global num
        num=100
        print(num)
    w()
    print(num)
q()
#100 10

如果用global关键字,可以看到值并不会改变,但是用nonlocal关键字就不同,我也不知道为啥。。。

def q():
    num=10
    def w():
        nonlocal num
        num=100
        print(num)
    w()
    print(num)
q()
#100 100

7.lambda表达式
lambda表达式,省去了命名函数的苦恼(命名恐惧症福音)。一般用一次就扔,可以精简代码,同时不用翻到很上面去看函数定义。
需要注意的是,它只能调用自己定义式中的变量

y=lambda x:x*2
print(y(3))
#6

8.lambda表达式中可以用到的一些东西
· filter
过滤序列,过滤掉不符合条件的元素,返回剩下的元素。只留下布尔值为true的函数
同时,如果没有函数,要在函数的位置加上None

judge=lambda x:x%2
temp=list(filter(judge,[1,2,3,4,5,6,7,8,9]))
print(temp)
a=list(filter(None,[1,0,True,False]))
print(a)

· map
将元组中的元素一一按照函数进行映射,然后将映射值重新组成一个元组。另外提一句,注意要加一个list将映射值组成元组。

odd=lambda x:x*2+1
a=list(map(odd,[1,2,3,4,5,6,7,8,9]))
print(a)
#[3, 5, 7, 9, 11, 13, 15, 17, 19]

9.递归
套娃套娃再套娃,我自己算自己
举两个小例子
**·**阶乘

def qwer(n):
    if n==1:
        return n
    else:
        return n*qwer(n-1)
print(qwer(5))
#120

**·**斐波那契数列

def fab (n):
    if n<1:
        print('输入有误')
    if n==1 or n==2:
        return 1
    else:
        return fab(n-1)+fab(n-2)
a=list()
n=int(input('请输入天数:'))
k=1
while k<=n:
    a.append(fab(k))
    k=k+1
print(a)

引用

https://mp.weixin.qq.com/s/jJoHrWYL4U3kvug5uA1UCg

时隔多天,再写一篇。感觉这样下去以后水几千字的论文作业都不是事了啊。
应是天仙狂醉,乱把白云揉碎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值