1. 程式人生 > >Python3-內建函式 內建函式

Python3-內建函式 內建函式

內建函式

上面就是內建函式的表,68個函式都在這兒了。這個表的順序是按照首字母的排列順序來的,你會發現都混亂的堆在一起。比如,oct和bin和hex都是做進位制換算的,但是卻被寫在了三個地方。。。這樣非常不利於大家歸納和學習。那我把這些函式分成了7大類。

我們今天就要學習用粉紅色標註出來的這四大塊——53個方法。還有15個方法欠著怎麼辦呢?我們講完內建函式會還你們3個,剩下12個也會在兩週之內陸續還給你們的,我保證(認真臉)。那這樣,我們今天就主要關注我們要學習的這53個方法。

作用域相關

基於字典的形式獲取區域性變數和全域性變數

globals()——獲取全域性變數的字典

locals()——獲取執行本方法所在名稱空間內的區域性變數的字典

其他

input() 輸入

s = input("請輸入內容 : ")  #輸入的內容賦值給s變數
print(s)  #輸入什麼列印什麼。資料型別是str

print() 輸出

## 原始碼
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
    """
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    file:  預設是輸出到螢幕,如果設定為檔案控制代碼,輸出到檔案
    sep:   列印多個值之間的分隔符,預設為空格
    end:   每一次列印的結尾,預設為換行符
    flush: 立即把內容輸出到流檔案,不作快取
    
"""
## 例子
with open('print_test.txt', 'w') as f:
    print('testtest', 'test2test2', file=f, sep='---', end=' and ')
    print('second!!!', file=f)

print_test.txt檔案:
testtest---test2test2 and second!!!
## 列印進度條

import time
for i in range(0, 101, 2):
    time.sleep(0.1)
    char_num = i//
2 # 列印多少個'*' per_str = '\r{}% : {}\n'.format(i, '*' * char_num) if i == 100 else '\r{}% : {}'.format(i, '*' * char_num) print(per_str, end='', flush=True) # \r可以把游標移動行首但不換行

 

資料型別相關:

type(o) 返回變數o的資料型別

 

記憶體相關:

id(o) o是引數,返回一個變數的記憶體地址

hash(o) o是引數,返回一個可hash變數的雜湊值,不可hash的變數被hash之後會報錯。

t = (1,2,3)
l = [1,2,3]
print(hash(t))  #可hash
print(hash(l))  #會報錯

'''
結果:
TypeError: unhashable type: 'list'
'''

hash函式會根據一個內部的演算法對當前可hash變數進行處理,返回一個int數字。

*每一次執行程式,內容相同的變數hash值在這一次執行過程中不會發生改變。

 

檔案操作相關

open()  開啟一個檔案,返回一個檔案操作符(檔案控制代碼)

操作檔案的模式有r,w,a,r+,w+,a+ 共6種,每一種方式都可以用二進位制的形式操作(rb,wb,ab,rb+,wb+,ab+)

 

模組操作相關

__import__匯入一個模組

匯入模組
import time

__import__
os = __import__('os')
print(os.path.abspath('.'))

 

幫助方法

在控制檯執行help()進入幫助模式。可以隨意輸入變數或者變數的型別。輸入q退出

或者直接執行help(o),o是引數,檢視和變數o有關的操作。。。

 

和呼叫相關

callable(o),o是引數,看這個變數是不是可呼叫。

如果o是一個函式名,就會返回True

def func():pass
print(callable(func))  #引數是函式名,可呼叫,返回True
print(callable(123))   #引數是數字,不可呼叫,返回False

 

檢視引數所屬型別的所有內建方法

dir() 預設檢視全域性空間內的屬性,也接受一個引數,檢視這個引數內的方法或變數

print(dir(list))  #檢視列表的內建方法
print(dir(int))  #檢視整數的內建方法

eval() 將字串型別的程式碼執行並返回結果(單行,有返回值)

print(eval('1+2+3+4'))

Output:
10

exec()將自字串型別的程式碼執行(多行,無返回值)

code = '''
print(123)
a = 20
print(a)
'''
a = 10
exec(code,{'print':print},)
print(a)

Output:
123
20
10

compile  將字串型別的程式碼編譯。程式碼物件能夠通過exec語句來執行或者eval()進行求值。

引數說明:  

1. 引數source:字串或者AST(Abstract Syntax Trees)物件。即需要動態執行的程式碼段。  

2. 引數 filename:程式碼檔名稱,如果不是從檔案讀取程式碼則傳遞一些可辨認的值。當傳入了source引數時,filename引數傳入空字元即可。  

3. 引數model:指定編譯程式碼的種類,可以指定為 ‘exec’,’eval’,’single’。當source中包含流程語句時,model應指定為‘exec’;當source中只包含一個簡單的求值表示式,model應指定為‘eval’;當source中包含了互動式命令語句,model應指定為'single'。

>>> #簡單求值表示式用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'"

和數字相關

 

數字——資料型別相關:bool,int,float,complex

數字——進位制轉換相關:bin,oct,hex

數字——數學運算:abs,divmod,min,max,sum,round,pow

## divmod
#  divmod() 函式把除數和餘數運算結果結合起來,返回一個包含商和餘數的元組(a // b, a % b)

res = divmod(10, 3)
print(res)

Output:
(3, 1)
## pow() 方法返回 xy(x的y次方) 的值。
print(pow(2, 3))

Output:
8


## round() 方法返回浮點數x的四捨五入值。
print(round(1.61284567))
Output: 2
print(round(1.612845673))
Output:1.613

 

和資料結構相關

序列——列表和元組相關的:list和tuple

序列——字串相關的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr

## bytearray() 方法返回一個新位元組陣列。這個數組裡的元素是可變的,並且每個元素的值範圍: 0 <= x < 256。
ret = bytearray('alex',encoding='utf-8')
print(id(ret))
print(ret[0])
ret[0] = 65
print(ret)
print(id(ret))

Output:
1913856888704
97
bytearray(b'Alex')
1913856888704

 

序列:reversed,slice

##  reversed
l = (1,2,23,213,5612,342,43)
print(l)
print(list(reversed(l)))

Output:

(1, 2, 23, 213, 5612, 342, 43)
[43, 342, 5612, 213, 23, 2, 1]

## slice
l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])

Output:
(2, 213)

資料集合——字典和集合:dict,set,frozenset

資料集合:len,sorted,enumerate,all,any,zip,filter,map

filter和map:http://www.cnblogs.com/Eva-J/articles/7266192.html

sorted方法:http://www.cnblogs.com/Eva-J/articles/7265992.html