Python学习笔记--函数

1.函数文档

def myFirstFun():
    """
    hahaha,
    这是函数文档哦
    """
    return "返回成功"
print(myFirstFun())
print(myFirstFun.__doc__)

运行结果:

PS D:\PythonWorkSpace> & D:/Python/python.exe d:/PythonWorkSpace/.vscode/test.py
返回成功

    hahaha,
    这是函数文档哦

2.函数参数

   若函数的参数个数不确定,再定义函数的时候,形参就可以使用收集参数来搞定,仅需在参数前面加上星号(*)即可。

#函数参数个数
def mySecondFun(*params):
    print("有%d个参数" %len(params))
    print("最后一个参数是:",params[len(params)-1])
mySecondFun("aa")
mySecondFun("a","b","c")

运行结果:

有1个参数
最后一个参数是: aa
有3个参数
最后一个参数是: c

3.嵌套函数

def fun1():
    print("我是函数1正在执行")
    def fun2():
        print("我是函数2正在执行")
    fun2()
fun1()

运行结果:

我是函数1正在执行
我是函数2正在执行

4.闭包中局部变量的修改注意事项

#闭包中局部变量修改注意事项
def fun1():
    x=1#x为fun1中的局部变量
    def fun2():
        x=x+1
        print(x)
    fun2()
fun1()

运行结果:

Traceback (most recent call last):
  File "d:\PythonWorkSpace\.vscode\test.py", line 142, in <module>
    fun1()
  File "d:\PythonWorkSpace\.vscode\test.py", line 141, in fun1
    fun2()
  File "d:\PythonWorkSpace\.vscode\test.py", line 139, in fun2
    x=x+1
UnboundLocalError: local variable 'x' referenced before assignment

   可以看到,提示未知局部变量错误原因为fun2调用x时,是局部变量,fun1的x变量呗屏蔽,所以抛出错误

更改方法:在Python3版本后,加一关键字nonlocal即可

#闭包中局部变量修改注意事项
def fun1():
    x=1#x为fun1中的局部变量
    def fun2():
        nonlocal x
        x=x+1
        print(x)
    fun2()
fun1()

运行结果:2

5.装饰器

个人理解:装饰器的存在意义是想让函数更易于扩展

具体用法:,一般在调用函数前加"@语法糖",类似于Java的注解

#装饰器
def log(func):
    print("开始记录日志")
    def wrapper(*params):
        print("开始调用func函数")
        func(*params)
        print("调用func结束")
    print("开始调用wrapper")
    return wrapper

@log
def eat(*params):
    print("参数长度",len(params))
    print("%s最能吃" %params[0])
    print("%s最瘦" %params[1])
eat("小贾","小吴","小王","小郑")

运行结果:

开始记录日志
开始调用wrapper
开始调用func函数
参数长度 4
小贾最能吃
小吴最瘦
调用func结束

如果装饰一层觉得不够,还可以再一层一层套装饰器,,如

@Buffer
@performance
@log
def eat(name):
    print("%s开始吃饭了"%name)

执行时候就为调用buffer(performance(log(eat)))

6.lambda

Python中用lambda关键字来创建匿名函数

基本语法:使用冒号(:)分割函数的参数及返回值,冒号左边放置函数参数,如果有多个参数,使用逗号(,)分开即可,冒号右边是函数的返回值

g=lambda x,y: x*y-2
print(g(2,3))

运行结果:4

7.filter

filter函数是一个过滤器,filter有两个内置参数,第一个通常是函数,第二个是要筛选的对象,可以使列表等

具体用法:

筛选奇数:

temp=filter(lambda x: x%2,range(10))
print(list(temp))

运行结果:

[1, 3, 5, 7, 9]

8.map

map也有两个内置函数,也是一个函数和一个可迭代对象,将可迭代对象作为函数参数进行运算加工,直到每个元素加工完毕。

#map映射
temp=map(lambda x: x*2,range(10))
print(list(temp))

运行结果:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

map也支持多个可迭代对象,迭代方法为长度较短的迭代结束为止

temp=map(lambda x,y:x+y,[1,2,3],[10,20,30,40,50,60])
print(list(temp))

运行结果:

[11, 22, 33]

 

posted @ 2020-11-01 21:55  菜鸡要加油  阅读(111)  评论(0编辑  收藏  举报