zoukankan      html  css  js  c++  java
  • 函数 / 命名空间 / 闭包

    三元运算符

    def my_max(a,b):
        return a if a>b else b     #当a>b成立返回a,否则返回b

    参数:

    实参 : 1.位置参数 2. 关键字参数 3. 混合参数

    形参 : 1.位置参数 2. 默认值参数  

    动态传参:

    1. 动态接收位置参数

    def func(a, b, *arg):    #动态接受参数是:动态参数必须在位置参数之后
        pass     

    2.接收默认值参数

    def fruit(a, b, c='apple', *food): 
        pass

    三种参数顺序 : 位置参数, 动态参数*, 默认值参数 

    3.动态接受关键词参数

    def func(**kwargs):
        pass
    func(a=1, b=2, c=3) 
    func(a=1, b=2) 

    最终顺序(*):    位置参数 >  *args > 默认值参数 > **kwargs

    命名空间(存储变量)

    分类

    1.全局命名空间  → 直接在py文件中,函数外声明的变量都属于全局命名空间

    2.局部命名空间  → 在函数中声明的变量会放在局部命名空间

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

    取值顺序:

      1.局部命名空间

      2.全局命名空间

      3.内置命名空间

    作用域(作用范围)

    分类

    1.全局作用域 : 全局命名空间 + 内置命名空间

    2.局部作用域 : 局部命名空间 

    globals()   # 打印全局作用域中的内容

    locals()    #打印局部作用域中的内容

    global 和 nonlocal

    global表示不再使用局部作用域的内容,而改用全局作用域中的变量

    a = 100 
    def func():   
        global a    #可以修改全局变量a,仅限当前函数使用
        a = 28    
        print(a) 
    
    func() 
    print(a)    # ===>>28   28

    nonlocal表示在局部作用域中,调用父级命名空间的变量

    函数名的运用

    1.函数名的内存地址 print(func)   ==>   <function func at 0x1101e4ea0>

    2.函数名可以赋值给其他变量

    3.函数名可以当做容器类的元素

    4.函数名可以当做函数的参数

    5.函数名可以作为函数的返回值

    闭包 内层函数,对外层函数(非全局)的变量的引用

    def outer():    
        name = "Amy"    
        # 内部函数    
        def inner():        
            print(name)    
        return inner   #外部函调用内部函数
        
    fn = outer()   # 访问外部函数, 获取到内部函数的函数地址
    fn()    

    闭包好处: 在外界可以访问内部函数; 内部函数访问了外层函数的变量.这个变量将会常驻内存,供后面的程序使用

    from urllib.request import urlopen
    def web_content():
        content = urlopen('https://tieba.baidu.com/').read().decode("utf-8")
        def get_content():
            return content     #储存content的内容,方便后续使用
        return get_content
    
    fn = web_content()
    content = fn()
    print(content)
  • 相关阅读:
    pychram 2018-01 安装pyQT5报错
    pyqt 8行内就可以跑一个浏览器
    sql server无log ldf日志文件附件mdf数据库重新生成ldf日志文件
    解决Specifying a namespace in include()withou providing an app_name
    Java 连接池的工作原理(转)
    使用from __future__ import unicode_literals时要注意的问题
    详细介绍Redis的几种数据结构以及使用注意事项(转)
    再谈Redis应用场景(转)
    Redis的LRU机制(转)
    深入理解Redis主键失效原理及实现机制(转)
  • 原文地址:https://www.cnblogs.com/gracenana/p/10197826.html
Copyright © 2011-2022 走看看