[基礎]Python判斷變量是否定義

判斷變量是否定義

參考:
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']
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,172評論 6 13
  • 前言 ||| 第二章 使用ArcPy編寫腳本 Python支持大部分在其他語言中出現的編程結構。在本章內容中,我們...
    muyan閱讀 90,224評論 10 55
  • 定義類并創建實例 在Python中,類通過 class 關鍵字定義。以 Person 為例,定義一個Person類...
    績重KF閱讀 3,976評論 0 13
  • 忙里偷閑,就又把紅樓夢翻將出來看看。這一次看紅樓夢看到的不是一個人一味的好,卻也不是一味的壞。曹公把紅樓夢里微小的...
    小金帽閱讀 611評論 0 2
  • 我哥傅立本是我見過智商最高的人。 他從幼兒園領小紅花到一路全額獎學金上了名校,學習對于他來講簡直就像快刀切豆腐一樣...
    傅立葉閱讀 2,191評論 7 5