python笔记08函数知识点总结

python笔记08函数知识点总结

先声明一下
各位大佬,这是我的笔记。
如有错误,恳请指正。
另外,感谢您的观看,谢谢啦!

(1).函数的定义,参数

定义一个新的函数

def text():
    print('我是一个函数')
    
text()
我是一个函数

我们以前用的函数是都是有参数的,自己定义的函数也是可以有的

def text(x):
    print(f'{x}是一个函数')
text('我')
我是一个函数

要注意我们把被定义的函数的参数叫做‘形参’即‘x’,传入被定义的函数的参数叫’实参‘即‘‘我’’

如果函数需要多个参数,那就多定义几个好了

def text(x,y):
    print(f'{x}是一个{y}')
text('我','帅哥')
我是一个帅哥

然而一两个参数还好,有时候好几个参数,我们还有去背它的输入顺序吗?

当然有更好的办法了,就是关键字参数

def text(x,y):
    print(f'{x}是一个{y}')
text('帅哥','我')
def text(x,y):
    print(f'{x}是一个{y}')
text(y='帅哥',x='我')
帅哥是一个我
我是一个帅哥

我们看第二个,是不是很好用啊。

大家有没有想过会出现不知道究竟要几个参数的时候,(比如print()就是你输入几个实参都可以)

这时候就要用到收集函数了

def text(*x,y):
    for i in range(len(x)):
        print(f'{x[i]}是一个{y}')

text('你','我','他',y='帅哥')
你是一个帅哥
我是一个帅哥
他是一个帅哥

其实函数是把不确定是多少个的参数变成了一个元组

def text(*x,y):
    print(f'{x}')
text('你','我','他',y='帅哥')
('你', '我', '他')

还有定义参数是可以定义默认值的

def power(x,y=4):
    return x**y
print(2)
print(2,y=3)
16
8

如果不使用关键字参数,就默认返回实参的4次幂,如果设置了参数就要按照你输入关键字参数的来运算。

(2).局部变量与全局变量

局部变量:在函数内定义的变量,作用域只有函数内部,在函外部不能调用它们

全局变量:在函数外定义的变量,有更大的作用域。

y = 4
def power(x):
    a = 1
    return x**y+a
print(power(2))     
17

y是全局变量,a是局部变量,在函数内部可以调用(查看)全局变量但是不可以修改全局变 量的值,一旦修改,python会出于’保护机制‘,创建一个与你修改的全局变量,名字一模一样的局部变量,而你修改的不是全局变量的值。

y = 4
def power(x):
    a = 1
    y = 2
    return x**y+a
print(power(2))
print(y)
5
4

当然,你非要在函数内修改局部变量,可以用 global声明。

y = 4
def power(x):
    a = 1
    global y
    y = 2
    return x**y+a
print(power(2))
print(y)
5
2

(3).内嵌函数

python允许在函数内部创建函数

def power(x):
    y = 4
    a = 1
    def power2(x):
        return x**y+a
    return power2(x)
print(power(2))

上面就是一个内嵌函数。

内嵌函数的参数的作用域只有自己内嵌函数本身那么大,内嵌函数内也是只能调用不能修改其外部函数的变量

当然,和全局变量一样,如果非要改可以用nonlocal声明

而,内嵌函数的作用域也只是在其外部函数内,在全局是无法访问的

def power(x):
    y = 4
    a = 1
    def power2(x):
        return x**y+a
    return power2(x)
print(power2(2))
print(power2(2))
NameError: name 'power2' is not defined

(4).闭包

闭包可以理解为对外封闭的一个代码块,他运作的时候不会影响到外部环境,这也是闭包的好处。

在编程的时候要尽量减少全局变量的使用。全局变量确实好用,但是太容易引发bug了

下面举个闭包的例子

def pf(x):
    li1 = [x]
    def pf2(s):
        li1[0] = li1[0]+s
        return li1[0]
    return pf2
f1 = pf(2)
print(f1(2))
4

这里要注意,第六行返回的是一个功能,所以可以像7,8行那样用。

(5).lambda,filter,map

这三个函数功能真的很厉害,而且都特别的好玩,好用

lambda是函数式编程,它的格式如下

lambda 参数(多个参数就用逗号隔开) : 要return的值

def power(x,y):
    return x**y
g = lambda x,y:x**y

这两句代码的功能是一样的

print(power(2,3))
print(g(2,3))
8
8

filter是过滤器

它的功能是对第二个可迭代对象进行第一个参数(函数)的运算,为真留下。

print(list(filter(lambda x:x%2 ,range(10))))
[1, 3, 5, 7, 9]

map可以用映射来解释对第二个参数进行第一个函数参数的运算,第二个参数是接收参数即能传入多个参数

print(list(map(lambda x,y: x+y ,range(11),range(11,0,-1))))
[11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值