Python之函數學習(八)

python語言,即可以進行函數式的編程的語言,又是可以進行面向對象編程的語言,所謂函數,簡單的理解就是將一些語句集合到一起,這樣可以在程序中多次的調用,而不需要爲了某個功能寫重複性的代碼,這就是函數的魅力所在。在python中,函數的定義是使用關鍵字def,下面先來定義一個簡單的函數,通過這個例子來認識函數,見代碼:

def f():
   print('Hello World')

在如上的代碼中,可以看到自定義了函數f,函數中輸出是 :Hello World,那麼編寫函數後,怎麼來進行調用函數了,函數的調用也是很簡單的,像如上的函數調用爲:f(),就會輸出:Hello World

作爲函數來說,都是有參數的,如寫一個函數爲:二個數想加,返回它的結果值,那麼該函數爲:

在如上的代碼中,可以看到,定義了add的函數,參數分別是a,b,函數的返回值是a+b和的結果,在該函數中,a和b就是函數的形式參數,那麼什麼是實際參數了,調用函數add(2,3),在這裏,2和3就是函數的實際參數,另外特別的注意,在函數中,return後還可以執行其他的語句,答覆是不行的,切記,在函數中,一旦執行了return後,函數執行過程立即終止,不再執行,在函數中,return後是函數的返回值,如果沒有return,函數的默認返回值是None。

在python語言中,函數可以有默認的參數,這是其他語言所不具備的,當然,也可以對默認的參數依據實際的需求進行修改,在具體的項目中依據集體的案例來進行。就仍然以add函數爲案例來說明,見函數的默認參數的代碼:

調用函數的時候,如果不對函數的默認參數進行修改,該函數返回的結果是5,當然,也可以對其中一個函數二個參數都進行修改,再調用函數,見修改第一個參數後,函數執行的結果:

也可以對二個參數都進行修改,見修改的代碼以及執行的結果:

在如上的案例中,可以清晰的看到,函數的默認參數,可以修改,也可以不修改,具體的情況依據在項目中具體的情況來進行應用,但是特別得注意,在一個函數中,如果有多個形式參數,那麼默認參數只能是最後一個參數,不能把默認參數在前面,其他的形式參數在後面,這樣代碼會提示錯誤的,見錯誤信息:

在如上中,可以看到,如果默認參數在前面,形式參數在後面,該函數代碼提示錯誤。在python的數據結構中,分別是列表,元組,字典,以及set集合,在實際的項目中,函數的參數也有可能是動態參數,那麼有麼有可能,讓元組或者字典成爲函數的參數了,當然是可以的,在python的函數中,*代表元組,**代表字典,下面就分別就實際的案例來說明這個過程,定義一個函數,以元組作爲參數,輸出參數並查看參數的類型,見

代碼以及輸出:

在截圖中,可以看到函數的參數是元組,在具體以實際的案例再說明這個過程的應用

再來當函數的參數爲字典的時候,來演示這樣的一個結果,見代碼:

可以看到,調用函數的時候,需要說明key和value的值,來演示參數直接是字典,看調用的過程,見如下:

可以看到,代碼不同,但是輸出的實際結果是一致的。 函數的參數很多時候是靜態的,也就是說是普通參數或者是默認參數,以動態參數(*args,**kwargs)的形式,使用的比較少,下面就以函數的動態參數,來實現format的輸出,來演示這樣的一個過程,大家都知道format是格式化字符串的輸出,如:

如果使用*args或者**kwargs實現,實現的效果爲:

在函數中,必須要搞清楚,什麼是全局變量,什麼是局部變量,以及全局變量在函數中的使用,全局變量簡單的理解就是在一個模塊中的函數都是可以引用的,局部變量僅僅限於在本函數內使用,見實例以及實例的輸出:

從函數的執行結果可以看出,f1()輸出的是局部變量,f2()函數輸出的是全局變量,在函數中,可以修改全局變量嗎?假設我想讓f1()輸出的是全局變量,答案是可以的,使用關鍵字:global,使用方法爲:global 全局變量名稱,表示對全局變量重新賦值,對如上的實例修改後,見輸出:

函數可以實現模塊化的一個過程,比如登錄,註冊,下面就以函數式的編程實現這個過程,見代碼:

def login(username,password):
   """
   用於用戶登錄
   :param username:用戶輸入的用戶名
   :param password:用戶輸入的密碼
   :return:True,表示登錄成功;False:表示登錄失敗
   """
   f=open('db','r')
   for line in f:
      list=line.split('|')
      if list[0]==username and list[1]==password:
         #登錄成功
         return  True
   #用戶名或者密碼錯誤
   return False
def info():
   '''登錄成功後,獲取用戶的信息'''
   f=open('db','r')
   for line in f:
      list=line.split('|')
      print('恭喜您登錄成功,你的賬號爲:',list[0])


def register(username,password):
   '''註冊函數'''
   f=open('db','a')
   temp=username+'|'+password
   f.write(temp)
   f.close()

def exit():
   '''退出函數'''
   import  sys
   sys.exit(1)

def main():
   while True:
      t=int(input('1、登錄 2、註冊 3、退出\n'))
      if t==1:
         username=input('請輸入用戶名:\n')
         password=input('請輸入密碼:\n')
         r=login(username,password)
         if r:
            print('login success')
            info()
         else:
            print('login fail')
      elif t==2:
         username=input('請輸入註冊的用戶名:\n')
         password=input('請輸入註冊的密碼:\n')
         register(username,password)
      elif t==3:
         exit()

if __name__ == '__main__':
   main()
 
  在python中,三目運算符是很有意思的,特別是在if和else中,可以少寫代碼,比如寫一個判斷,見代碼:
a=1
if a==1:
   name='python'
else:
   name='java'
如果使用三目運算符,可以很簡單的把代碼縮小,見實現的效果:
name='python' if a=1 else 'java'

   下面來看lambda表達式,lambda是匿名函數,它的實現效果是爲:
函數名稱=lambda 函數參數:表達式,見具體的代碼:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章