導航:首頁 > 編程語言 > python神奇函數eval

python神奇函數eval

發布時間:2022-04-24 07:57:34

㈠ eval在python中的意思

eval是Python的一個內置函數,這個函數的作用是,返回傳入字元串的表達式的結果。即變數賦值時,等號右邊的表示是寫成字元串的格式,返回值就是這個表達式的結果。

eval()函數用來執行一個字元串表達式,並返回表達式的值,還可以把字元串轉化為list、tuple、dict。eval函數的語法:eval(expression[,globals[,locals]])。

(1)python神奇函數eval擴展閱讀:

如果eval函數在執行時遇到錯誤,則拋出異常給調用者;類似的函數是loadcode,loadcode並不立即執行代碼,而是返回一個函數對象。並且loadcode支持路徑參數,eval並不支持,eval並不支持代碼中的return語句,而是將代碼作為表達式直接計算出結果。

例如:

var d = eval("({name:'chentong'})")

alert(d.name);

㈡ python當中的eval()函數是起什麼作業的

在python中,eval()是評估函數,用處是去掉最外層引號,然後進一步處理

解釋:python中 input()默認錄入的是字元串類型

如果用戶輸入了123,其實讀取的是字元串"123"

這時候需要eval(input())來獲取整數123,才能進行進一步的計算

之所以說eval()用處是去掉最外層引號是因為,

舉例說明吧,

eval("'你好'")#會輸出字元串"你好"
eval("print("WOW")")#經過評估函數處理之後會輸出字元串"WOW"

㈢ python當中的eval()函數是起什麼作用

eval函數將字元串當成有效Python表達式來求值,並返回計算結果
x
=
1eval('x+1')eval('x==1')與之對應的repr函數,它能夠將Python的變數和表達式轉換為字元串表示
repr(x==1)repr(x+1)

㈣ eval()函數的作用是什麼

python當中的eval()函數是將字元串當成有效Python表達式來求值,並返回計算結果

x = 1

eval('x+1')

eval('x==1')

與之對應的repr函數,它能夠將Python的變數和表達式轉換為字元串表示

repr(x+1)

repr(x+ 『1』-1)('x=+=1')

函數說明

如果eval函數在執行時遇到錯誤,則拋出異常給調用者。

類似的函數是loadcode ,loadcode並不立即執行代碼,而是返回一個函數對象。

並且loadcode支持路徑參數,eval並不支持。 eval並不支持代碼中的return語句,而是將代碼作為表達式直接計算出結果。

㈤ python的eval是什麼

用於計算表達式的值,它有個前提,Python代碼只能是單個運算表達式,它不支持任意形式的賦值操作,也不能是復雜的邏輯代碼。格式如下:
eval(expression,globals=None,local=None);
expression是必選參數,字元串、code對象實例都可以;
globals是可選參數,用於存放全局變數,如果使用,必須是一個字典對象;
locals同樣也是可選參數,用於存放局部變數,如果被使用,是映射對象就可以,如果不添加,那它會取與globals相同的數值,如果兩者都不添加,將取eval函數被調用環境下的全局命名空間和局部命名空間。

㈥ python中eval的用法

python中eval函數用法如下:

1、計算字元串中有效的表達式,並返回結果。

2、將字元串轉成相應的對象(如list、tuple、dict和string之間的轉換)。

3、將利用反引號轉換的字元串再反轉回對象。

函數作用域:eval()函數並不會創建一個新的作用域,並且它的作用域就是它所在的作用域,有時候需要將eval()函數的作用域設置為全局,當然可以將eval()在全局作用域中使用,這個時候可以用window.eval()的方式實現。


參數情況:

(1)如果參數是一個表達式,eval() 函數將執行表達式。

(2)如果參數是Javascript語句,eval()將執行 Javascript 語句。

注意:如果執行結果是一個值就返回,不是就返回undefined,如果參數不是一個字元串,則直接返回該參數。

㈦ Python 有什麼奇技淫巧

Python奇技淫巧
當發布python第三方package時, 並不希望代碼中所有的函數或者class可以被外部import, 在 __init__.py 中添加 __all__ 屬性,

該list中填寫可以import的類或者函數名, 可以起到限制的import的作用, 防止外部import其他函數或者類

#!/usr/bin/env python
# -*- coding: utf-8 -*-

frombaseimportAPIBase
fromclientimportClient
fromdecoratorimportinterface, export, stream
fromserverimportServer
fromstorageimportStorage
fromutilimport(LogFormatter, disable_logging_to_stderr,
enable_logging_to_kids, info)

