1. 程式人生 > >python中的關鍵字---3(內建函式)

python中的關鍵字---3(內建函式)

內建函式

# 1 range(起始位置,終止位置,步長)
# range(終止位置)
# range(起始,終止位置)
# range(起始,終止,步長)
# range(5) [0,4] [0,5)
# range(1,5) [1,4] [1,5)
# range(1,10,2) [1,3,5,7,9]
# range(0,10,2) [0,2,4,6,8]

# 2 next(迭代器) 是內建函式
# __next__ 是迭代器的方法
# g.__next__() 帶雙下劃線的魔術方法一般情況下不直接用
# next(g) 之前所有的__next__都應該替換成next(g)

# *帶雙下劃線的所有的方法都可能和內建的函式有千絲萬縷的聯絡

# 3 iter(可迭代的)
# __iter__
# 迭代器 = 可迭代的.__iter__()
# 迭代器 = iter(可迭代的)

# 其他
# 4 open('檔名') 跟著作業系統走的
# 開啟模式 預設是r
# 編碼 預設是 作業系統的預設編碼

# 開啟模式 : r w a rb wb ab
# 編碼 : utf-8(100%)
# gbk

# 5 input('字串資料型別的引數,提醒使用者你要輸入的內容')
# python2
# input() 還原你輸入的值的資料型別

# raw_input = py3.input
# python3
# input() 輸入的所有內容都是字串型別
# 阻塞: 等待某件事情發生,如果不發生一直等著
# input的返回值就是使用者輸入的內容
# 輸入的內容 = input('提示')

# 6 print(要列印的內容1,要列印的內容2,要列印的內容3,sep = '分隔符',end = '結束符')
# print(123)
# print('abc')
# print(123,'abc')
# print(123,'abc','aaa',sep = '|')

# print(123,'abc','aaa',end = '@')
# print(123,'abc','aaa',end = '@')
# print(123,'abc')
# f = open('file','w')
# print(123,'abc',file=f) # print的本質 就是寫檔案 這個檔案是pycharm的螢幕
# f.close()
# sep=' ' seperator

# import time # 匯入別人寫好的程式碼
# def func():
# for i in range(0,101,2):
# time.sleep(0.1) # 每一次在這個地方阻塞0.1,0.1秒結束就結束阻塞
# char_num = i//2
# if i == 100:
# per_str = '\r%s%% : %s\n' % (i, '*' * char_num)
# else:
# per_str = '\r%s%% : %s' % (i, '*' * char_num)
# print(per_str,end = '')
# func()
# print('下載完成')

# 解釋過程:
# per_str = '\r%s%% : %s' % (10, '*' * 10)
# print(per_str,)
# time.sleep(1)
# per_str = '\r%s%% : %s' % (20, '*' * 20)
# print(per_str,end='')

# 7 hash函式
# 雜湊 可雜湊(不可變資料型別) 不可雜湊(可變資料型別)
# 雜湊是一個演算法,導致了字典的快速定址
# 'asjgkgfk' 複雜的演算法 得到一個數字
# () --> 數字
# 數字 --> 數字
# 所有的資料要想得到不變的hash值,必須是一個不可變的資料型別

# dir 函式 : 特殊的需求 / 研究或者瞭解一個新的資料型別 / 面向物件之後會介紹新的資料型別
# print(dir(__builtins__)) # 內建的名字
'''
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError',
'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError',
'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception',
'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError',
'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError',
'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError',
'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError',
'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError',
'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError',
'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError',
'__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__',
'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod',
'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval',
'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map',
'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit',
'range', 'repr', 'reversed', 'round', 'set', 'setattr','slice', 'sorted', 'staticmethod', 'str', 'sum',
'super', 'tuple', 'type', 'vars', 'zip']'''

# print(dir(123))

# 8 eval() 可以將字串資料型別的python程式碼執行,通過拼接字串的方式來執行不同的程式碼--簡化程式碼
# eval\exec這個函式 不能直接操作檔案當中讀進來的 網路上傳進來 使用者輸入的
# eval('print(1+2+3+4)') # 有返回值
# ret = eval('1+2/3*4')
# print(ret)

