Python14 函数
函數
面向對象編程: 類----class
面向過程編程:過程---def
函數式編程:函數---def
def test(x):'''描述'''x +=1return x#def是定義函數的關鍵字#test是函數名稱#(x)是參數#x+=1是 函數體,是一段邏輯代碼#return 定義返回值,返回給test函數 ,并結束函數1.
def func1():'''test'''print ('in the func1')return 0#函數式編程def func2():'''test2'''print ('in the func2')#定義面向過程的函數,沒有return; 過程就是沒有返回值的函數 x = func1() y = func2()print ('from func1 return is %s' %x) print ('from func2 return is %s' %y)
雖然過程函數沒有return,但是python會隱式的給返回一個None,所以兩者差別并不大
2.
def logger():with open('test.txt','a') as f:f.write('end action\n')def test1():print('in the test1')logger()def test2():print('in the test2')logger()def test3():print('in the test3')logger()test1() #執行函數 test2() test3()#可以看到三個函數都調用了logger這個函數,否則的話,我們需要在每三個函數中都要寫#with open這些代碼; 調用了logger函數的話,就免去寫重復的代碼了。我們要在三個函數每次寫入的時候都加入時間戳
import timedef logger():time_format = '%Y-%m-%d %X' #定義格式為年、月、日、小時分鐘秒time_current = time.strftime(time_format) #顯示時間,以time_format定義的格式來顯示with open('test.txt','a') as f:f.write('%s end action\n' %time_current)#修改logger函數,這樣test的三個函數就全都被修改了。#時間格式%后面的字母根據大小寫的不同,顯示的格式也不同。
執行后看到文檔內容
定義函數的好處:
代碼重用
保持一致性(修改代碼不會因為認為的原因導致相同的代碼寫錯后不一致)
可擴展性
3.
return除了會返回值給函數,還終止函數的運行,所以后面的print沒有打印。
return 將0返回給了test函數,賦值變量后,這個變量就等于這個return的值。
return幾乎可以返回任何類型
為什么要用return,return的作用是什么: 在編程使用函數時,可能代碼會很多,然后根據不同的結return不同的值,根據不同的值可以用作下面代碼的判斷,然后做不同的動作; 比如根據True或False,下面的代碼執行不同的操作。
定義三個函數,一個沒有return,一個return單個元素數字,一個return多個元素
沒有return默認返回None
return單個元素,會正常返回定義的值
return多個元素,會通過元組返回(相當于一個打包,然后一起返回)
4.
定義帶參數的函數
調用函數時,如果不賦值給參數就會報錯
賦值給參數,位置要對應.
1賦值給了x
2賦值給了y
x與y叫做形參:需要引用、被賦值的參數
1與2叫做實參:實際的參數
1與2是真是存在的,會在內存中占用空間;x與y是形式上的參數,如果x與y沒有引用任何值,則不會占用內存空間。
默認的情況下,賦值參數需要位置一 一對應,否則的話就需要指定參數的賦值
位置參數和關鍵詞參數是可以混寫的,默認參數需要位置對應,1賦值給了x,2賦值給了y
這樣賦值是會報錯的,第一個賦值是y=1(使用的是關鍵詞參數賦值),第二個我們使用的是位置參數賦值,但是第二個參數根據位置應該對應的是y,課時y在前面已經被占用了,所以會報錯。
可以看到關鍵參數在位置后面寫就沒有報錯;
5.
在創建函數時,可以給參數賦值默認的值
在給參數賦值時,如果不從新賦值,那么參數就會使用創建函數時給賦予的默認值
可以通過位置和關鍵詞來修改默認參數值
把參數從新賦值就不會使用默認參數值了,會使用新的賦值來覆蓋默認的參數值
默認參數的用途:比如安裝軟件的默認路徑,或者一些默認勾選的選項; 比如設置某個程序的默認端口等等。
6.參數組
當定義一個函數的參數時,實參不能少于或多于形參,否則執行就會報錯; 有多少個實參,定義函數時就得定義多少個形參,但是如果參數需要一萬個,則不可能去寫一萬個參數。
所以這里我們可以使用參數組;當需要的參數數量過多或者實參所需求的數量不明確時,就可以使用參數組;
定義參數組的關鍵符號是‘*’,后面定義一個組名即可
可以看到定義多少個參數都可以,打印時以元組形式打印出來。
‘*’ 用來接收N個位置參數,轉換成元組;不能接收關鍵字參數。。
傳參數值的時候,也可以使用,比如([1,2,3,4,5]),只不過打印出來的時候會轉換成元組
使用兩個*,表示可以傳入字典參數; 把N個關鍵字參數,轉換成字典的方式。
‘’用來接收N個關鍵字參數,轉換成字典。
傳入參數也可以使用兩個**,只不過字典的寫法稍有差別
打印字典key對應的value
位置參數和參數組一起使用;
這里沒有定義參數組的值,所以打印出來為空的字典
位置參數和參數組的值,被分開打印了
使用兩個位置參數和一個參數組;第二個位置參數被打印的是默認值
age位置參數不使用默認值,根據關鍵字參數的方式對其修改
age根據位置參數的方式對其修改
*args 接收N個位置參數;**kwargs接收N個關鍵字參數; 在賦值個參數時,后面并沒有符合位置參數的值,所以打印位置參數會顯示一個空的元組。
這樣4種參數就都可以體現出來了
函數嵌套函數;
可以看到此處的代碼與上面的一樣,只是logger這個函數在調用函數的下面,執行時就會報錯,所以在調用函數時,一定要在相關函數的下面去掉用,否則是找不到相關內容的。
轉載于:https://blog.51cto.com/daimalaobing/2046665
總結
以上是生活随笔為你收集整理的Python14 函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到弟弟腿受伤了是什么意思
- 下一篇: javascript消除字符串两边空格的