• python函数进阶


    一、函数参数类型

    不可变类型参数:整数、字符串、元组。 fun(a)内部修改 a的值,只是修改另一个复制的对象,不会影响 a 本身。 可变类型:列表,字典。如 fun(la), 则是将 la 真正的传过去,修改后fun外部的la也会受影响 1、传递不可变类型参数,不会影响参数本身。
    在这里插入图片描述
    2、传递可变类型参数,会影响参数本身。

    在这里插入图片描述

    二、命名空间

    命名空间指的是保存程序中的变量名和值的地方。命名空间的本质是一个字典, 用来记录变量名称和值。字典的key是变量的名称,字典的value对于的是变量的 值。 例如 {‘name’:’zs’,’age’:10} 命名空间一共分为三种:局部命名空间、全局命名空间、内置命名空间 局部空间: 每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数 的参数 和局部定义的变量 全局空间: 每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包 括函数、 类、其它导入的模块。 内置名称空间: 任何模块均可访问它,它存放着内置的函数和异常。

    1. 命名空间的访问
      局部名称空间使用 locals() 函数来访问 全局命名空间的访问使用globals()函数访问。
      在这里插入图片描述
      全局命名空间:
      在这里插入图片描述
    2. 命名空间加载顺序
      内置命名空间(程序运行前加载)­>全局命名空间(当程序运行的时候加载全局命名 空间)­>局部命名空间(程序运行中:函数被调用时才加载)当函数返回结果 或 抛 出异常时,被删除。每一个递归调用的函数都拥有自己的命名空间。
      在这里插入图片描述
    3. 命名空间查找顺序
      当使用某个变量的时候,先从局部命名空间中找,如果能找到则停止搜索,如果 找不到在去全局名称空间中查找,如果找到则停止搜索,如果找不到则到内置名 称空间中查找,如果找不到则报错。
      在这里插入图片描述
      嵌套函数的情况:
      1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索
      2、然后是在父函数的命名空间中搜索
      3、接着是模块命名空间中搜索
      4、最后在内置命名空间中搜索

    三、作用域

    作用域指的是变量在程序中的可应用范围。
    作用域按照变量的定义位置可以划分为4类即LEGB:
    Local(函数内部)局部作用域。
    Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)。
    Global(模块全局)全局作用域。
    Built­in(内建)内建作用域。(指的是builtins.py模块)

    在这里插入图片描述

    a = 10 
    def father():
    	b = 20
    	def son():
    		c = 30
    		prin(a,b,c,id) #G C L E
    	son()
    father()
    

    Python内层作用域访问外层作用域时的顺序: Python搜索4个作用域[本地作用域(L)之后是上一层结构中def或者lambda的本 地作用域(E),之后是全局作用域(G)最后是内置作用域(B)(即python的内置类和 函数等)] 并且在第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程 中都没有找到,Python就会报错。
    在这里插入图片描述
    注意: 在python中,模块(module),类(class)、函数(def、lambda)会产生新 的作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断 (if……else)、循环语句(for x in data)、异常捕捉(try…catch)等的变量是 可以全局使用的。
    在这里插入图片描述

    四、全局变量和局部变量

    在函数中定义的变量称为局部变量,只在函数内部生效, 在程序一开始定义的变量称为全局变量,全局变量的作用域是整个程序。

    name = 'zs' #全局变量
    def s():
    	age = 10 #局部变量
    

    在这里插入图片描述

    global和nonlocal关键字

    1、global关键字可以将局部变量变成一个全局变量。 格式: global 变量名称。
    2. nonlocal关键字可以修改外层(非全局)变量。

    命名空间和作用域的关系

    命名空间定义了在某个作用域内变量名和绑定值之间的对应关系,命名空间是键 值对的集合,变量名与值是一一对应关系。 作用域定义了命名空间中的变量能够在多大范围内起作用。

    匿名函数与内置函数

    # Encoding = utf-8
    # Auther:Xiao le
    _date_ = "2019/12/11 17:56"
    '''加法'''
    add = lambda x,y :x + y
    '''找最大'''
    dic = {"k1":10,"k2":100,"k3":30}
    print(max(dic.items(),key=lambda a:a[1]))
    '''找最大'''
    students = [{"name":"zs","age":21},
                {"name":"ls","age":20},
                {"name":"ww","age":19}]
    students = dict(students)
    a = int(input())
    b = students['age'==a]
    print(b)
    '''返回平方'''
    lst = [1,2,3,4,5,6]
    print(list(map(lambda s:s**2,lst)))
    '''返回奇数'''
    lst = [1,2,3,4,5,6,7,8,9]
    print(list(filter(lambda n : n%2==1,lst)))
    '''映射'''
    a = ('a'),('b')
    b = ('c'),('d')
    l = lambda x,y: dict(zip(x,y))
    print(l(a,b))
    
    
    爱,就是你和某个人一起经历的一切。
  • 相关阅读:
    给伪类设置z-index= -1;
    UITextView的字数限制 及 添加自定义PlaceHolder
    UIView 翻转动画
    viewController的自动扩展属性导致TableViewGroupStyle时向上填充
    指针属性直接赋值 最好先retain 否则内存释放导致crash
    UIButton 点击后变灰
    IOS 设置透明度导致底层View始终可见
    UIDatePicker 时间选择器
    放大Button热区的方法哟
    数组套字典排序
  • 原文地址:https://www.cnblogs.com/afly-8/p/13561152.html
Copyright © 2020-2023  润新知