# 字串 -> 其他資料型別的轉換
# f = open('userinfo')
# content = f.read()
# print(content,type(content))
# ret = eval(content)
# print(ret,type(ret))
# print(ret[0])

# 員工資訊表
# def get_info(f):
# if eval('33 %s 20'%f):
# print('是符合條件的行')
#
# if '>':
# get_info('>')
# if '<' :
# get_info('<')

# 9 exec()
# exec('print(1+2+3+4)') # 沒有返回值
# ret = exec('1+2/3*4')
# print(ret)
# exec('for i in range(200):print(i)')

# 10 compile 能夠節省時間工具
# 先編譯 python -編譯-> 位元組碼(bytes) -解釋-> 機器碼 0101010100101
# 先整體編譯
# code1 = 'for i in range(0,10): print (i)' # 這是一句程式碼 字串
#
# compile1 = compile(code1,'','exec') # 預編譯 python-> 位元組碼
# exec (compile1) # 解釋
# exec (compile1)
# exec (compile1)
# exec (compile1)
# exec (compile1)
#
# exec(code1) # 編譯+解釋
# exec(code1)
# exec(code1)
# exec(code1)
# exec(code1)

# code3 = 'name = input("please input your name:")'
# compile3 = compile(code3,'','single')
# exec(compile3)
# print(name)

# 11 help() 幫助你瞭解python的
# 方式一
# 輸入help() 進入幫助頁面,輸入資料型別,幫助我們列印具體的幫助資訊
# '123'.startswith()
# 輸入q退出幫助

# 方式二
# print(help(str))
# print(help('abc'))

# 12 callable() 判斷某一個變數是否可呼叫
# def call(arg):
# if callable(arg):
# arg()
# else:
# print('引數不符合規定')
#
#
# def func():
# print('in func')
# return 1
#
# func2 = 1234
# call(func)
# call(func2)

# print(callable(func))
# print(callable(func2))
# 1. locals  本地作用域/區域性作用域 會隨著位置的改變而改變
# 2. globals 全域性作用域 永遠不變 永遠是全域性

# a = 1
# b = 2
# print(locals())
# print(globals())
# def func():
# c = 3
# d = 4
# print(locals())
# print('-->',globals())
#
# def func2():
# l1 = []
# d1 = {}
# print(locals())
# print('-->',globals()) # 無論在哪裡列印 得到的都是全域性作用域中的名字
#
# func()
# func2()

# bool\int\float\complex
# 3.complex : 複數
# 實數 (有理數和無理數) :世界上存在的數
# 虛數 : j
# 某一個數的平方是-1 ,那麼這個數就是一個虛數的基礎單位 j
# 複數 = 實數+虛數 = a+bj
# 選擇題 :(對你的數學有要求的公司都會考)
# 複數不能比較大小
# 共軛複數 : a+bj 和 a-bj是一對共軛複數
# a+bj 和 a+bJ都是複數

# c = 1+2J
# print(type(c))

# 4.bin oct hex
# a = 19
# # 0 1 2 3 4 5 6 7 8 9 A B C D E F 10
# # 256 十進位制
# print(bin(a)) # 0b100000000 0b代表二進位制,100000000 = 256
# print(oct(a)) # 0o400 0o代表八進位制,400 = 256
# print(hex(a))

# 5 abs 求絕對值,正數的絕對值是正數,負數的絕對值也是正數
# print(abs(5))
# print(abs(-5))

# 6. divmod 商餘函式
# print(divmod(10,3))
# print(divmod(7,4))
# print(divmod(8,3))
# 翻頁功能
# 2520 25條 多少頁 101 100+1 20
# 35條資料 在第幾頁的第幾行顯示 : 2 10行

# 7. round(小數,保留幾位小數) 小數精確
# ret = round(2.3258358)
# print(ret)
# ret = round(2.3253358,2)
# print(ret)
# ret = round(2.3253358,3)
# print(ret)
# ret = round(0.5)
# print(ret)
# 2.x(完全的四捨五入)和3.x(更精準的計算方式)不同