__all__ = ['APIBase','Client','LogFormatter','Server',
'Storage','disable_logging_to_stderr','enable_logging_to_kids',
'export','info','interface','stream']

with的魔力

with語句需要支持 上下文管理協議的對象 , 上下文管理協議包含 __enter__ 和 __exit__ 兩個方法. with語句建立運行時上下文需要通過這兩個方法執行 進入和退出 操作.

其中 上下文表達式 是跟在with之後的表達式, 該表示大返回一個上下文管理對象
# 常見with使用場景
withopen("test.txt","r")asmy_file:# 注意, 是__enter__()方法的返回值賦值給了my_file,
forlineinmy_file:
print line

詳細原理可以查看這篇文章, 淺談 Python 的 with 語句

知道具體原理, 我們可以自定義支持上下文管理協議的類, 類中實現 __enter__ 和 __exit__ 方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-

classMyWith(object):

def__init__(self):
print"__init__ method"

def__enter__(self):
print"__enter__ method"
returnself# 返回對象給as後的變數

def__exit__(self, exc_type, exc_value, exc_traceback):
print"__exit__ method"
ifexc_tracebackisNone:
print"Exited without Exception"
returnTrue
else:
print"Exited with Exception"
returnFalse

deftest_with():
withMyWith()asmy_with:
print"running my_with"
print"------分割線-----"
withMyWith()asmy_with:
print"running before Exception"
raiseException
print"running after Exception"

if__name__ =='__main__':
test_with()

執行結果如下:
__init__ method
__enter__ method
running my_with
__exit__ method
ExitedwithoutException
------分割線-----
__init__ method
__enter__ method
running before Exception
__exit__ method
ExitedwithException
Traceback(most recent call last):
File"bin/python", line34,in<mole>
exec(compile(__file__f.read(), __file__, "exec"))
File"test_with.py", line33,in<mole>
test_with()
File"test_with.py", line28,intest_with
raiseException
Exception

證明了會先執行 __enter__ 方法, 然後調用with內的邏輯, 最後執行 __exit__ 做退出處理, 並且, 即使出現異常也能正常退出

filter的用法

相對 filter 而言, map和rece使用的會更頻繁一些, filter 正如其名字, 按照某種規則 過濾 掉一些元素
#!/usr/bin/env python
# -*- coding: utf-8 -*-

lst = [1,2,3,4,5,6]
# 所有奇數都會返回True, 偶數會返回False被過濾掉
print filter(lambda x: x % 2!=0, lst)

#輸出結果
[1,3,5]

一行作判斷

當條件滿足時, 返回的為等號後面的變數, 否則返回else後語句
lst = [1,2,3]
new_lst = lst[0]iflstisnotNoneelseNone
printnew_lst

# 列印結果
1

裝飾器之單例

使用裝飾器實現簡單的單例模式

# 單例裝飾器
defsingleton(cls):
instances = dict() # 初始為空
def_singleton(*args, **kwargs):
ifclsnotininstances:#如果不存在, 則創建並放入字典
instances[cls] = cls(*args, **kwargs)
returninstances[cls]
return_singleton

@singleton
classTest(object):
pass

if__name__ =='__main__':
t1 = Test()
t2 = Test()
# 兩者具有相同的地址
printt1, t2

staticmethod裝飾器

類中兩種常用的裝飾, 首先區分一下他們

普通成員函數, 其中第一個隱式參數為 對象
classmethod裝飾器 , 類方法(給人感覺非常類似於OC中的類方法), 其中第一個隱式參數為 類
staticmethod裝飾器 , 沒有任何隱式參數. python中的靜態方法類似與C++中的靜態方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-

classA(object):

# 普通成員函數
deffoo(self, x):
print "executing foo(%s, %s)"% (self, x)

@classmethod# 使用classmethod進行裝飾
defclass_foo(cls, x):
print "executing class_foo(%s, %s)"% (cls, x)

@staticmethod# 使用staticmethod進行裝飾
defstatic_foo(x):
print "executing static_foo(%s)"% x

deftest_three_method():
obj = A()
# 直接調用噗通的成員方法
obj.foo("para")# 此處obj對象作為成員函數的隱式參數, 就是self
obj.class_foo("para")# 此處類作為隱式參數被傳入, 就是cls
A.class_foo("para")#更直接的類方法調用
obj.static_foo("para")# 靜態方法並沒有任何隱式參數, 但是要通過對象或者類進行調用
A.static_foo("para")

if__name__=='__main__':
test_three_method()

# 函數輸出
executing foo(<__main__.Aobject at0x100ba4e10>, para)
executing class_foo(<class'__main__.A'>,para)
executing class_foo(<class'__main__.A'>,para)
executing static_foo(para)
executing static_foo(para)

