zoukankan      html  css  js  c++  java
  • Python 函数

    函数

    说明:函数是以功能为导向,封装单一功能的代码块,能够被调用执行

    优点:函数能够降低代码的重复率

       提高代码的可读性

    函数的定义:

      def fun():

        函数体

    函数的调用:

      fun()

      函数被调用了多少次,函数就执行多少次

    函数的返回值:

      通过return关键字将函数体的结果返回给函数的执行者

      return的作用:

          1. 结束函数

          2. 函数中没有或者只有一个return 函数返回一个None给函数执行者

          3. return后面有一个值得时候,函数执行知将得到这个值(不会改变数据类型)

          4. return后面跟多个值得时候,多个值组成元组后返回给函数执行者

    函数传参: 实际就是实参传给形参的行为过程

        形参:定义函数时括号中的参数,用于接收调用函数时传过来的实参

          分类:

            位置参数  从左至右 按照顺序 一一对应

            默认参数  一定要在位置参数的后面,不传实参默认使用形参的默认参数

            动态参数

            仅限关键字参数

        实参:代用函数时指定的参数,用于传给函数中的形参供函数体使用

          分类:

            位置参数  从左至又 一一对应

            关键字参数  一一对应

            动态参数  关键字参数一定要在位置参数后面 一一对应

    函数的传参:形参角度:第三种传参方式。

    动态参数:*args **kwargs

    *args : 能够接收实参角度的所有位置参数,得到一个元组存储到args中

    **kwargs : 接收实参角度的所有关键字参数,得到一个字典存储在kwargs中

    # def eat(food1,food2,food3):
    #     print(f'我请你吃:{food1},{food2},{food3}')
    # eat('蒸羊羔','蒸熊掌','蒸鹿尾')

    # 当给函数传入的参数数目不定时,之前的传参方式解决不了问题。
    # 万能参数,动态参数。 *args
    # def eat(food1,food2,food3):
    #     print(f'我请你吃:{food1},{food2},{food3}')
    # eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅')

    def eat(*args): # 将实参角度:定义一个函数时,* 所有的位置参数聚合到一个元组中。
      print(args)
      print(f'我请你吃:{args}')
    eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅')
    *的魔性用法
    • 函数中的打散和聚合

    在函数的定义时 *起到的是聚合的作用

    在函数的执行时 *起到的是打散的作用

    • 处理剩下的元素

      a,*b = (1, 2, 3, 4,)
      print(a, b) # 1 [2, 3, 4]
      *rest,a,b = range(5)
      print(rest, a, b) # [0, 1, 2] 3 4
      print([1, 2, *[3, 4, 5]]) # [1, 2, 3, 4, 5]

       

     

    形参角度的最终顺序

    位置参数,*args,默认参数,**kwargs (仅限关键字参数在*args和**kwargs之间,和默认参数的位置不冲突)

    原因:

    • 动态参数*args不能放在位置参数之前,这样位置参数就接收不到任何实参了,都被*args抢去了

    • 动态参数*args一定要在默认参数之前,因为放在默认参数后面就没法使用默认参数的默认值了

    • 动态参数**kwargs一定要放在默认参数之后,如果在默认参数之前会报错,因为默认参数的值永远改变不了

    第四种传参方式:仅限关键字参数

    仅限关键字参数是python3x更新的新特性,他的位置要放在*args后面,kwargs前面(如果有kwargs),也就是默认参数的位置,它与默认参数的前后顺序无所谓,它只接受关键字传的参数

    也可以把它当成没有默认值的默认参数,只接受关键字参数,不传就会报错

    从空间角度研究函数

    全局名称空间: py文件运行时开辟的,存放的是执行的py文件(除去函数内部)的所有的变量与值(地址)的对应关系,整个py文件结束之后,才会消失。

    临时(局部)名称空间: 函数执行时,在内存中临时开辟的一个空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失。

    内置名称空间:存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间

    加载顺序(三个空间加载到内存的顺序)

    内置命名空间(程序运行伊始加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载

    取值顺序:(就近原则)取值顺序就是引用一个变量,先从哪一个空间开始引用

    取值顺序满足的就近原则,从小范围到大范围一层一层的逐步引用。

    作用域

    作用域就是作用范围, 按照生效范围来看分为全局作用域和局部作用域

    全局作用域:全局名称空间,内置名称空间。

    局部作用域:局部名称空间。

    内置函数:globals,locals

    globals(): 以字典的形式返回全局作用域所有的变量对应关系。

    locals(): 以字典的形式返回当前作用域的变量的对应关系。

    高阶函数(嵌套函数)

    函数的嵌套,就是一个函数中,还有函数。

  • 相关阅读:
    jq动画效果
    each循环和节点操作
    jquery的基础语法
    JS作用域
    DOM事件
    js语法一
    socketserver模块与mysql语句(一)
    亲测idea编辑器控制台中文乱码成功的解决方法
    PHP Fatal error: Call to undefined function json_decode()
    PHP <? 标签问题导致不能正确运行代码
  • 原文地址:https://www.cnblogs.com/muchengQ/p/11041920.html
Copyright © 2011-2022 走看看