# 8.pow(x,y,z=1) 冪運算/冪餘運算 x的y次方%z
# print(pow(2,3))
# print(pow(3,2))
# print(pow(5,3,2))
# print(pow(4,2,2))
# print(pow(4,3,2))

# 9.sum(可迭代的數字集,start),start從哪個數開始加
# print(sum((1,2,3,4)))
# print(sum([1,2,3,4]))
# print(sum(range(10)))
# print(sum((i**2 for i in range(5))))
# print(sum((1,2,3,4)))
# print(sum((1,2,3,4),10))
# print(sum((1,2,3,4),30))

# 10.min/max(iterable/*args,key) key是一個函式的記憶體地址,key做的事情就是根據你對每一項資料大小的需求來排序
# print(min(1,2,3))
# print(min((1,2,3)))
# print(min((1,2,3),(4,5,6)))
# print(min((7,2,3),(4,5,6)))

# def func(n): # n = 2,3,4,7
# return n%6 # 2,3,4,1
#
# ret = min(2,3,4,7,key = func)
# print(ret)

# l = [{'name1':10},{'name2':500}]
# max函式 找到股價最高的那個字典,
# def func(dic): # {'name1':10}
# for k in dic:
# return dic[k] # 10
# func(dic)
# def max(iter,key = None): # 內建的max iter = [{'name1':10},{'name2':500}] , key = func
# ret = 0 # ret = 0
# max_value = 0 # max_value = 0
# if key: # key = func
# for i in iter: # iter = [{'name1':10},{'name2':500}]
# print(key(i),max_value) # i = {'name1':500} key(i) = func({'name1':500}) = 500,max_value = 10
# if key(i) > max_value: # 500>10
# max_value = key(i) # max_value = 500
# ret = i # ret ={'name1':500}
# return ret

# def func(dic):
# for k in dic:
# return dic[k]
# print(max(l,key = func))
# print(min(l,key = func))
# l中的每一項都會作為引數傳給func
# max和min的求值會根據func的返回值來排序

# l = [(7,2,3),(4,5,6),(-1,20,5)]
# # 根據每一個元組的和來計算max或者min
# print(max(l,key = sum)) # sum((7,2,3))

# 11. reversed(list/tuple) 返回一個迭代器,為了節省記憶體
# l = [1,2]
# l.reverse()
# print(l)

# ret = reversed([1,2,3]) # iterator
# print(ret)

# reverse是在原基礎上修改 : 2000項的列表 不會產生額外的記憶體佔用
# reversed不修改原基礎 : 不直接返回列表而返回迭代器,為了不佔用更多的記憶體

# 12. slice 切片
# l = [1,2,3,4,5,]
# print(l[1:4])
#
# ret = slice(1,4) # [1:4]
# print(l[ret])

# 13. format
# print(format('test', '<20'),'alex')
# print(format('test', '>20'),'alex')
# print(format('test', '^20'),'alex')

# 14. bytes 位元組
# str --> bytes
# print('abc'.encode('utf-8'))
# print('你好'.encode('utf-8'))
# bytes --> str
# b = b'\xe4\xbd\xa0\xe5\xa5\xbd'
# print(b.decode('utf-8'))

# 網路上傳輸的資料 : bytes
# 檔案的儲存 : wb 寫位元組 rb 讀位元組 圖片視訊都是位元組
# 網路 + 檔案 : wb / rb

# 15.bytearray 把一個字串程式設計一個位元組陣列,較長的字串的修改節省記憶體,修改行為必須依靠編碼
# ret = bytearray('abc'*30,encoding='utf-8') # 位元組陣列
# print(ret)
# ret[0] = 102 # asc碼 65A 97abcdef 你好 您好
# print(ret)

# 16.memoryview
# l = [1,2,3]
# l[:2] # 複製

# ret = memoryview(bytes('hello,eva',encoding='utf-8'))
# print(ret[:10])

# 17.ord/chr 字元和編碼之間的轉換
# print(ord('a'))
# print(chr(97))

# 18.repr() 列印的時候輸出這個變數的資料型別
# a = 1
# b = '1'
# print(repr(a),repr(b))

