zoukankan      html  css  js  c++  java
  • 函数初识

    函数初识

    1. 函数的定义

      • 函数:函数是以功能为导向,一个函数封装一个功能
      • 优点:减少了代码的重复性,增强了代码的可读性
    2. 函数的结构

      • def 关键字: 定义一个函数.紧跟一个空格
      • new_len 函数名: 与变量命名规范一至.一定要具有可描述性
      • ()结构需要,传参用
      • :分隔符.
      • tab键: 四个空格.缩进,函数体.
    3. 函数的调用***
      使用函数名加小括号进行函数的调用

      写法:函数名() 这个时候函数的函数体会被执行

      def new_len(obj):
          count = 1
          for i in obj:
              count += 1
          print(count)
      new_len('sdadad')  # 函数名() 函数的执行者,调用者
      for el in range(3):
          new_len('sadadas')
      # 函数的调用写多少次,就执行多少次
      
    4. 函数的返回值
      • return

        1. 如果return后面什么都不写,或者函数中没有return,则返回的结果是None

        2. 如果return后面写了一个值,返回给调用者这个值

        3. 如果return后面写了多个结果,返回给调用者一个tuple(元组),调用者可以直接使用元组的解构获取多个变量。

    5. 函数的参数
    • 函数的实参传递给形参的过程叫做传参: 函数的拓展性
    • 实参角度 -- 函数的调用者
      1. 位置参数: 从左至右,按照顺序,一一对应.
      2. 关键字参数: 一一对应.
      3. 混合参数: 位置参数在关键字参数前面.
    • 形参角度:
      1. 位置参数: 与实参角度位置参数一样.
      2. 默认值参数: 一定在位置参数后面,不传参数即沿用默认的参数.
        函数的进阶
    1. 函数的参数

    • 函数的实参传递给形参的过程叫做传参: 函数的拓展性
    • 实参角度 -- 函数的调用者

      1. 位置参数: 从左至右,按照顺序,一一对应.
      2. 关键字参数: 一一对应.
      3. 混合参数: 位置参数在关键字参数前面.
    • 形参角度 --- 定义函数时

      1. 位置参数: 与实参角度位置参数一样.

      2. 默认值参数: 一定在位置参数后面,不传参数即沿用默认的参数.

      3. 动态参数(万能参数:*args,**kwargs)

        当函数传入的参数不定时,上面的传参方式解决不了问题

        • args: 将实参角度:定义一个函数时, 所有的位置参数聚合到一个元组中。

        • **kwargs: 函数的定义时:将实参角度所有的关键字参数聚合成了一个字典,给了kwargs.

    • 形参的最终顺序
      • 位置参数---->*args--->默认值参数--->仅限关键字参数--->**kwargs

    1. *的魔性用法
      • 函数内:函数的执行时: * 代表打散,** 只能打散映射类型(字典) (key不能是int型)

      • 函数外:处理剩余元素,处理后的结果为列表形式

    2. 命名空间与作用域
      1. 命名空间:

        • 全局命名空间:我们直接在py文件中,函数外声明的变量
        • 内置命名空间:python最开始会开辟一个自己的命名空间 -- 内置命名空间
        • 局部命名空间:函数内部声明的变量,函数执行时创建
        • 加载顺序: 内置命名空间 => 全局命名空间 => 局部命名空间
        • 取值顺序: 局部命名空间 => 全局命名空间 => 内置命名空间
      2. 作用域: 变量或函数的声明周期

      3. 全局作用域: 内置命名空间 全局命名空间

      4. 局部作用域: 局部命名空间

        globals() # 查看全局作用域中的内容
        locals()  # 查看的是当前作用域中的内容
        
    3. 函数的嵌套
      # 函数可以互相嵌套:
      def outer():
          def inner():
              print('我是内部')
          print('我是外部')
          inner()
      outer()
      
    4. 拓展

      • global
        • 在局部作用域中可以更改全局作用域的变量(限于字符串,数字)
        • 利用global在局部作用域也可以声明一个全局变量
      • nonlocal

        • 不能更改全局变量
        • 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/maqian/p/11905202.html
Copyright © 2011-2022 走看看