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

        • 不能更改全局变量
        • 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
  • 相关阅读:
    虚拟机中硬盘扩展方法
    ubuntu postgresql install
    vim python
    oe7报表的中文乱码
    文件导入 import
    How do I list user defined types in a SQL Server database
    修改表结构
    查询数据库中所有的表和数据库架构
    Dev chartControl添加提示层信息
    最简单的日志
  • 原文地址:https://www.cnblogs.com/maqian/p/11905202.html
Copyright © 2011-2022 走看看