dir()和vars()区别

>>> class a:
... foo=100
  File "<stdin>", line 2
    foo=100
      ^
IndentationError: expected an indented block
>>> class a:
...     foo=100
...     def funcr(a,b)
  File "<stdin>", line 3
    def funcr(a,b)
                 ^
SyntaxError: invalid syntax
>>> class a:
...     foo=100
...     def fufnc(a,b):
...             return  a+b
... 
>>> dir(a)
['__doc__', '__module__', 'foo', 'fufnc']
>>> vars(a)
{'fufnc': <function fufnc at 0x7f36c560faa0>, '__module__': '__main__', 'foo': 100, '__doc__': None}
>>> type(a)
<type 'classobj'>
>>> b=a()
>>> dir(b)
['__doc__', '__module__', 'foo', 'fufnc']
>>> vars(b)
{}
>>> class c(object):
...     fooo=200
... 
>>> dir(a)
['__doc__', '__module__', 'foo', 'fufnc']
>>> dir(c)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fooo']
>>> vars(c)
<dictproxy object at 0x7f36c5626830>
>>> c.__dict__
<dictproxy object at 0x7f36c5626328>
>>> d=c()
>>> dir(d)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fooo']
>>> vars(d)
{}
>>> d.__dict__
{}
>>> a.__dict__
{'fufnc': <function fufnc at 0x7f36c560faa0>, '__module__': '__main__', 'foo': 100, '__doc__': None}
>>> b.__dict__
{}
>>> 

---


>>> vars()
{'a': <class __main__.a at 0x7f36c56186b0>, 'c': <class '__main__.c'>, 'b': <__main__.a instance at 0x7f36c5627a28>, 'd': <__main__.c object at 0x7f36c56253d0>, 'di': {}, '__builtins__': <module '__builtin__' (built-in)>, 'value': {'a': 'WWWWWWWWWWW'}, 'li': [], 'i': '1', 'key': 'diii', '__name__': '__main__', '__package__': None, 'os': <module 'os' from '/usr/lib64/python2.6/os.pyc'>, '__doc__': None, 'diii': {'a': 'WWWWWWWWWWW'}}


>>> vars().items()
[('a', <class __main__.a at 0x7f36c56186b0>), ('c', <class '__main__.c'>), ('b', <__main__.a instance at 0x7f36c5627a28>), ('d', <__main__.c object at 0x7f36c56253d0>), ('di', {}), ('__builtins__', <module '__builtin__' (built-in)>), ('value', {'a': 'WWWWWWWWWWW'}), ('li', []), ('i', '1'), ('key', 'diii'), ('__name__', '__main__'), ('__package__', None), ('os', <module 'os' from '/usr/lib64/python2.6/os.pyc'>), ('__doc__', None), ('diii', {'a': 'WWWWWWWWWWW'})]


>>> print "\n".join(["%s=%s" %(key,value) for key,value in vars().items()])
a=__main__.a
c=<class '__main__.c'>
b=<__main__.a instance at 0x7f36c5627a28>
d=<__main__.c object at 0x7f36c56253d0>
di={}
__builtins__=<module '__builtin__' (built-in)>
value={'a': 'WWWWWWWWWWW'}
li=[]
_[1]=['a=__main__.a', "c=<class '__main__.c'>", 'b=<__main__.a instance at 0x7f36c5627a28>', 'd=<__main__.c object at 0x7f36c56253d0>', 'di={}', "__builtins__=<module '__builtin__' (built-in)>", "value={'a': 'WWWWWWWWWWW'}", 'li=[]']
i=1
key=diii
__name__=__main__
__package__=None
os=<module 'os' from '/usr/lib64/python2.6/os.pyc'>
__doc__=None
diii={'a': 'WWWWWWWWWWW'}
>>> 

### CLEAR_VARS 的作用与用法 `CLEAR_VARS` 是 Android 构建系统中的一个重要变量,主要用于清理模块构建过程中定义的各种局部变量。这些变量通常用于描述当前正在编译的模块的信息,例如源文件路径、目标名称等。 当在 `Android.mk` 文件中定义多个模块时,如果前一个模块设置了一些全局或局部变量,则可能会干扰后续模块的配置。因此,在每个新模块的定义之前,通过调用 `$(call clear-vars)` 来清除上一模块残留的变量是非常必要的[^1]。 以下是关于 `CLEAR_VARS` 的具体说明: #### 1. **功能** `CLEAR_VARS` 主要负责清空由 `LOCAL_XXX` 定义的一系列变量。这包括但不限于以下内容: - `LOCAL_MODULE` - `LOCAL_SRC_FILES` - `LOCAL_C_INCLUDES` - `LOCAL_STATIC_LIBRARIES` 这种机制可以防止不同模块之间的变量冲突,从而确保每个模块都能独立地进行配置编译。 #### 2. **典型用法** 在一个典型的 `Android.mk` 文件中,`CLEAR_VARS` 被用来初始化一个新的模块定义。下面是一个简单的例子来展示它的实际应用: ```makefile include $(CLEAR_VARS) LOCAL_MODULE := my_module_name LOCAL_SRC_FILES := src/main.c LOCAL_CFLAGS += -DDEBUG=1 include $(BUILD_EXECUTABLE) ``` 在这个例子中,`$(CLEAR_VARS)` 清除了之前的任何模块可能遗留下来的变量,使得新的模块能够干净地重新定义自己的属性。 #### 3. **注意事项** 尽管 `CLEAR_VARS` 可以帮助开发者避免重复声明某些变量带来的错误,但它并不会重置像 `MY_DIR` 这样的特殊宏。这是因为它们的设计初衷就是保持不变以便在整个构建流程中被多次使用。 另外需要注意的是,所有的路径应当相对于顶层 NDK 目录指定;也就是说,如果你有如下结构的话: ``` sources/foo/Android.mk sources/bar/Android.mk ``` 那么你应该按照相对应的方式去设定各个子目录下的资源位置[^2]。 最后值得一提的是,在调整第三方库或者工具链内部使用的 Makefiles (比如 bsdiff 中涉及的部分),也需要留意特定条件语句如 `.ifndef WITHOUT_MAN ... endif` 的缩进情况是否正确无误[^3]。 综上所述,理解并合理运用 `CLEAR_VARS` 对于维护复杂的多模块项目至关重要。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值