• 函数二函数进阶


    函数进阶

    1. 动态参数(形参第三种传参方式)

      *1.1 args 动态位置参数,可将不定数目的位置参数全部接收

      从实参角度来看:定义函数时,*将所有的位置参数聚合到一个元组中,并赋值给args。

      def eat(*args): 
          print(args)
          print(f'我请你吃:{args}')
      eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅')
      结果:
      ('蒸羊羔', '蒸熊掌', '蒸鹿尾', '烧花鸭', '烧企鹅')
      我请你吃:('蒸羊羔', '蒸熊掌', '蒸鹿尾', '烧花鸭', '烧企鹅')
      

      **1.2 ****kwargs动态关键字参数,可将不定数目的关键字参数全部接收

      ​ 从实参角度来看:定义函数时,*将所有的关键字参数聚合成一个字典,并赋值给kwargs。

      def func(**kwargs): 
          print(kwargs)
      func(name='alex',age=84,hobby='唱跳rap篮球')
      结果:
      {'name': 'alex', 'age': 84, 'hobby': '唱跳rap篮球'}
      

      *args与**kwargs合称为万能参数

      def func(*args,**kwargs):
          print(args,kwargs)
      func(1,2,4,'fjdksal',age=84,hobby='唱跳rap篮球')
      结果:
      (1, 2, 4, 'fjdksal') {'age': 84, 'hobby': '唱跳rap篮球'}
      

      1.3 *的其他用法

      ​ 在函数中,当函数执行时*可以将参数打散

      def func(*args):
          print(args)  # (1, 2, 3,'太白', 'wusir', '景女神')
      l1 = [1, 2, 3]
      l2 = ['太白', 'wusir', '景女神']
      func(*l1,*l2)
      结果:
      (1, 2, 3, '太白', 'wusir', '景女神')
      
      def func(**kwargs):
          print(kwargs)
      func(**{'name':"alex"},**{'age': 73,'hobby': '吹'})
      结果:
      {'name': 'alex', 'age': 73, 'hobby': '吹'}
      

      ​ 在函数外可以处理剩余元素

      a,*c,b, = [1,2,3,4,5]
      #1 [2, 3, 4] 5
      

      1.4 仅限关键在参数(形参第四种传参)

      def func(a,b,*args,sex='man',c,**kwargs,):
          print(a)
          print(b)
          print(sex)
          print(c)
          print(args)
          print(kwargs)
      func(1,2,4,5,6,67,c=666,name='太白',age=18,)
      结果:
      1
      2
      man
      666
      (4, 5, 6, 67)
      {'name': '太白', 'age': 18}
      

      1.5 形参的顺序

      ​ *args不能放在位置参数前面,会使后面的位置参数接收不到值;不能放到默认参数之后,这样要接到值就要改变默认参数

      ​ **kwargs只能放在最后

      ​ 最终顺序为:位置参数,*args,默认参数,仅限关键字参数,**kwargs

    2. 空间角度研究函数

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

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

      内置名称空间:input,print,内置函数等。

    3. 取值顺序和加载顺序

      加载顺序:上面这三个空间,谁先加载到内存。

      内置名称空间 ----> 全局名称空间 ----> (函数执行时)临时名称空间

      取值顺序:(就近原则)

    4. 作用域

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

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

      作用于法则:

      ​ 在开始编写函数之前,所有的代码都是位于一个模块的顶层(也就是说,并不是嵌套在def之中的),所以目前使用的变量名要么是存在于模块文件本身,要么就是python内预先定义好的。函数定义了本地作用域,而模块定义了全局作用域。

      • 内嵌的模块是全局作用域。每一个内嵌模块都是一个全局作用域
      • 全局作用域的作用范围仅限于单个文件
      • 每次对函数的调用都创建了一个新的本地作用域,本地作用域实际上对应的是函数的调用
      • 函数中赋值的变量名除非声明为全局变量或非本地变量,否则均为本地变量
      • 所有其他变量名都可归纳为本地、全局或者内置的。在函数内部的尚未赋值的变量名是一个在一定范围内的(在这个def内部)的本地变量、全局(在一个模块的命名空间内部)或者内置(由python的预定义_builtin_模块提供的)变量。
    5. 内置函数

      globals 全局作用域所有的内容

      locals 当前位置的变量与值的对应关系

    6. 高阶函数

      函数的内嵌

      def fun2():
          print(2)
          def func3():
              print(6)
          print(4)
          func3()
          print(8)
      print(3)
      fun2()
      print(5)
      结果:
      3 2 4 6 8 5
      
  • 相关阅读:
    正则基础之——反向引用
    zend framework 配置连接数据库
    Zend Framework Module之多模块配置
    zend framework 1.10项目配置与经典hello world
    CSS3 @font-face
    js跳转页面方法(转)
    CSS中怎么让DIV居中
    HTML段落自动换行的样式设置
    PHPEXCEL实例-导出EXCEL
    移动端框架篇-控制父容器的滑屏框架-slip.js
  • 原文地址:https://www.cnblogs.com/yaoqi17/p/11047214.html
Copyright © 2020-2023  润新知