函數、內置函數
阿新 • • 發佈:2017-11-07
call 地址 十六 十進制 image ted log 長度 另一個
一、函數
為什麽要用函數呢?使用函數我們可以減少代碼中的重復代碼,而且便於日後的功能的擴展和維護,也降低了代碼之間的耦合性。
那什麽是函數呢?函數是指將一組語句的集合通過一個名字(函數名)封裝起來,要想執行這個函數,只要調用其函數名即可。
函數的定義:
def func(): #函數定義規範,這是一個無參數的函數定義 print("the first function") func() #函數的調用
我們知道了函數的定義之後我們聊聊有參數的函數:
形參:變量只有在被調用的時候才分配內存單元,在調用結束時就會釋放所分配的內存單元,因此形參只是在函數的內部有效,函數調用結束返回主函數之後則不能再使用該形參變量。
實參:變量可以是常量、變量、表達式、函數等,無論實參是何種數據類型,在進行函數調用時,它們都必須是確定的值,這樣就可以把值傳遞給形參。
def func(x, y): #這裏定義是x,y都是形參表量 print(x**y) x, y = 1, 2 func(x, y) #這裏調用函數,x,y都是實參變量,有確定的值
接下來聊聊參數的傳遞,參數有位置參數,關鍵字參數,非固定參數
def func(x, y): print(x**y) a, b = 1, 2 func(a, b) #這是位置參數傳遞,與函數參數的位置一一對應 func(y = a, x = b) #這是關鍵字參數傳遞,與函數參數名一一對應,與順序無關#運行結果是: 1 2
非固定參數在定義的時候並不知道有多少個參數要傳遞,我們就可以定義非固定參數:有兩種一種是返回元組的形式,一種是返回字典的形式,接下來看個列子:
def func(*args): #*args是非固定參數的第一種形式,返回元組,args這個名字可以隨便改,但是不推薦改 print(args) a, b = 1, 2 func(a, b) #這種形式傳遞的時候要以位置參數的形式傳遞 #運行結果是: (1,2)
def func(**kwargs): #**kwargs是非固定參數的另外一種形式,返回字典 print(kwargs) func(a= 1, b =2) #參數傳遞的時候只能用關鍵字參數的形式傳遞 #運行結果是: {‘a‘: 1, ‘b‘: 2}
當參數有位置參數,還有關鍵字參數的傳遞時,一定要註意:關鍵字參數只能放在位置參數後面,並且當形參的某個參數被位置參數匹配了時,關鍵字參數不能使用別匹配過了的形參名當做關鍵字的參數名。
當然在函數中一般都會有return返回值,這個的作用就是把函數的運行結果返回回來,還有就是代表函數的結束。
二、內置函數
常用的函數如下:
>>> abs(-1) #對傳入的參數取絕對值 1 >>> all([1,2,3,4]) #傳入一個Iterable對象,若所有值都是非0,返回True,否則False True >>> any([0,0,1])#傳入一個Iterable對象,若所有值都是0,返回False,否則True True >>> ascii(‘a‘) #自動執行傳入參數的__repr__方法,將對象轉為字符串 "‘a‘" >>> ascii([1,2,3,4]) ‘[1, 2, 3, 4]‘ >>> bin(3) #將一個十進制的數轉換為一個 二進制的數 ‘0b11‘ >>> oct(10)#將一個十進制的數轉換為一個 八進制的數 ‘0o12‘ >>> hex(17)#將一個十進制的數轉換為一個 十六進制的數 ‘0x11‘ >>> bool(1) #判斷傳入參數真假 True >>> bytes(‘a‘,encoding = ‘gbk‘) #將傳遞參數轉為字節類型,第二個參數為編碼格式 b‘a‘ >>> bytes(‘你好‘,encoding = ‘gbk‘) b‘\xc4\xe3\xba\xc3‘ >>> str([1,2,3,4]) #將傳入參數轉為字符串 ‘[1, 2, 3, 4]‘ >>> char(65) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ‘char‘ is not defined >>> chr(65) #查看十進制對應的ASCII碼值 ‘A‘ >>> ord(‘A‘) #查看ASCII碼所對應的十進制數 65 >>> compile("hello",‘‘,‘exec‘) #將字符串編譯成python能夠識別或者可以執行的代碼 <code object <module> at 0x000001EA0E813810, file "", line 1> >>> eval("1+2+3") #把字符串去掉編程可執行的代碼,並返回結果 6 >>> exec(compile("print(12)",‘‘,‘exec‘))#執行python代碼 12 >>> dir(‘A‘) #獲取傳入參數對象的所有方法 >>>help() #獲取傳入參數(函數)的使用幫助文檔 >>> divmod(100,9) #獲取商和余數 (11, 1) >>> enumerate([‘a‘,‘b‘,‘c‘]) #接收序列化數據,返回一個叠代器 <enumerate object at 0x000001EA0EE6E678> >>> for i, item in enumerate([‘a‘,‘b‘,‘c‘]): ... print(i,item) ... 0 a 1 b 2 c >>> isinstance(‘a‘,str) #判斷第一個參數是否屬於第二個參數(數據類型) True >>> filter(lambda a:a>3,[2,3,4,5]) #過濾器,第一個參數是一個函數,第二個是一個可叠代對象 <filter object at 0x000001EA0EE38DD8> >>> list(filter(lambda a:a>3,[2,3,4,5])) [4, 5] >>> map(lambda a:a*3,[1,2,3,4]) #第一個參數是函數,第二個是一個可叠代的對象,對可叠代的對象每個元素都執行第一個函數 <map object at 0x000001EA0EE38DD8> >>> list(map(lambda a:a*3,[1,2,3,4])) [3, 6, 9, 12] >>> "you are a good %s"%"boy" #字符串的格式輸出 ‘you are a good boy‘ >>> "you are a good {}, age is {}".format("boy",22) #字符串的格式輸出 ‘you are a good boy, age is 22‘ >>> frozenset([1,2,3]) #將參數轉變為不可變集合 frozenset({1, 2, 3}) >>> dict() #創建字典 {} >>> float(11) #轉為浮點數據類型 11.0 >>> print(globals())#獲取當前的所有全局變量 {‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__package__‘: None, ‘__loader__‘: <class ‘_frozen_importlib.BuiltinImporter‘>, ‘__spec__‘: None, ‘__annotations__‘: {}, ‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘i‘: 2, ‘item‘: ‘c‘} >>> a = 1 >>> print(id(a)) #獲取對象的內存地址 1584488608 >>> int(11.0) #轉為整形數據 11 >>> iter() #將可叠代對象轉為叠代器 >>> iter([1,2,3]) <list_iterator object at 0x000001EA0EE37518> >>> len("hello") #獲取對象的長度 5 >>>issubclass() 檢查一個類是否是另一個類的子類。返回True或False >>>list() #列表構造器 >>>locals() #獲取局部變量 >>> max([1,2,3,4]) #獲取最大值 4 >>> min([1,2,3,4]) #獲取最小值 1 >>> open() #用來打開文件 >>> pow(1,3) #冪操作 1 >>> pow(2,3) 8 >>> range(10) #獲取一個叠代器,默認從0開始 range(0, 10) >>> repr([1,4,5,2]) #把傳入值轉換為字符串 ‘[1, 4, 5, 2]‘ >>> reversed([12,3,4,5,]) #反轉對象 <list_reverseiterator object at 0x000001EA0EE3B898> >>> list(reversed([12,3,4,5,1])) [1, 5, 4, 3, 12] >>> round(3.6) #四舍五入 4 >>> set() #創建集合 set() >>> slice(1,3,[‘a‘,‘b‘,‘c‘,‘d‘]) #切片功能 slice(1, 3, [‘a‘, ‘b‘, ‘c‘, ‘d‘]) >>> print(slice(1,3,[‘a‘,‘b‘,‘c‘,‘d‘])) slice(1, 3, [‘a‘, ‘b‘, ‘c‘, ‘d‘]) >>> sorted([3,2,1,4])#排序 [1, 2, 3, 4] >>> sum([1,2,3]) #求和 6 >>> tuple() #創建元組 () >>> type(‘b‘) #判斷參數數據類型 <class ‘str‘> >>> zip([1,2,3],[‘a‘,‘b‘,‘c‘]) #拉鏈操作,可用來生成字典 <zip object at 0x000001EA0E714D48> >>> for (i,x) in zip([1,2,3],[‘a‘,‘b‘,‘c‘]): ... print(i ,x ) ... 1 a 2 b 3 c >>>rars() #返回當前模塊的所有變量 >>>super() #返回基類 >>>property()#獲取對象的所有屬性 >>> pow(2,3,3) # 返回 2**3%3 的結果 2 >>>delattr(object,name) #刪除對象object的屬性name >>>getattr(object,name) #獲取對象object的屬性name值 >>>setattr(object,name)#修改或設置object的屬性name的值 >>>hasattr(object,name) #判斷對象object是否有那麽屬性
函數、內置函數