1. 程式人生 > >Python入門-內建函式一

Python入門-內建函式一

  什麼是內建函式?就是python給你提供的拿來直接用的函式,比如print,input等等,截止到python版本3.6.2 python一共提供了68個內建函式,他們就是python直接提供給我們的,有一些我們已經用過了,有一些還沒有用過,還有一些需要學完了面向物件才能繼續學習的,今天我們就認識一下python的內建函式.

  作用域相關:

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

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

  迭代器相關:

    range()    生成資料

    next()       迭代器向下執行一次,內部實際使用了__next__()方法返回迭代器的下一個專案

    iter()        獲取迭代器,內部實際使用的是__iter__()方法來獲取迭代器

  字串型別程式碼的執行

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

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

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

    exec()   執行字串型別程式碼

exec('''
for i in range(10)
    print(i)
''')

exec('''
def func():
    print('我是周杰倫')
func()
''')

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

'''  
    引數說明:
        1.resource 要執行的程式碼,動態程式碼片段
        2.檔名,程式碼存放的檔名,當傳入第一個引數的時候,這個引數給空就可以了
        3.模式,取值有3個:
            1.exec: 一般放一些流程語句的時候
            2.eval: resource只存放一個求值表示式
            3.single: resource存放的程式碼有互動的時候,mode應為single
'''
code1 = 'for i in range(10): print(i)'
c1 = compile(code1,'',mode = 'exec')
exec(c1)

code2 = '1 + 2 + 3'
c2 = compile(code2, '', mode = 'eval')
a = eval(c2)
print(a)

code3 = ''name = input('請輸入你的名字:')''
c3 = compile(code3,'',mode = 'single')
exec(c3)
print(name)

  有返回值的字串形式的程式碼用eval(),沒有返回值的字串形式的程式碼用exec(),一般很少用到compile()

  輸入和輸出相關:

    input()    獲取使用者輸入的內容

    print()    列印輸出

  記憶體相關:

    hash()   獲取到物件的雜湊值(int,str,bool,tuple)

    id()       獲取到物件的記憶體地址

  檔案操作相關:

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

  模組相關:
    __import__()   用於動態載入類和函式

  幫助:

    help()   函式用於檢視函式或模組用途的詳細說明

  呼叫相關:

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

  檢視內建屬性:

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

  基礎資料型別相關:

    數字相關:

      bool()  將給定的資料型別轉換成bool值,如果不給值,返回False

      int()     將給定的資料型別轉換成int值,如果不給值,返回0

      float()   將給定的資料型別轉換成float值,也就是小數

      compile()  建立一個複數,第一個引數為實部,第二個引數為虛部,或者第一個引數直接用字串來描述複數

    進位制轉換:

      bin()  將給的引數轉換成二進位制

      otc()  將給的引數轉換成八進位制

      hex()  將給的引數轉換成十六進位制

    數學運算:

      abs()   返回絕對值

      divmode()  返回商和餘數

      round()   四捨五入

      pow(a,b)  求a的b次冪,如果有三個引數,則求完次冪後對第三個數取餘

      sum()    求和

      min()     求最小值

      max()    求最大值

  和資料結構相關:

    列表和元組:

      list()     將一個可迭代物件轉換成列表

      tuple()   將一個可迭代物件轉換成元組

      reversed()  將一個序列反轉,返回反轉序列的迭代器

      slice()   列表的切片

st = '大家好,我是麻花藤'
s = slice(1,5,2)
print(st[s])

  字串相關:

    str()       將資料轉化成字串

    format()   與具體資料相關,用於計算各種小數,精算等

# 字串
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型別

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)

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

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

#檢視bytes位元組在記憶體中的情況
s = memoryview('麻花藤'.encode('utf-8'))
print(s)

    ord()  輸入字元找字元編碼的位置

    chr()  輸入位置數字找出對應的字元

    ascii()  是ascii碼中的返回該值,不是就返回\u...

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

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

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

  repr()  返回一個物件的string形式

#repr 就是原封不動的輸出,引號和轉義符都不起作用
print(repr('大家好,\n,\t我叫周杰倫'))
print('大家好,我叫周杰倫')

#%r 原封不動的寫出來
name = '周杰倫'
print('我叫%r'% name)

  資料集合:
    dict()   建立一個字典

    set()    建立一個集合

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

  其他相關:

    len()  返回一個物件中的元素的個數

    sorted()   對可迭代物件進行排序操作

    enumerate()   獲取集合的列舉物件

lst = ['周杰倫','周潤發','周星馳']
for index,i in enumerate(lst):
    print(str(index) + i)

    all()   可迭代物件中全部是True,結果才是True

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

print(all[1,2,True,0])
print(any([1,'',0]))

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

l1 = [1,2,3]
l2 = ['a','b','c',5]
l3 = ('*','**',(1,2,3))
for i in zip(l1,l2,l3):
    print(i)

    filter()   過濾

lst = ['張無忌','張翠山','范冰冰','金毛獅王','李冰冰']
#過濾掉姓張的人
# 把可迭代物件開啟,把內部元素一個一個的傳遞給前面的函式,由這個函式決定是否保留

f = filter(lambda name : not name.startswith('張'),lst)
print('__iter__'in dir(f)) #可迭代物件
for el in f:
    print(el)

lst = [
    {"name":"alex", "shengao":150, "tizhong":250},
    {"name":"wusir", "shengao":158, "tizhong":150},
    {"name":"taibai", "shengao":177, "tizhong":130},
    {"name":"ritian", "shengao":165, "tizhong":130},
    {"name":"nvshen", "shengao":160, "tizhong":120},
    {"name":"baolang", "shengao":183, "tizhong":190}
]
#過濾掉體重大於180的人 想要的是 小於180
f = filter(lambda d :d['tizhong'] <= 180,lst)
print(list(f))

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

lst = ['籃球','打打檯球','唱歌','爬荒山','步']
m = map(lambda s:'愛好:'+s,lst)
print(list(m))

lst = [1,5,78,12,16]  #計算每個數字的平方
print([i ** 2 for i in lst])
m = map(lambda i : i ** 2,lst)
print(list(m))