eval函式危險性
evel作用邏輯
函式動態的意義除了一些安全攻防
更多的意義則是提供了可迭代的函式方法,譬如讓函式根據環境變化進行自我迭代
x =
10def
func()
: y =
20 a =
eval
('x + y'
)print
('a: '
, a)
b =eval
('x + y',)
print
('x: '
+str
(x)+
' y: '
+str
(y))
print
('b: '
, b)
c =eval
('x + y',,
)print
('x: '
+str
(x)+
' y: '
+str
(y))
print
('c: '
, c)
func(
)
evel 只能做一次函式內的計算不能傳出所以需要乙個變數名來接收計算結果
x =
11exec
('y = x*2'
)print
(y)
exec 則不同於evel 即可傳入也可傳出
它不能做表示式求值並返回出去,但是它可以執行複雜的**邏輯,相對而言功能更加強大,例如,當**塊中賦值了新的變數時,該變數可能 在函式外的命名空間中存活下來
from types import functiontype
import requests
string =
'def foo(): bar = requests.get(\'').text ;return bar',""
,"exec"
foo_code =
compile
(string[0]
,string[1]
,string[2]
)foo_func = functiontype(foo_code.co_consts[0]
,globals()
,"foo"
)print
(foo_func(
))
compile函式則是另一種實現方式
一下是動態函式在request請求中列印狀態返回的例項
–>
import requests
defrequests_log
(self)
: path_of_html =
"/users/manmanzhang/downloads/net_work/analysis_str/pycharm_html.html"
path_of_log =
"/users/manmanzhang/downloads/net_work/analysis_str/pycharm_headers.log"
url =
''now = time.time(
) respones = requests.get(url)
print
(time.time(
)- now)
log_of_date =
format
(datetime.datetime.now())
src =
''' ,respones.text
,respones.status_code
,respones.reason
,respones.headers
,respones.cookies
,respones.elapsed
,respones.history
,respones.encoding
,respones.content
,respones.is_permanent_redirect
,respones.is_redirect
,respones.links
,respones.next
,respones.ok
,respones.raw
,respones.request
,respones.__doc__
,_module_:respones.__module__
,'''
now = time.time(
) code_list = re.findall(r'respones.(.*)\n'
, src)
log_of_respones =
[[code,
eval
('respones.'
+ code)
]for code in code_list]
print
(log_of_respones)
print
(time.time(
)- now)
web =
open
(path_of_html,
'a+'
) logs =
open
(path_of_log,
'a+'
)for log in log_of_respones:
if log[0]
!='text'
: web.write(
str(
[url, log_of_date, log])+
'\n'
)else
: logs.write(
str(
[url, log_of_date, log])+
'\n'
) web.close(
) logs.close(
)print
(time.time(
)- now)
C語言動態函式呼叫
在遠端呼叫中,伺服器在收到請求後,需要通過查符號的手段,獲取函式指標,然後呼叫客戶端請求的函式。然而,不同函式引數個數 型別皆不相同,函式指標在定義時就需要明確型別,因此,沒有一種定義,可以滿足所有函式的呼叫。最先想到的是參考目前專案中控制台手動輸入函式時的實現方式,即tpf庫的實現。tpf庫在查詢...
Python day 10 函式高階 動態函式
1 位置引數 2 預設值引數 3 動態引數 1 args 位置引數的動態傳參。系統會自動的把所有的位置引數聚合成元組 2 kwargs 關鍵字引數的動態傳參。系統會自動的把所有的關鍵字引數聚合成字典 3 def func args,kwargs 無敵引數 pass 4 順序 位置引數,args,預設...
靜態函式庫與動態函式庫的設計
函式庫存放位置 linux應用程式使用的主要函式均放在 lib和 usr lib目錄下,其中採用 so.命名的是動態函式庫,而以 a方式命名的是靜態函式庫。靜態函式庫的特點 程式所要用到的庫函式 在鏈結時全部被copy到程式中。導致的問題 如果有多個程序在記憶體中同時執行,並且使用了相同的函式庫,那...