zoukankan      html  css  js  c++  java
  • python函数定义及作用域

    函数

    • 按照过程编写代码,一般功能都是一次性的,非常不好维护,把功能封装集成,方便二次开发和维护

    • 语法定义:在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

      def func_name(arg):#函数名,参数
          statement  #要执行的代码
          return value #返回结果,不写返回值默认返回None
    • 函数参数:

      • 形参:就是个变量名

      • 实参:变量名引用实际传进去的值

        def func(a):#形参
            pass
            return a
        a = 3 #实参
    • 参数探究:

      • 必备参数:在形参确定的情况下,实参按照参数顺序传参。

        def func(a,b):
            print(a+b)
            
        a = 5
        b = 3
        func(a)
        8
      • 默认参数:也叫缺省参数,在函数定义时,指明一个形参的默认值,就可以不给这个具有默认值的形参传递实参了。当你给一个具有默认参数的形参传递一个实参,那么会覆盖掉原有的默认值。缺省参数的定义顺序一定是从右向左,从后向前。

        缺省参数的定义顺序一定是从右向左,从后向前

      • 命名参数:参数太多的情况下,记不住顺序就会用到命名传参。

      • 不定长参数:不定长传参可接受空值

        • 元组不定长:*args表示元组形式传参

          def func(*args):
              print(args)
              print(*args)
          func('d',[1,2],{'k':5})
          ​
          ('d', [1, 2], {'k': 5})
          d [1, 2] {'k': 5}
        • 字典不定长:**kwargs字典传参

          def func(**kwargs):
              print(kwargs) #不定长传参(命名传参)成字典
              #print(**kwargs) 直接报错 不让你用
          func(a={'name':'小明','sex':'man'},b=2,c=3)
          ​
          {'a': {'name': '小明', 'sex': 'man'}, 'b': 2, 'c': 3}
        • 联合使用:

          def func(*args,**kwargs):
              print(args,kwargs)
          args = [1,2]
          kwargs={'f':3}
          func(*args,**kwargs)
          ​
          (1, 2) {'f': 3}
      • 参数解构:参数解构发生在函数调用时,可变参数发生函数定义的时候。参数解构分为两种形式,一种是必备参数解构,另一种是不定长参数解构。

        • 必备参数解构:*号会自动把对应索引位置上的实参传进来

        def func(a,b,c):
            print(a,b,c)
        lst = [1,2,3]
        func(*lst)
        ​
        1 2 3
        • 不定长参数解构:**把key对应value值传进来,key必须和形参相同

        def func(a,b,c):
            print(a,b,c)
        lst = {'a':2,'b':3,'c':6}
        func(**lst)
        ​
        2 3 6

    函数作用域

    • 局部变量:生存在函数运行期间,函数运行完就死了

      def func():
          a = 1 #局部变量
          pass
      • 想要局部变量存活下来,一个办法把它赋给返回值,另一种是使用global声明局部变量变为全局变量。

        def func():
            global a
            a = 1   
            pass
        print(a)
        ​
        1
    • 全局变量:存活在整个程序

    • 不可变数据局部变量改变不会影响到全局变量

      a = 'd'#全局变量
      def func():
          a = 'l'
          print('',a)
      func()
      print('',a)
      ​
      内 l
      外 d
    • 可变数据局部变量改变会影响到全局变量,也可以说可变数据就是全局的。

      a = [1,2]
      def func():
          a[0] = 'l'
          print(a)
      func()
      print(a)
      ​
      ['l', 2]
      ['l', 2]
    • 局部变量与全局变量只是变量名的地址不同,值地址相同

      a = 1
      def function():
          a = 1
          print(id(a))
      
      function()
      print(id(a))
      1800823008
      1800823008
  • 相关阅读:
    MySQL 中无法 insert 文件路径 中的 backward slash的解决方法
    生成颜色代码的 Java程序
    公积金贷款不受影响 组合贷款有特殊
    ADOMD.NET Client Object架构
    心情•笔记20061231
    微软所谓的"无人工介入的自动的机器翻译系统"
    游戏中的微软
    商业智能的个人理解
    无日
    从电影死亡笔记看商业智能在治安领域的应用
  • 原文地址:https://www.cnblogs.com/kmnskd/p/9915685.html
Copyright © 2011-2022 走看看