1. 程式人生 > >Python技巧——根據函式名獲得函式物件

Python技巧——根據函式名獲得函式物件

有時我們需要將一個檔案的資訊(類、函式及變數)儲存到檔案,我們不能直接儲存函式物件,而是將其轉化為fn.__name__,問題來了,當我們想通過讀取檔案的形式重新配置這些類、函式時,該如何把這些字串轉換為對應的函式物件呢?

# test.py
import sys
def fn():
    print('hello world')
func_name = fn.__name__
fn_obj = getattr(sys.modules[__name__], func_name)
            # 根據函式名(func_name),獲得函式物件
fn_obj()
            # hello world
print(sys.modules[__name__])
    # <module '__main__' from '**/test.py'>

檢視getattr的doc,

getattr(object, name[, default]) -> value. Get a named attribute from an object; getattr(x, ‘y’) is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn’t exist; without it, an exception is raised in that case.

所以,getattr(sys.modules[__name__], func_name)的含義便是找到當前檔案下名稱為func_name的物件(類物件或者函式物件)。

相關推薦

Python技巧——根據函式獲得函式物件

有時我們需要將一個檔案的資訊(類、函式及變數)儲存到檔案,我們不能直接儲存函式物件,而是將其轉化為fn.__name__,問題來了,當我們想通過讀取檔案的形式重新配置這些類、函式時,該如何把這些字串轉換

python 根據例項化物件

方法一: class obj(object):        pass   a = eval('obj()') 方法二: 如果是經常需要這樣可以 #將用來建立物件的字串預編譯成code物件. create_obj = compile('obj()',

iOS開發筆記--Objective-C中根據函式呼叫函式

Objective-C中呼叫函式的方法是“訊息傳遞”,這個和普通的函式呼叫的區別是,你可以隨時對一個物件傳遞任何訊息,而不需要在編譯的時候宣告這些方法。所以Objective-C可以在runtime的時候傳遞訊息。 主要用到:SEL和@selector,當然還有perf

C++實現反射(根據動態建立物件)

   和網上大多數實現一樣,這裡也是採用工廠方法來實現物件的動態建立。大致原理為,建立一個單例工廠類,其中維護一個map(類名->物件建立函式)。建立物件時,傳入類名,然後根據此類名查詢出建立函式,最後建立物件。     採用這種方式,有一

根據計算機獲得IP,和根據IP獲得主機(轉)

Option Explicit'// define constantsPrivate Const IP_SUCCESS As Long = 0Private Const SOCKET_ERROR As Long = -1Private Const MAX_WSADescrip

C++函式函式指標

函式名與函式指標一 通常的函式呼叫    一個通常的函式呼叫的例子://自行包含標頭檔案void MyFun(int x);    //此處的申明也可寫成:void MyFun( int );int main(int argc, char* argv[]){   MyF

函式函式引數

先解釋void (*func)(int): void func()->void func(int)->void *func(int)->void (*func)(int) 上面的圖示能看明白吧?func是一個函式指標,它的返回型別為void,它所指向的函式接收一個int型的引數。若是寫成vo

函式型別,函式函式指標嗎,函式的強制型別轉換

     2      3  typedef int (*funcptr)();      4      5  int func_ptr1(){      6          printf("func_ptr1 is called!\n");      7          return 1;      8

php手機號碼驗證--函式jqueryvalidate 函式

直接原始碼 function is_mobile($str){ if(preg_match("/1[3458]{1}\d{9}$/",$str)){ return true; } e

函式函式指標

一 通常的函式呼叫    一個通常的函式呼叫的例子://自行包含標頭檔案void MyFun(int x);    //此處的申明也可寫成:void MyFun( int );int main(int argc, char* argv[]){MyFun(10);     /

python之路--第一類物件,函式,變數

函式物件可以像變數一樣進行賦值 , 還可以作為列表的元素進行使用 可以作為返回值返回 , 可以作為引數進行傳遞 def func(): def people(): print('金_卡戴珊') print('oh,yes!') prin

python之路---11 第一類物件 函式 閉包 迭代器

二十九.   1.函式名的運用      ①函式名是⼀個變數, 但它是⼀個特殊的變數, 與括號配合可以執⾏函式的變數    ②函式名是一個記憶體地址      ③ 函式名可以賦值給其他變數           &nbs

python中的可迭代物件和迭代器(iter函式和next函式

iter函式: 獲取可迭代物件身上的迭代器, 會呼叫可迭代物件身上的iter的方法 next函式: 獲取迭代器中的下一個值,會呼叫迭代器物件身上的next的方法 from collections import Iterable from collections im

Python記錄7:函式3,函式物件

#函式物件指的是:函式的記憶體地址可以像變數值一樣去使用,如何使用?def func(): print('from func')#1. 可以被引用# f=func# print(f)# f()#2. 可以當做引數傳給另外一個函式# def bar(x):# # print(x)# x()# bar(fu

第一類物件-> 函式 -> 變數

函式物件物件可以像變數一樣進行賦值 還可以作為列表的元素進行使用 可以作為返回值返回 可以作為引數進行傳遞 # def fn(): # print("我叫fn") # fn() # print(fn) # <function fn at 0x0000000001D12E18>

python函式之第一類物件

目錄 python函式之第一類物件 python函式之第一類物件 第一類物件(英語:First-class object)在電腦科學中指可以在執行期創造並作為引數傳遞給其他函式或存入一個變數的實體。將一個實體變為第一類物件的過程叫做“物件化”(Reification)。

如何正確理解Python函式是第一類物件

之前寫過一篇關於裝飾器的文章,雖然寫得還算不錯,但是也有不少同學表示沒看懂,我大概分析了其中的原因,主要問題是他們不理解函式,因為Python中的函式不同於其它語言。 正確理解 Python函式,能夠幫助我們更好地理解 Python 裝飾器、匿名函式(lambda)、函數語言程式設計等高

1 python 函式、陣列、物件的使用方法

目錄 1 函式 2 陣列 3  物件 1 函式 # 我們將函式視為機器,接受輸入,做一些工作,然後彈出輸出 # 案例: def avg(x,y):     print("first input is", x)    

第一類物件 函式 變數

第一類物件 --> 函式名 --> 變數名 函式物件可以像變數一樣進行賦值 還可以作為列表的元素進行使用 可以作為返回值返回 可以作為引數進行傳遞   閉包-->函式的巢狀 內層函式對外層函式中的變數的使用 好處:    1.保護變數不被侵害    

python 獲取當前函式函式 sys._getframe().f_code.co_name

# -*- coding:utf-8 -*- import sys class test_class(): def hello(self): print(sys._getframe().f_code.co_name) def hello_wor