• 第二十四章 高级模块话题


    #1.
    #A:定义变量的时候,将_放置于变量前,可以防止客户端使用from *语句导入模块名时候,把其中那些变量名复制进去
    #B:下划线声明并不类似于模块的私有声明,仍然可以通过import或者使用from指定名称的形式来看见并修改这类变量名
    #C:可以在模块顶层把变量名的字符串列表赋值给变量__all__,则from *语句只会把列在__all__列表中的名字复制出来
    #D:__all__列表和_放置于变量前一样,只对from *有效
    
    #2.
    #A:__name__和__main__:
    #  如果文件是以顶层程序文件执行,在启动时,__name__就会设置为字符串"__main__"
    #  如果文件被导入,__name__就会被设置为模块名
    
    #3.
    #A:import和from中使用as扩展
    '''
    import Test as T
    from Test import value as v
    '''
    
    #4.
    #A:得到模块的属性的方法
    #B:内置函数getattr用于得到模块的属性
    import sys
    import Test0
    value0 = Test0._value                   #value0 = 'Test'
    value1 = Test0.__dict__['_value']       #value1 = 'Test'
    value2 = sys.modules['Test0']._value    #value2 = 'Test'
    value3 = getattr(Test0, '_value')       #value3 = 'Test'
    
    #5.
    #A:用名称字符串导入模块,可以使用exec()
    #B:使用__import__运行模块对象
    #C:Exec与Eval语句的主要区别是,Exec处理字符串里面的代码,而Eval是处理字符串里面的表达式
    str = "Test0"
    #import str                             #会报错
    exec("import " + str + " as T")
    #eval("import " + str + " as T")        #会报错
    value = T._value                        #value = 'Test'
    
    T0 = __import__(str)
    value = T0._value                       #value = 'Test'
    
    v0 = exec("print(10 + 20)")             #v0 = None
    v1 = eval("print(10 + 20)")             #v1 = None
    
    v0 = exec("10 + 20")                    #v0 = None
    v1 = eval("10 + 20")                    #v1 = 30
    
    #6.
    #A:存在模块A,并且A导入了模块B,C,当对A进行reload的时候,A中导入B和C的语句会重新运行,但是只会获取已经载入的B和C的模块对象
    '''
    A.py:
    import B
    import C
    
    def funA():
        return valueA, B.valueB, C.valueC
    
    valueA = 'a'
    
    B.py:
    valueB = 'b'
    
    C.py:
    valueC = 'c'
    '''
    import A
    value = A.funA()                        #value = ('a', 'b', 'c')
    
    '''
    将3个模块中的变量都置为对应的大写
    '''
    from imp import reload
    reload(A)
    value1 = A.funA()                       #value1 = ('A', 'b', 'c')
    
    '''
    将A.py修改为:
    import B
    import C
    
    def funA():
        return valueA, B.valueB, C.valueC
    
    valueA = 'A'
    
    import types
    from imp import reload
    
    def FunReload(moudle, dict0):
        if not moudle in dict0:
            reload(moudle)
            str = moudle.__name__
            dict0[moudle] = None
            for value in moudle.__dict__.values():
                if type(value) == types.ModuleType:
                    FunReload(value, dict0)
    
    def reload_all(*args):
        dict0 = {}
        for arg in args:
            if type(arg) == types.ModuleType:
                FunReload(arg, dict0)
    '''
    
    A.reload_all(A)
    value2 = A.funA()                       #value2 = ('A', 'B', 'C')
    

      

  • 相关阅读:
    Oracle EBS订单的流程(Order>AR)
    ORA12547: TNS:lost contact
    Shipping lock fix –> WSH_DELIVERY_DETAILS Column has leading or trailing spaces
    PLSQL 操作 ORACLE 服务器上的文件
    ORACLE EBS 11i常见问题
    solr 查询解析流程
    spring管理servlet的利器SimpleServletHandlerAdapter
    Solr Cache使用介绍及分析
    solr 自定义 dismax查询方式
    spring2中jpa的配置和使用
  • 原文地址:https://www.cnblogs.com/szn409/p/6729766.html
Copyright © 2020-2023  润新知