美文网首页
[基础]Python判断变量是否定义

[基础]Python判断变量是否定义

作者: Coffen | 来源:发表于2016-06-01 18:30 被阅读0次

    判断变量是否定义

    参考:
    python中检测某个变量是否有定义
    dir介绍
    你是否会碰到如下情形:

    # 如果C有值就取C,否则自定义为8
    a = 8 if not c else c
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in <module>
        a = 8 if not c else c
    NameError: name 'c' is not defined
    

    呵呵,结果,发现c未定义,not defined,不是None

    碰到这种问题该怎么解决呢?

    目前判断变量有二种方式:

    1. 一般方式:try···except
    try:
        a = 8 if not c else c
    except:
        a = 8
    
    1. dir() /local()判断
      我们先来看看IDLE 上他们的表现
    Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
    [GCC 4.8.4] on linux
    Type "copyright", "credits" or "license()" for more information.
    >>> dir()
    ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
    >>> locals()
    {'__doc__': None, '__package__': None, '__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__name__': '__main__', '__loader__': <class '_frozen_importlib.BuiltinImporter'>}
    >>> locals().key()
    dict_keys(['__doc__', '__package__', '__builtins__', '__spec__', '__name__', '__loader__'])
    

    我需要判断变量是否在name

    # local() 方式就不介绍了,本质一样
    a = 8 if not 'c' in dir() or not c else 8
    
    # 查看一下dir()
    ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a']
    
    

    dir()介绍

    中文说明:不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。
    参数object: 对象、变量、类型。
    版本:该函数在python各个版本中都有,但是每个版本中显示的属性细节有所不同。使用时注意区别。

    代码示例:

    >>> dir()
    ['__builtins__', '__doc__', '__name__', '__package__']
    >>> import struct
    >>> dir()
    ['__builtins__', '__doc__', '__name__', '__package__', 'struct']
    >>> dir(struct)
    ['Struct', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into', 'unpack', 'unpack_from']
    >>> class Person(object):
    ...     def __dir__(self):
    ...             return ["name", "age", "country"]
    ...
    >>> dir(Person)
    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__','__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
    >>> tom = Person()
    >>> dir(tom)
    ['age', 'country', 'name']
    

    相关文章

      网友评论

          本文标题:[基础]Python判断变量是否定义

          本文链接:https://www.haomeiwen.com/subject/lpbhdttx.html