property裝飾器

定義私有類屬性

將 property 與裝飾器結合實現屬性私有化( 更簡單安全的實現get和set方法 )
#python內建函數
property(fget=None, fset=None, fdel=None, doc=None)

fget 是獲取屬性的值的函數, fset 是設置屬性值的函數, fdel 是刪除屬性的函數, doc 是一個字元串(like a comment).從實現來看,這些參數都是可選的

property有三個方法 getter() , setter() 和 delete() 來指定fget, fset和fdel。 這表示以下這行
classStudent(object):

@property #相當於property.getter(score) 或者property(score)
defscore(self):
returnself._score

@score.setter #相當於score = property.setter(score)
defscore(self, value):
ifnotisinstance(value, int):
raiseValueError('score must be an integer!')
ifvalue <0orvalue >100:
raiseValueError('score must between 0 ~ 100!')
self._score = value

iter魔法

通過yield和 __iter__ 的結合, 我們可以把一個對象變成可迭代的
通過 __str__ 的重寫, 可以直接通過想要的形式列印對象
#!/usr/bin/env python
# -*- coding: utf-8 -*-

classTestIter(object):

def__init__(self):
self.lst = [1,2,3,4,5]

defread(self):
foreleinxrange(len(self.lst)):
yieldele

def__iter__(self):
returnself.read()

def__str__(self):
return','.join(map(str, self.lst))

__repr__ = __str__

deftest_iter():
obj = TestIter()
fornuminobj:
printnum
printobj

if__name__ =='__main__':
test_iter()

神奇partial

partial使用上很像C++中仿函數(函數對象).

在stackoverflow給出了類似與partial的運行方式
defpartial(func, *part_args):
defwrapper(*extra_args):
args = list(part_args)
args.extend(extra_args)
returnfunc(*args)

returnwrapper

利用用閉包的特性綁定預先綁定一些函數參數, 返回一個可調用的變數, 直到真正的調用執行
#!/usr/bin/env python
# -*- coding: utf-8 -*-

fromfunctoolsimportpartial

defsum(a, b):
returna + b

deftest_partial():
fun = partial(sum, 2)# 事先綁定一個參數, fun成為一個只需要一個參數的可調用變數
printfun(3)# 實現執行的即是sum(2, 3)

if__name__ =='__main__':
test_partial()

# 執行結果
5

神秘eval

eval我理解為一種內嵌的python解釋器(這種解釋可能會有偏差), 會解釋字元串為對應的代碼並執行, 並且將執行結果返回

看一下下面這個例子
#!/usr/bin/env python
# -*- coding: utf-8 -*-

deftest_first():
return3

deftest_second(num):
returnnum

action = { # 可以看做是一個sandbox
"para":5,
"test_first": test_first,
"test_second": test_second
}

deftest_eavl():
condition = "para == 5 and test_second(test_first) > 5"
res = eval(condition, action) # 解釋condition並根據action對應的動作執行
printres

if__name__ =='_

exec

exec在Python中會忽略返回值, 總是返回None, eval會返回執行代碼或語句的返回值
exec 和 eval 在執行代碼時, 除了返回值其他行為都相同
在傳入字元串時, 會使用 compile(source, '<string>', mode) 編譯位元組碼. mode的取值為 exec 和 eval
#!/usr/bin/env python
# -*- coding: utf-8 -*-

deftest_first():
print"hello"

deftest_second():
test_first()
print"second"

deftest_third():
print"third"

action = {
"test_second": test_second,
"test_third": test_third
}

deftest_exec():
exec"test_second"inaction

if__name__ =='__main__':
test_exec() # 無法看到執行結果

getattr

getattr(object, name[, default]) Return the value of
the named attribute of object. name must be a string. If the string is
the name of one of the object』s attributes, the result is the value of
that attribute. For example, getattr(x, 『foobar』) is equivalent to
x.foobar. If the named attribute does not exist, default is returned if
provided, otherwise AttributeError is raised.

通過string類型的name, 返回對象的name屬性(方法)對應的值, 如果屬性不存在, 則返回默認值, 相當於object.name
# 使用範例
classTestGetAttr(object):

test = "test attribute"

defsay(self):
print"test method"

deftest_getattr():
my_test = TestGetAttr()
try:
printgetattr(my_test,"test")
exceptAttributeError:
print"Attribute Error!"
try:
getattr(my_test, "say")()
exceptAttributeError:# 沒有該屬性, 且沒有指定返回值的情況下
print"Method Error!"

if__name__ =='__main__':
test_getattr()

# 輸出結果
test attribute
test method

