zoukankan      html  css  js  c++  java
  • python 函数Ⅱ(参数&作用域)

    函数Ⅱ(参数&作用域)

    • 知识小结:

      • py2与py3的区别

      • 逻辑运算()>not>and>or

      • 字符串翻转切片翻转

      • is与==区别

      • git相关

      • 数据类型判断

      • 操作系统:centos,redhat

      • 数据类型的操作方法

      • 深浅拷贝

      • 大文件(日志文件)读取

      • 一行写成99乘法表

    1.参数

    • 实际参数可以是任何值

    • 函数没有返回值,默认返回None

    • 函数内部执行时,遇到return就终止运行

    • return可以返回任何数据类型的值,多个值时返回元组

      # enconding: utf-8
      def test():
         return 1,2,3
      print(test()) #(1, 2, 3)

    1.传参

    • 传参:调用函数并传递参数,实参与形参必须一一对应

    • 位置传参:严格按照位置先后顺序传参

    • 关键字传参:直接赋值传参,无先后顺序

    • 混合传参:位置参数与关键字参数混合使用,位置参数一定在关键字参数之前

      def func(a1, a2):
      print(a1, a2)
      func(a2=99,a1=2)
      # 关键字传参数和位置传参可以混合使用(位置传入的参数 > 关键字参数在后 = 总参数个数)
      def func1(a1, a2, a3):
      print(a1, a2, a3)
      # func(1, 2, a3=9)
      # func(1, a2=2, a3=9)
      # func(a1=1, a2=2, a3=9)
      # func(a1=1, 2,3) # 错误

    2.默认参数

    • 默认参数:在函数建立时定义好的参数.

    • 默认参数可传可不传.不传参使用默认值,传递参数相当于重新对默认参数赋值.

    3.*参数 万能参数(打散)

    • (*args)只接收位置参数

    • 格式(*参数)可以接收多个参数,但是只支持位置传参

    • 实参传递到形参时是以元组形式传递

    • 传参时实参前加星(*实参),先把实参打散,再传参到形参

      def func(*args):
      print(args)
      # func(1)
      # func(1,2)
      func(1,2) # args=(1, 2)
      func((11,22,33,44,55)) # args=((11,22,33,44,55),)
      func(*(11,22,33,44,55)) # args=(11,22,33,44,55)

    4.**参数 万能参数

    • **(kwargs)

    • 只接收关键

    • 字参数

    • 实参传递到形参时是以字典形式传递{'k'=v}

    • 传参时实参前加**,直接传递字典

      def func(*args,**kwargs):
      print(args,kwargs)
      # func(1,2,3,4,5,k1=2,k5=9,k19=999)
      func(*[1,2,3],k1=2,k5=9,k19=999)
      func(*[1,2,3],**{'k1':1,'k2':3})
      func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})

    注意:一般*args与**kwargs一起使用,这是超级无敌万能参数

    参数重点总结

    1.常见形参模式:

    def func1(a1,a2):
    pass
    def func2(a1,a2=None):
    pass
    def func3(*args,**kwargs):
    pass

    2.位置参数永远在关键字参数之前!

    2.作用域scope与函数嵌套

    • 作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

    • python

      • 一个py文件是一个全局作用域

      • 一个函数是一个作用域

    • 作用域中查找数据规则:优先查找自己局域内数据,自己没有再去父级作用域查找,以此类推,可以找到,可以修改,不能为父级作用域的变量重新赋值.

    • global '全局,全球'强制更改全局作用作用域 ,先global+变量,再对变量赋值

    • nonlocal '外地' 强制更改父级作用域变量 ,先nonlocal+变量,再对变量赋值

      # 示例一
      name = ["老男孩",'alex']
      def func():
         global name
         name = '我'
      func()
      print(name)
      # ############################## nonlocal
      name = "老男孩"
      def func():
         name = 'alex'
         def inner():
             nonlocal name # 找到上一级的name
             name = 999
         inner()
         print(name)
      func()
      print(name)

       

    • 全局作用域:全局作用域内的数据公用

      • 全局变量全部大写

    • 局部作用域:局部作用域可以使用全局作用域内的数据,但是全局作用域使用不了局部作用域的数据即

      • 局部变量正常变量定义

    • 函数的作用域链:小范围作用域可以使用大范围的变量,但是反之不行,他是单向的。

    • 函数内只可以调用全局作用域的函数

      # x = 10
      # def func():
      #     x = 9
      #     print(x)
      #     def x1():
      #         x = 999
      #         print(x)
      #     print(x)
      #     x1()
      #
      # func()

      # x = 10
      # def func():
      #     x = 8
      #     print(x)
      #     def x1():
      #         x = 999
      #         print(x)
      #     x1()
      #     print(x)
      #
      # func()


      # x = 10
      # def func():
      #     x = 8
      #     print(x)
      #     def x1():
      #         print(x)
      #     x1()
      #     print(x)
      #
      # func()



      # x = 10
      # def func():
      #     x = 8
      #     print(x)
      #     def x1():
      #         print(x)
      #     x = 9
      #     x1()
      #     x = 10
      #     print(x)
      #
      # func()

    总结

    • 参数

      • 调用(执行)函数时,传参:位置参数 > 关键字参数

      • 定义函数:

        • def func(a)

        • def func(a,b=None) # 对于默认值,如果是可变类型,----> 坑。

        • def func(*args,**kwargs)

    • 作用域

      • 函数为作用域

      • 自己 > 父级 > 父级 > 全局 【读/修改(可变)】

      • 重新赋值:

        • global 全局

        • nonlocal 外层

  • 相关阅读:
    如何解决列表框控件宽度不够的问题
    在windows Forms程序里面实现文件上传
    TFS的一些信息
    百钱百鸡问题
    如何移动SQL SERVER的系统数据库
    数据分页技术
    如何在报表中直接使用数据库中存储的图片
    重新注册MSJetOledb 4.0引擎
    2007 Microsoft Office Servers 已知问题/自述文件
    使用For XML与XSL(XSLT)配套快速输出查询结果到Web页面
  • 原文地址:https://www.cnblogs.com/bigox/p/10683034.html
Copyright © 2011-2022 走看看