1. 程式人生 > >函數、內置函數

函數、內置函數

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) #將傳遞參數轉為字節類型,第二個參數為編碼格式
ba
>>> 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是否有那麽屬性

函數、內置函數