zoukankan      html  css  js  c++  java
  • 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	est.py", line 142, in <module>
        fun1()
      File "d:PythonWorkSpace.vscode	est.py", line 141, in fun1
        fun2()
      File "d:PythonWorkSpace.vscode	est.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]
  • 相关阅读:
    Leetcode: Flatten Binary Tree to Linked List
    POJ 1180 Batch Scheduling
    STL容器
    关于bfs时间轴
    dfs遍历痕迹的清理
    dfs、遍历与for
    在各OJ上的名号
    哈尔滨理工大学第七届程序设计竞赛初赛(BFS多队列顺序)
    东北林业大学第12届ACM(打表)
    浙江工业大学迎新预赛(容器的使用)
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/13911915.html
Copyright © 2011-2022 走看看