1. 程式人生 > >day013內建函式一

day013內建函式一

一、內建函式一

1.作用域相關的

locals()    返回當前作用域中的名字
globals()   返回全域性作用域中的名字

2.迭代器相關的

range()     生成資料
next()      迭代器向下執行一次,內部實際使用了__next__()方法返回迭代器的下一個專案
iter()      獲取迭代器,內部實際使用的是__iter__()方法獲取迭代器
lst = ["唐伯虎", "小娟", "張鶴倫", "燒餅"]

it = lst.__iter__()     # 獲取迭代器
print(it.__next__())    # 執行一次,輸出一個元素

it = iter(lst) # 獲取迭代器
print(it.__next__())
print(next(it)) # 相當於 __next__()

3、字串型別程式碼的執行

eval()  執行字串型別的程式碼,並返回最終結果

fe1: eval執行有返回值

print(eval("2+2")) # 4
n = 8
print(eval("2+n")) # 10

def func():
    print(666)
eval("func()") # 666

code="1+2+3+4+5"
c = compile(code, "", mode="eval") #compile將字串型別的程式碼編譯
print(eval(c))

fe2: eval() 可以把字串型別的資料轉化成具體的某些資料(如str-->list)

qianduan = "[1,2,3,4,5]" # json
lst = eval(qianduan)
print(lst) # 列表

exec() 僅執行字串型別的程式碼, 不會有返回值

fe: exec() 僅執行程式碼,不會有返回值

code = """
for i in range(10):
print(i)
for j in range(10):
print(j)
"""
c = compile(code, "", mode="exec")
exec(c) #僅執行程式碼,不會有返回值

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

fe:compile()在有互動的情況下,用 single 模式

code = """name = input('請輸入你的名字')"""
c = compile(code, "", mode="single") # single 有互動
exec(c)
print(name) # pycharm的提示有的時候是不對的

4.輸入和輸出相關的

input()     獲取使用者輸入的內容
print()     列印輸出

5.記憶體相關

hash()      獲取到物件的雜湊值(int, str, bool, tuple),數字的雜湊值就是它本身,雜湊值不可以做密碼,每次重新執行的雜湊值不一樣
id()        獲取到物件的記憶體地址

6.檔案操作相關

open()      用於開啟一個檔案,建立一個檔案控制代碼(控制代碼用來操控檔案的)

7.模組相關

__import__()    用於動態載入類和函式

8.呼叫相關

callable()  用於檢查一個物件是否可呼叫的
如果返回True,object有可能呼叫失敗,但如果返回False,絕對呼叫不成功

9.檢視內建屬性

dir()   檢視物件的內建屬性,方法
訪問的是物件中的 __dir__() 方法

10.基礎資料型別相關

1.數字相關

bool()  將給定的資料轉換成bool值,如果不給值,返回False
int()   將給定的資料轉換成int值,如果不給值,返回0
float() 將給定的資料轉換成float值,也就是小數
complex()   建立一個複數,第一個引數為實部,第二個引數為虛部,或者第一個引數直接用字串來描述複數

2.進位制轉換

bin()   將給的引數轉換成二進位制     0b
otc()   將給的引數轉換成八進位制     0o
hex()   將給的引數轉換成十六進位制   0x

3.數學運算

abs()   返回絕對值,取模
divmode()   返回商和餘數
round()     四捨五入(這裡有點小問題),一般不用內建的四捨五入,自己寫
pow(a, b)   求a的b次冪,如果有三個引數,則求完次冪後對第三個數取餘
sum()   求和
min()   求最小值
max()   求最大值

fe.四捨五入內建的例子及自定義的

print(round(4.4)) # 如果整數位是偶數靠近偶數進行捨棄 -
print(round(5.4)) # 如果整數位是偶數靠近偶數進行捨棄 +

自定義的
def func(num): # "5.4123456"  ["5", "4123456"]
    fu = 1
    if num < 0:
    fu = -1

    num = abs(num)
    snum = str(num)
    if int(snum.split(".")[1][0])>=5:  # 入
    return (int(snum.split(".")[0])+1)*fu
    else:   #  舍
    return int(snum.split(".")[0])*fu

print(func(11.99))

11.資料結構相關

1.列表和元組

list()  將一個可迭代物件轉換成列表
tuple() 將一個可迭代物件轉換成元組
reversed()  將一個序列翻轉,返回翻轉序列的迭代器(這裡為了通用(照顧元組)才返回迭代器,而不是返回列表)
slice() 列表的切片,  主要用於切大量的相同列表

fe:slice()

st = "⼤家好, 我是麻花藤"
s = slice(1, 6, 2)
print(st[s])    # 一個列表還不明顯,還不如用索引切片來得快

fe2:
lst1 = [1,2,3,4,5,6,7,8,9]
lst2 = [1,2,3,4,5,6,7,8,9]
lst3 = [1,2,3,4,5,6,7,8,9]

s = slice(1, 6, 2)      # 對多個列表進行相同的處理
print(lst1[s])
print(lst2[s])
print(lst3[s])