# 19. len 計算長度

# 1. enumerate 列舉函式

# for i in enumerate(['a','b','c'],5):
# print(i)

# goods_lst= [
# {'name':'電腦','price':1999},
# {'name':'滑鼠','price':20},
# {'name':'美女','price':20},
# ]
# for good in goods_lst:
# print(goods_lst.index(good)+1,good['name'],good['price'])
#
# for good in goods_lst:
# print(good)

# a,b = (1,2)
# index,dic = (1, {'name': '電腦', 'price': 1999}) # 解構

# for good in enumerate(goods_lst,1):
# # print(good)
# index = good[0]
# dic = good[1]
# name = dic['name']
# price = dic['price']
# print(index,name,price)

# for index,dic in enumerate(goods_lst,1):
# print(index,dic['name'],dic['price'])

# 2. all 引數iterable 只要有一個為假返回False
# print(all((1,2,3,True)))
# print(all((1,2,3,0,True)))
# print(all((1,2,3,True,[])))
# print(all((1,2,3,True,'')))

# 3. any 引數iterable 只要有一個為真返回True
# print(any((1,2,3,True)))
# print(any((1,2,3,0,True)))
# print(any((1,2,3,True,[])))
# print(any(({},False,0,[],'')))

# 4.zip 拉鍊函式 返回迭代器-節省記憶體
# a = (1,2,3,4)
# b = ('a','b','c')
# c = ['111','222']
# d = {'k1':'v1','k2':'v2'}
# ret = zip(a,b,c,d)
# print(ret)
# for i in ret:
# print(i)

# 5. filter 篩選
# ret = filter(None,[1,2,3,0,False]) # 只保留真的
# print(ret)
# for i in ret:
# print(i)

# def func(i):
# if i % 2 != 0:
# return True
# l = [1, 4, 6, 7, 9, 12, 17]
# for i in filter(func,l): # 迭代l,每一個元素作為引數傳給func,如果func的返回值為True,那麼l中的這個元素就保留
# print(i)

# def func(i):
# if type(i) is not dict:
# return True

# def func(i):
# return type(i) is not dict
#
# l = ['sjkdhf',[1,2,3],{},()] # 去掉列表中的字典,用filter
# ret = filter(func,l)
# print(list(ret))

# filter 就像 帶著if條件的列表推導式
# l = ['sjkdhf',[1,2,3],{},()]
# print([i for i in l if type(i) is not dict])

# 6.map 一個迭代器中的每一個元素都需要去做同一個操作並返回一個結果組成一個新列表的時候map來處理
# def func(i):
# return i*'*'
#
# ret = map(func,[1,2,3])
# print(ret)
# for i in ret:
# print(i)

# range(10)內部的每一個值的平方組成的新列表
# def func(num):
# return num**2
# ret = map(func,range(10))
# print(list(ret))



# 7.sorted() 排序 根據key對應的函式的返回值的大小來排序的
# 由於必須要知道後面的值是誰 才能排出順序 所以結果就是排序後的結果而不是可迭代的
# l = [-3,1,2]
# l.sort()
# print(l)
# def func(n):
# return abs(n)
# l.sort(key = func)
# print(l)

# l = [1,-3,2]
# new_l = sorted(l) # 在不改變原列表的情況下 生成一個新列表
# print(l)
# print(new_l)
# def func(n):
# return abs(n)
# ret = sorted(l,key = func)
# print(ret)

# l = [{'name':'電腦','price':1999},{'name':'滑鼠','price':2000}]
# 按照每一個字典中商品的價格從高到低排列
# def func(dic):
# return dic['price']
# l.sort(key=func,reverse=True)
# print(l)

# new_l = sorted(l,key = func,reverse= True)
# print(new_l)

# 面試重點
# filter(func,iterable) map(func,iterable) sorted(iterable,key) max(iterable,key) min(iterable,key) zip
# 常用的
# range enumerate print input open 基礎資料型別 bytes

 
# 必會 : min max filter map sorted zip
# 常用的 : abs range print input open len sum dir eval divmod enumerate
# 基礎資料型別 : list dict str int bytes set(去重,關係運算)