說反射之前先介紹一下__import__方法,這個和import匯入模組的另一種方式
1. import commons2. __import__('commons')
如果是多層匯入:
1. from list.text import commons2. __import__(' list.text.commons',fromlist=true) #如果不加上fromlist=true,只會匯入list目錄
例項:
# lib - commons.pyname = 'maria'
def f1():
return "f1"
def f2():
return "f2"
def f3():
return "f3"
****************************
# index.py
moudle = __import__('lib.commons',fromlist=true)
ret = moudle.f1()
print(ret)
# f1
反射即想到4個內建函式分別為:getattr、hasattr、setattr、delattr 獲取成員、檢查成員、設定成員、刪除成員下面逐一介紹先看例子:
moudle = __import__('lib.commons',fromlist=true)# 獲取成員
ret = getattr(moudle,'f1',none) # 可以設定預設值,沒找到時 ret = none
print(ret)
# # 獲取全域性變數:
ret = getattr(dd,"name",none)
# 檢查成員
ret = hasattr(moudle,'f11') # 因為有f1方法所以返回true
print(ret)
# 設定成員
setattr(moudle,"age",18) # 記憶體中建立了乙個全域性變數
ret = getattr(moudle,'age',none)
print(ret)
setattr(moudle,"add",lambda a: a +1 ) # 記憶體中建立了乙個函式
ret = getattr(moudle,'add',none)
print(ret(100))
# 刪除成員
delattr(moudle,'f3')
ret = hasattr(moudle,'f3')
print(ret)
對於反射小節:
反射:# 根據字串的形式去某個模組中尋找東西
# 根據字串的形式去某個模組中判斷東西是否存在
# 根據字串的形式去某個模組中設定東西
# 根據字串的形式去某個模組中刪除東西
# 根據字串的形式去物件 (某個模組) 中操作成員
結論:1.根據字串的形式匯入模組。
2.根據字串的形式去物件(某個模組)中操作其成員
實現思路:規定使用者輸入格式 模組名/函式名 通過__import__的形式匯入模組並通過 hasattr和getattr 檢查並獲取函式返回值。
# lib - commons.pydef login():
return 'login'
def logout():
return 'logout'
********************************
# index.py
target_url = input('請輸入url:')
target_module,target_func =target_url.split('/')
moudle = __import__('lib.'+target_module,fromlist=true)
if hasattr(moudle,target_func) == true:
func = getattr(moudle,target_func)
ret = func()
print(ret)
else :
print('404 not found!')
Python之路 特別篇 Python切片
切片操作符是序列名後跟乙個方括號,方括號中有一對可選的數字,並用冒號分割。注意 數是可選的,而冒號是必須的。consequence start end step 切片操作符中的第乙個數 冒號之前 表示切片開始的位置,第二個數 冒號之後 表示切片到 結束,第三個數 冒號之後 表示切片間隔數。如果不指定...
python 協程之特別篇
python通過yield提供了對協程的基本支援,但是不完全。而第三方的gevent為python提供了比較完善的協程支援。gevent是第三方庫,通過greenlet實現協程,其基本思想是 當乙個greenlet遇到io操作時,比如訪問網路,就自動切換到其他的greenlet,等到io操作完成,再...
小猿日記(5) 520特別篇
今天就不聊啥工作,啥日常了。工作 敲鍵盤 日常 睡大覺 健身 早上吃大豆包子,喝著紅豆鮮奶。手敲鍵盤,眼觀螢幕,心繫佳人。遇見了你 星星開始閃爍 陽光也是橙子的芬香 微風輕撫 想象是與你遊覽春光 聽自然的妙不可言 徜徉於原野之間嬉笑 因為是你 我看見了未來 那是在你眼中 我才看見了自己的美麗 無聲無...