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

判断变量是否定义

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

# 如果C有值就取C,否则自定义为8
a = 8 if not c else c
Traceback (most recent call last):
  File "", line 1, in 
    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__': , '__spec__': None, '__name__': '__main__', '__loader__': }
>>> 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判断变量是否定义)