一、exec和eval內置函數
️1、exec內置函數
️2、eval內置函數
️3、代碼實練總結exec和eval內置函數
二、compile內置函數
三、complex內置函數
四、 bin、oct、和hex內置函數
五、abs內置函數
六、divmod內置函數
七、pow內置函數
八、sum內置函數
九、max和min內置函數
承接上篇博客,以下我要講解的是Python中剩余的重要內置函數,其中比較重要的會詳細講解,比較簡單的會直接結合代碼進行剖析
python內置函數exec支持動態執行python代碼,傳入exec函數的object實參可以是字符串,也可以是字節碼對象。如果object實參是字符串則會被exec函數編譯並執行,如果是字節碼對象則會被直接執行。通常exec配合compile函數來使用。
描述
exec 執行儲存在字符串或文件中的 Python 語句,相比於 eval,exec可以執行更復雜的 Python 代碼。語法
以下是 exec 的語法:exec(object[, globals[, locals]])
參數
object:必選參數,表示需要被指定的 Python 代碼。它必須是字符串或 code 對象。如果 object 是一個字符串,該字符串會先被解析為一組 Python 語句,然後再執行(除非發生語法錯誤)。如果 object 是一個 code 對象,那麼它只是被簡單的執行。
globals:可選參數,表示全局命名空間(存放全局變量),如果被提供,則必須是一個字典對象
locals:可選參數,表示當前局部命名空間(存放局部變量),如果被提供,可以是任何映射對象。如果該參數被忽略,那麼它將會取與 globals 相同的值。
返回值
exec 返回值永遠為 None。
eval只能用在你明確知道你要執行的代碼是什麼的時候,且一般情況下不會使用
描述
eval() 函數用來執行一個字符串表達式,並返回表達式的值。語法
以下是 eval() 方法的語法:eval(expression[, globals[, locals]])
參數
expression -- 表達式。
globals -- 變量作用域,全局命名空間,如果被提供,則必須是一個字典對象。
locals -- 變量作用域,局部命名空間,如果被提供,可以是任何映射對象。
返回值
返回表達式計算結果。
- eval有返回值 ———— 適用於有結果的簡單計算
- exec沒有返回值 ———— 適用於簡單的流程控制
函數代碼
exec('print("我是字符串內的輸出")') eval('print("我是字符串內的輸出")') print(exec('1+2+3+4')) #exec沒有返回值 print(eval('1+2+3+4')) #eval有返回值 '''簡單的流程控制''' code = '''for i in range(4): print(i*'*') ''' exec(code) 輸出結果: 我是字符串內的輸出 我是字符串內的輸出 None 10 * ** ***
描述
compile() 函數將一個字符串編譯為字節代碼。
計算機是不認識print等,必須將他們編譯成字節碼才能讓計算機能夠識別
語法
以下是 compile() 方法的語法:
compile(source, filename, mode[, flags[, dont_inherit]])
參數
source -- 字符串或者AST(Abstract Syntax Trees)對象。。
filename -- 代碼文件名稱,如果不是從文件讀取代碼則傳遞一些可辨認的值。
mode -- 指定編譯代碼的種類。可以指定為 exec, eval, single。
flags -- 變量作用域,局部命名空間,如果被提供,可以是任何映射對象。。
flags和dont_inherit是用來控制編譯源碼時的標志代碼理解:
>>> #流程語句使用exec >>> code1 = 'for i in range(0,10): print (i)' >>> compile1 = compile(code1,'','exec') >>> exec (compile1) 1 3 5 7 9 >>> #簡單求值表達式用eval >>> code2 = '1 + 2 + 3 + 4' >>> compile2 = compile(code2,'','eval') >>> eval(compile2) >>> #交互語句用single >>> code3 = 'name = input("please input your name:")' >>> compile3 = compile(code3,'','single') >>> name #執行前name變量不存在 Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> name NameError: name 'name' is not defined >>> exec(compile3) #執行時顯示交互命令,提示輸入 please input your name:'pythoner' >>> name #執行後name變量有值 "'pythoner'"
描述
complex() 函數用於創建一個值為 real + imag * j 的復數或者轉化一個字符串或數為復數。如果第一個參數為字符串,則不需要指定第二個參數。語法
complex 語法:class complex([real[, imag]])
參數說明:real -- int, long, float或字符串;
imag -- int, long, float;
返回值
返回一個復數。代碼理解:
- bin:返回一個整數 int 或者長整數 long int 的二進制表示。
- oct:將一個整數轉換成 8 進制字符串,8 進制以 0o 作為前綴表示。
- hex:用於將一個指定數字轉換為 16 進制數。
print(bin(10)) #二進制 print(oct(10)) #八進制 print(hex(10)) #十六進制 輸出結果: 0b1010 0o12 0xa
返回數字的絕對值
print(abs(-5)) print(abs(22)) 輸出結果: 5 22
Python divmod() 函數接收兩個數字類型(非復數)參數,返回一個包含商和余數的元組(a // b, a % b)。
在 python 3.x 版本該函數不支持復數。
函數語法
divmod(a, b)參數說明:
- a: 數字,非復數。
- b: 數字,非復數。
如果參數 a 與 參數 b 都是整數,函數返回的結果相當於 (a // b, a % b)。
如果其中一個參數為浮點數時,函數返回的結果相當於 (q, a % b),q 通常是 math.floor(a / b),但也有可能是 1 ,比小,不過 q * b + a % b 的值會非常接近 a。
如果 a % b 的求余結果不為 0 ,則余數的正負符號跟參數 b 是一樣的,若 b 是正數,余數為正數,若 b 為負數,余數也為負數,並且 0 <= abs(a % b) < abs(b)。
print(divmod(5,4)) print(divmod(4,5)) print(divmod(5,-4)) 輸出結果: (1, 1) (0, 4) (-2, -3)
pow(x,y) 方法返回 xy(x的y次方) 的值。
內置的 pow() 方法
語法:
pow(x, y[, z])
函數是計算x的y次方,如果z在存在,則再對結果進行取模,其結果等效於pow(x,y) %z
注意:
pow() 通過內置的方法直接調用,內置方法會把參數作為整型,而 math 模塊則會把參數轉換為 float。
print(pow(2,3)) print(pow(2,3,3)) print(pow(3,2,1)) #冪運算之後在取余 輸出解果: 8 2 0
描述
sum() 方法對序列進行求和計算。
語法
以下是 sum() 方法的語法:
sum(iterable[, start])參數
- iterable -- 可迭代對象,如:列表、元組、集合。
- start -- 指定相加的參數,如果沒有設置這個值,默認為0。
返回值
返回計算結果。
print(sum([1,2,3,4,5,6])) print(sum([1,2,3,4,5,6],10)) 輸出結果: 21 31
描述
max() /min()方法返回給定參數的最大值/(最小值),參數可以為序列。
語法
以下是 max() /min()方法的語法:
max( x, y, z, .... ) min( x, y, z, .... )參數
- x -- 數值表達式。
- y -- 數值表達式。
- z -- 數值表達式。
返回值
返回給定參數的最大值/最小值。
print(min(1,2,3,4)) print(min([1,2,3,4])) print(min([1,2,3,-4],key=abs)) #判斷絕對值的最小值 輸出結果: 1 1 1
感謝各位能夠看到這裡:在魯迅一篇未發表的文章中說過:“代碼看懂了不是懂一定要自己實際操作哇這樣才能更好的理解和吸收。”
最後來一句:一個人可以在任何他懷有無限熱忱的事情上成功,讓我們一起進步吧