2.字串相關

str()   將資料轉化成字串
format()    與具體資料相關,用於計算各種小數,精算等。

fe:

print(format('test', '<20')) # 左對⻬
# 字串
print(format('test', '>20')) # 右對⻬
print(format('test', '^20')) # 居中
# 數值
print(format(3, 'b')) # ⼆進位制
print(format(97, 'c')) # 轉換成unicode字元
print(format(11, 'd')) # ⼗進位制
print(format(11, 'o')) # ⼋進位制
print(format(11, 'x')) # ⼗六進位制(⼩寫字⺟)
print(format(11, 'X')) # ⼗六進位制(⼤寫字⺟)
print(format(11, 'n')) # 和d⼀樣
print(format(11)) # 和d⼀樣
# 浮點數
print(format(123456789, 'e')) # 科學計數法. 預設保留6位⼩數
print(format(123456789, '0.2e')) # 科學計數法. 保留2位⼩數(⼩寫)
print(format(123456789, '0.2E')) # 科學計數法. 保留2位⼩數(⼤寫)
print(format(1.23456789, 'f')) # ⼩數點計數法. 保留6位⼩數
print(format(1.23456789, '0.2f')) # ⼩數點計數法. 保留2位⼩數
print(format(1.23456789, '0.10f')) # ⼩數點計數法. 保留10位⼩數
print(format(1.23456789e+10000, 'F')) # ⼩數點計數法.

bytes() 把字串轉化成bytes型別

fe:

s = "你好"
bs = s.encode("UTF-8")
print(bs)
s1 = bs.decode("UTF-8")
print(s1)
bs = bytes(s, encoding="utf-8") # 把字串編碼成UTF-8, 網路通訊要用到它
print(bs)

bytearray() 返回一個新位元組陣列,這個數字裡的元素是可變的,並且每個元素的值範圍都是[0,256] fe:

ret = bytearray('alex',encoding='utf-8')
print(ret[0])
print(ret)

memoryview() 檢視bytes在記憶體中的情況

s = "記憶體"
m = memoryview(s.encode("utf-8")) # 不給程式設計師用的
print(m)

ord() 輸入字元找出對應的字元編碼的位置 chr() 輸入字元編碼的位置數字找出對應的字元 ascii() 是ascii碼中的就返回該值,不是就返回unicode \u...

fe:

# 找到對應字元的編碼位置
print(ord('a'))
print(ord('中'))

# 找到對應編碼位置的字元
print(chr(97))
print(chr(20013))

# 在ascii中就返回這個值. 如果不在就返回\u...
print(ascii('a'))
print(ascii('好'))

repr() 返回一個物件的官方表現形式,就是他在python最底層的樣子

fe:字串的原樣及原樣輸出

python使用的字串實際上和c的字串是不一樣的. python對字串進行了處理
print("你好我叫\\劉德\n華我叫周潤發")

# 字串最應該顯示的樣子. 最底層, 最官方的顯示效果
print(repr("你好我叫\\劉德\n華我叫周潤發")) # __repr__ __str___

print(r"你給我顯\示一下\n") # r"" 原樣輸出
print(r"\/\d+\w|\d?*")

fe:佔位賦值

name = "胡辣湯"
# 3.6以上

print(f"我想吃{name}") # f format  {佔位賦值}

print("我想吃%s" %  name)

3、資料集合

dict()  建立一個字典
set()   建立一個集合
frozenset()  建立一個凍結的集合,凍結的集合不能進行新增和刪除操作

4、其他相關

len()  返回一個物件中的元素的個數
sorted()  對可迭代物件進行排序操作(知道lamda以後就會清楚了)
enumerate()  獲取集合的列舉物件

fe:拿到集合的索引和元素

lst = ["alex", "wusir", "taibai"]
for index, el in enumerate(lst):  #可以索引和元素
print(str(index)+"==>"+el)

lst = ["電腦", "鍵盤", "滑鼠"]
for i, el in enumerate(lst, 1): #可以讓索引從1開始,任意數字開始
print(i, el)

all() 可迭代物件的全部是True,結果才是True 類似 and

any() 可迭代物件中有一個是True,結果就是True 類似 or

fe:

print(all([1,2,True,0])) # False   相當於 and
print(any([1,'',0])) #  True   相當於  or

zip() 函式用於可迭代物件作為引數,將物件對應的元素打包成一個個元組,然後返回由這些元組組成的列表,如果各個迭代器的元素個數不一樣,則返回的列表長度與最短的物件相同(水桶效應)

fe: zip拉鍊函式

lst1 = ["胡歌", "霍建華", "彭于晏", "吳彥祖"]
lst2 = [37,46,50]
lst3 = ["仙劍三", "花千骨", "湄公河行動", "警察故事"]

z = zip(lst1, lst2, lst3) # 第0個放一起, 第一個放一起, 第二個放一起. 水桶效應
print("__iter__" in dir(z)) # 可以迭代

for el in z:
print(el)

filter() 過濾(lamda之後)

map() 會根據提供的函式對指定序列做對映(lamda之後)