1.什么是函數
它是一段功能代碼,理解為一種功能行為,在內存中有空間區域,函數需要被調用才能執行(通過函數名來調用);
好處:
1).提高代碼的復用性
2).提升代碼的閱讀性
3).增加代碼的擴展性
4).增強了代碼的維護性
2.函數有五要素組成
①.函數修飾符 關鍵字def開頭
②.函數返回值類型 有返回值(類型:int、float、str、list...)/沒有返回值
③.函數名 函數的名字(標識符一種,滿足規則和規范)
④.形參列表 定義在小括號內(可能有形參,也可能沒有)
⑤.函數體 一段業務邏輯代碼
3.定義格式
① ③(④):
⑤
4.函數名的定義
標識符的一種,滿足規則和規范:
對於其規范,和變量名保持一致
5. 自定義函數的四種定義場景
1).無參無返回值
2).無參有返回值
3).有參無返回值
4).有參有返回值
演示自定義函數的四種場景:
1 #1無參無返回值 2 def func1(): 3 print('hello method...') 4 5 #2無參有返回值 6 def func2(): 7 return True 8 9 #3有參無返回值 10 def func3(a,b): 11 print(a + b) 12 13 #4有參有返回值 14 def func4(a,b): 15 #在自定義函數中調用本模塊(.py文件)別的自定義函數 16 func1() 17 return a if a > b else b
6.形參列表的多種定義情況:
演示形參的多種定義情況:
1). 默認參數的使用:
1 def func1(name="張三",age=18,height=175.5): 2 print(name,age,height) 3 4 # 調用自定義函數(不傳遞參數):會使用默認參數參與之后的運算 5 func1() 6 # 調用自定義函數(傳遞部分參數):傳遞的部分使用傳遞內容,其余部分使用默認參數參與運算 7 func1("李四")
2). 一般參數的使用:
1 def func2(name,age,address): 2 print(name,age,address) 3 4 #調用自定義函數:必須傳遞參數,而且位置和個數都要對的上 5 func2("李雷",21,"北京")
3). 關鍵字參數的使用:(好處:不用記住每個變量的位置)
1 def func3(name,age,address): 2 print(name,age,address) 3 4 #體現在調用自定義函數上:傳遞類型鍵值對的組合 5 func3(address="上海",name="韓梅梅",age=20)
7.可變參數的使用
在定義一項功能時,對於參數層面(到底幾個不確定),此時可以使用可變參數來實現;
參數解釋:*args:接受0~無窮多個單值,存入到一個元祖中返回; **kwargs:接受0~無窮多個鍵值對組合,存入到一個字典中返回。
1 def func4(*args,**kwargs): 2 print(args,type(args)) # 元祖類型 3 print(kwargs,type(kwargs)) # 字典類型 4 5 func4()
案例1:實現多個整數求和的操作
自定義函數:兩個原則
1).有沒有形參? 有,但是個數不確定,使用可變參數
2).有沒有返回值? 可有可無
1 def mySum(*args): 2 sum1 = 0 3 for i in args: 4 sum1 += i 5 return sum1 6 7 mySum = mySum(1,2,3,4,5)
案例2:
1 def func1(*args,**kwargs): 2 print(args) 3 print(kwargs) 4 5 func1(0,100,3.14,True,"abcd",[10,20,30],name="班長",age=25) 6 7 # 以下代碼會報錯:因為*args定義在前,**kwargs定義在后,由於在傳遞參數的過程中已經出現了類似name="班長", 8 # age=25這樣的代碼,那么其后就不能出現單值數據的傳遞了 9 func1(0,100,3.14,True,"abcd",[10,20,30],name="班長",age=25,-100,3.14)
【注意事項】:
1).形式參數(形參):它可以認為是一個入口(在函數名后面的小括號中定義),並不存在實際數據,在代碼的體現上就是定義變量,等着接受實參;
2).實際參數(實參):實實在在存在的數據(可以是各種類型),將實際參數傳遞給形式參數(過程:稱為參數傳遞),之后在函數體中參數運算的都是實際參數
3).返回值:在整個函數執行完畢后需不需要返回給程序一些數據(分類:有返回值/沒有返回值)
如果有返回值:需要使用關鍵字return進行數據的返回
4).return關鍵字的作用:
(1).將需要返回的數據給到函數的調用處(調用者)
(2).表示函數的結束
(3).和return關鍵字在同一作用域,在其后面不要去定義任何的代碼,因為永遠不可能被執行到
(4).return關鍵字后面也可以不定義任何的內容,它的作用僅僅意味着函數結束了...
8.全局變量&局部變量
全局變量: 1).作用域比較大,定義在.py文件中,函數外;2).可以被文件中任何一個函數所使用。
局部變量:1).作用域比較小,函數的形參或者函數體中; 2).只能被當前的這個函數所使用,出了此函數,外部夠不着它。
在局部位置修改全局變量的值:先使用global關鍵字定位到需要修改的全局變量,然后在使用全局變量 = 值操作進行修改。
在內部函數中修改外部函數中局部變量的值:先使用nonlocal關鍵字定位到需要修改的局變變量,再使用局部變量 = 值操作進行修改。
1 a=10 #a為全局變量 2 def func1(): 3 global a 4 a=20 5 print(a) 6 def func2(): 7 b=100 #b為局部變量 8 print(a,b) 9 10 # 以下代碼有問題:因為b是屬於func2()函數中的局部變量,出了func2()函數 外界都不能使用 11 print(b)
9.外部函數&內部函數
內部函數:定義在外部函數的內部,成為其一部分(認為是外部函數的成員)
1 def outer(): 2 print("我是外部函數...") 3 b=20 4 def inner(): 5 print("我是內部函數...") 6 nonlocal b 7 b=30 8 print(b) 9 inner() 10 print(b) 11 outer() 12 13 # 以下代碼有問題:對於內部函數的執行只能依賴於它的外部函數,不能出了外部函數在外界單獨執行; 14 inner( )
[補充概念】:
1.標識符
大白話:凡是可以自己起名字的地方,都是標識符
遵守以下三點規則:
1).范圍:a~z、A~Z、0~9、下划線(_)
2).數字不能開頭:abc123 合法 ; 123abc 不合法
3).不能使用關鍵字和保留字,但是可以包含關鍵字和保留字 :class 不合法 ; classroom 合法
遵守以下兩點規范:
1).駝峰式原則:
對於變量而言:如果是多個單詞組成,第一個單詞首字母小寫,其余單詞首字母大寫,剩余字母全部小寫。舉例:helloWolrdChina
2).下划線原則:
舉例:hello_world
2.常量和變量
常量:一旦定義,其值不可變;例如:0、100、3.14、True/False、"abc"...
變量:它是內存中的一塊存儲區域,可以存儲數據,並且隨時可以改變區域中的內容,
第一次存儲進去的數據我們稱為初始化值;
變量的定義格式:
1).變量名 = 值
2).變量名1,變量名2,...,值n = 值1,值2,...,值n
3).變量名1 = 變量名2 = ... = 變量名n = 值
3.弱&強類型語言
強類型語言:在定義變量的時候,就需要有明確的數據類型;
弱類型語言:在定義變量的時候,不需要有明確的數據類型;
4.關鍵字
理解:被python語言賦予特殊函數的英文單詞 例如:class、if、else、while、for...
5.內置函數
執行可以通過定義函數名執行成功的都是內置函數;函數之間是可以嵌套調用的(案例中有體現)。常用的內置函數:round();abs();max();min();sum();hex();oct();bin();pow(x,y);divmod(x,y);ord();chr();type();id();len() ...
1). round(num1,num2):得到四舍五入之后的值;round里面的的第一個參數是接收的變量,第二個參數是保留多少位小數(可不填,表示保留整數位)
2). abs(num):得到數據的絕對值,特點:不管正數還是負數的絕對值都是其正數的形式,0的絕對值還是0
3). max(seq)、min(seq):得到seq對象的最大、最小值
4). sum(seq):得到seq中所有元素累加以后的和值返回
【注意事項】:1).對於str類型的數據不能使用sum()求和,沒有意義。2).對於sum()函數只能接受容器類型數據,不能接受多個單值數據
1 # 以下兩個函數就是非法的 2 print(sum('12345')) 3 print(sum(1,2,3,4,5))
5). hex(num):將十進制數據num轉換為十六進制返回(數據類型:str)
6). oct(num):將十進制數據num轉換為八進制返回(數據類型:str)
7). bin(num):將十進制數據num轉換為二進制返回(數據類型:str)
8). pow(x,y):計算x的y次方返回
9). divmod(x,y):返回一個元祖對象,有兩個元素,第一個元素記錄了x除以y后的商,第二個元素記錄了x除以y后的余數
10). ord(str):傳入字符數據,返回整數值(ascii碼值)
11). chr(num):傳入整數數據(ascii碼值),返回字符數據
【補充】字符編碼(字符集),記住3個分界點: '0' --> 48; 'A' --> 65; 'a' --> 97
12). type():得到數據的類型返回
13). id():得到數據的內存地址(十進制的形式)返回
14). len():得到數據的長度