??前言
?承接上篇博客,以下我要講解的是Python中剩余的重要內置函式,其中比較重要的會詳細講解,比較簡單的會直接結合代碼進行剖析
??一、exec和eval內置函式
??1、exec內置函式
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,
??2、eval內置函式
eval只能用在你明確知道你要執行的代碼是什么的時候,且一般情況下不會使用
描述
eval() 函式用來執行一個字串運算式,并回傳運算式的值,語法
以下是 eval() 方法的語法:eval(expression[, globals[, locals]])
引數
expression -- 運算式,
globals -- 變數作用域,全域命名空間,如果被提供,則必須是一個字典物件,
locals -- 變數作用域,區域命名空間,如果被提供,可以是任何映射物件,
回傳值
回傳運算式計算結果,
??3、代碼實練總結exec和eval內置函式
- 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內置函式
- 描述
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內置函式
描述
complex() 函式用于創建一個值為 real + imag * j 的復數或者轉化一個字串或數為復數,如果第一個引數為字串,則不需要指定第二個引數,語法
complex 語法:class complex([real[, imag]])
引數說明:real -- int, long, float或字串;
imag -- int, long, float;
回傳值
回傳一個復數,代碼理解:
??四、 bin、oct、和hex內置函式
- bin:回傳一個整數 int 或者長整數 long int 的二進制表示,
- oct: 將一個整數轉換成 8 進制字串,8 進制以 0o 作為前綴表示,
- hex: 用于將一個指定數字轉換為 16 進制數,
print(bin(10)) #二進制 print(oct(10)) #八進制 print(hex(10)) #十六進制 輸出結果: 0b1010 0o12 0xa
??五、abs內置函式
回傳數字的絕對值
print(abs(-5)) print(abs(22)) 輸出結果: 5 22
??六、divmod內置函式
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內置函式
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() 方法的語法:
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() /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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/536201.html
標籤:其他
上一篇:python中的while回圈
下一篇:JVM指令手冊