命令行處理
defprocess_command_line(argv):
"""
Return a 2-tuple: (settings object, args list).
`argv` is a list of arguments, or `None` for ``sys.argv[1:]``.
"""
ifargvisNone:
argv = sys.argv[1:]

# initialize the parser object:
parser = optparse.OptionParser(
formatter=optparse.TitledHelpFormatter(width=78),
add_help_option=None)

# define options here:
parser.add_option( # customized description; put --help last
'-h','--help', action='help',
help='Show this help message and exit.')

settings, args = parser.parse_args(argv)

# check number of arguments, verify values, etc.:
ifargs:
parser.error('program takes no command-line arguments; '
'"%s" ignored.'% (args,))

# further process settings & args if necessary

returnsettings, args

defmain(argv=None):
settings, args = process_command_line(argv)
# application code here, like:
# run(settings, args)
return0# success

if__name__ =='__main__':
status = main()
sys.exit(status)

讀寫csv文件
# 從csv中讀取文件, 基本和傳統文件讀取類似
importcsv
withopen('data.csv','rb')asf:
reader = csv.reader(f)
forrowinreader:
printrow
# 向csv文件寫入
importcsv
withopen('data.csv','wb')asf:
writer = csv.writer(f)
writer.writerow(['name','address','age'])# 單行寫入
data = [
( 'xiaoming ','china','10'),
( 'Lily','USA','12')]
writer.writerows(data) # 多行寫入

各種時間形式轉換

只發一張網上的圖, 然後差文檔就好了, 這個是記不住的

字元串格式化

一個非常好用, 很多人又不知道的功能
>>>name ="andrew"
>>>"my name is {name}".format(name=name)
'my name is andrew'

㈧ python中有eval函數嗎

Python中有eval()函數;用來執行一個字元串表達式,並返回表達式的值。表示字元串類型轉化為數字

㈨ python中eval函數的作用是什麼

python當中的eval()函數是將字元串當成有效Python表達式來求值,並返回計算結果。

x = 1

eval('x+1')

eval('x==1')

與之對應的repr函數,它能夠將Python的變數和表達式轉換為字元串表示

repr(x+1)

repr(x+『1』-1)('x=+=1')

《Python編程》:

是2006年東南大學出版社出版的圖書,作者是(美)MarkLutz,其中第三版已經成為python用戶的行業標准。它教給讀者編寫代碼的正確途徑,而且以清晰而簡練的方式解釋了python語言的語法以及編程技巧,並輔以大量例子闡明正確的使用方法和通用特性。

它以清晰而簡練的方式解釋了python語言的語法以及編程技巧,並輔以大量例子闡明正確的使用方法和通用特性。通過閱讀這本全面的指南,你將學習到如何將python運用到實際問題中。

㈩ python中eval()函數的作用是什麼

python中eval函數作用如下:

1、計算字元串中有效的表達式,並返回結果。

2、將字元串轉成相應的對象(如list、tuple、dict和string之間的轉換)。

3、將利用反引號轉換的字元串再反轉回對象。

函數作用域:eval()函數並不會創建一個新的作用域,並且它的作用域就是它所在的作用域,有時候需要將eval()函數的作用域設置為全局,當然可以將eval()在全局作用域中使用,這個時候可以用window.eval()的方式實現。

參數情況:

(1)如果參數是一個表達式,eval() 函數將執行表達式。

(2)如果參數是Javascript語句,eval()將執行 Javascript 語句。

注意:如果執行結果是一個值就返回,不是就返回undefined,如果參數不是一個字元串,則直接返回該參數。

閱讀全文

與python神奇函數eval相關的資料

熱點內容
linux分區讀取 瀏覽:794
單片機液晶顯示屏出現雪花 瀏覽:890
解壓器用哪個好一點 瀏覽:771
什麼app看小說全免費 瀏覽:503
sha和ras加密 瀏覽:823
韓順平php視頻筆記 瀏覽:636
阿里雲ecs伺服器如何設置自動重啟 瀏覽:596
三星電視怎麼卸掉app 瀏覽:317
如何將pdf轉換成docx文件 瀏覽:32
dos命令批量改名 瀏覽:376
centosphp環境包 瀏覽:601
mfipdf 瀏覽:534
電腦解壓後電腦藍屏 瀏覽:295
外網訪問內網伺服器如何在路由器設置 瀏覽:856
2014統計年鑒pdf 瀏覽:434
linuxoracle用戶密碼 瀏覽:757
股票交易pdf 瀏覽:898
p2papp源碼 瀏覽:308
記錄睡眠軟體app哪個好用 瀏覽:140
液壓助力車壓縮比 瀏覽:217