• Python3 函数


    函数 --- 为了代码最大程度复用和最小化代码冗余而提供的最基本程序结构

    函数作用

    1. 最大化代码重用和最小化代码冗余
    2. 流程分解

    def创建一个函数对象,并将其赋值给变量名;

    • lambda创建一个对象但其作为结果返回;
    • return将一个结果对象发送至调用者;
    • yield向调用者发回结果对象,但是记住它离开的地方;

    def在运行时评估,def之中代码在函数调用后才会评估。

    作用域(变量定义以及查找的地方)

    一个变量的作用域总是由在代码中被赋值的地方所决定的。

    作用域法则

    1. 内嵌的模块是全局作用域;
    2. 全局作用域的作用范围仅限单个文件;
    3. 每次对函数的调用创建了新的本地作用域;
    4. 函数内部赋值变量(修改变量不是赋值)默认均为本地变量(包括=,import,def,函数参数名等);
    5. 所有未在函数内部定义的变量可分为一定范围内的 全局变量,本地或内置。

    变量名解析:LEGB原则

    • L:Local 本地
    • E:Enclosing 函数内部/内嵌函数之间
    • G:Global 全局
    • B:Build-in 内置(存在于内置模块__buildin__中,可导入后使用dir()查看内置变量名)

    工厂函数:返回嵌套函数的函数。
    nonlocal(可以修改嵌套作用域变量)和global均限制变量的作用域查找范围。

    参数传递

    1. 参数传递是通过自动将对象赋值给本地变量名来实现(指针引用,不会自动进行拷贝);
    2. 函数内部参数名赋值不影响调用者;
    3. 改变函数可变对象参数也许会影响调用者;

    参数匹配模型

    1. 位置:从左至右
    2. 关键字参数:通过参数名
    3. 默认参数:定义没有传入值的默认参数
    4. 可变参数:收集任意多基于位置或关键字的参数
    5. 可变参数解包:传递任意多的基于位置或关键字的参数
    6. Keyword-only参数:参数按照名称传递

    函数定义

    def func(value1, name=value2, *seq, Name=Value(key-only), **dict)

    函数调用

    func(value1, value(name=value), Name=Value, *seq_value, **Dict)

    示例:

    
    def f(a, *b, c=6, **d): print(a, b, c, d)
    
    Sample1:
    f(1, 2, 3, x=4, y=5)
    -> 1 (2, 3) 6 {'x': 4, 'y':5}
    
    Sample2:
    f(1, *(2, 3), **dict(x=4, y=5))
    -> 1 (2, 3) 6 {'x': 4, 'y':5}
    
    Sample3:
    f(1, *(2, 3), c=7, **dict(x=4, y=5))
    -> 1 (2, 3) 7 {'x': 4, 'y':5}
    
    Sample4:
    f(1, c=7, *(2, 3), **dict(x=4, y=5))
    -> 1 (2, 3) 7 {'x': 4, 'y':5}
    
    
  • 相关阅读:
    破圈法求最小生成树+最小生成树与最短路径问题
    相信你们的锐意前行,终将成就更美好的未来
    “基于模块化自动驾驶底盘的PIX移动空间”发布
    Node:通过 Uglify 压缩小程序代码
    CSS 实用技巧
    websercie调用方式
    IDEA 添加tomcat启动后控制台乱码解决方案
    对象转json串,json转对象
    js 判断一个变量是数组还是对象
    @Transactional 锁表吗?关于Spring注解@Transactional和SQL for update 的一些观点
  • 原文地址:https://www.cnblogs.com/li1234yun/p/7814604.html
Copyright © 2020-2023  润新知