1. 程式人生 > >Python學習日記day5 函數

Python學習日記day5 函數

second user def 12px res 調用 python 匿名函數 log

一.為什麽要使用函數

  1.避面代碼重用

  2.提升可讀性

  3.使程序變得易維護

二.函數的定義與調用

  def helloword(): #函數定義,括號中可加參數

    print("get out!")

  helloword() #調用函數

三.函數參數與局部變量  

  形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變量

  實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值

  def calc(x,y): #其中x,y就是形參

    print(x+y)

  calc(a,b) #a,b為實參

  1.默認參數:

    def cout(name,sex,country = "CN"):

      print(name,sex,country)

    cout("yungexing","f")

  2.關鍵參數

    cout(sex="f",name""feilie) #關鍵參數要在默認參數之後

  3.非固定參數  

  def user_info(name,age,*args):
  print(name,age,args)
  user_info("link",1000,"pig","GoodGame")
>>>link 1000 (‘pig‘, ‘GoodGame‘)

  另一種非固定參數
  def user_info(name,age,**kwargs):
  print(name,age,kwargs)
  user_info("link",1000,pet= "pig",total = "GoodGame")
>>>link 1000 {‘pet‘: ‘pig‘, ‘total‘: ‘GoodGame‘}
  args和kwargs在調用函數時都可以不填
  4.局部變量
  name = "link"
  def cout_name():
   print("before change",name)
   name = "zelda"
  print("after change",name)
  cout_name(name)
  print(name)
>>>
before change linkafter
change zelda
link
在函數內改變全局變量,方法如下

  name = "link"
  def cout_name():
  global name
  print("before change",name)
   name = "zelda"
   print("after change",name)
  cout_name()
  print(name)
>>>

before change link
after change zelda
zelda

三.嵌套函數

def func1():
def func2():
print("the first")
func2()
print("the second")
func1()
print("the last")
>>>

the first
the second
the last

不可以在最外層調用func2,否則會報錯。因為函數只有被調用時才會執行

四.遞歸

  在一個函數內調用自身本身就是遞歸函數

  

def calc(n):
print(n)
if int(n/2) == 0:
return
else:
return calc(int(n/2))
calc(10)
>>>

10
5
2
1

五.高階函數

  高階函數就是將函數名作為參數傳入另一個函數之中,或者返回值之中有函數名,例子如下

  def func1(name,fun2): fun2(name)

def func2(eg):
print(eg)
func1("Fate",func2)
>>>Fate

六.匿名函數
  
匿名函數就是不需要顯示的指定函數
  
  res = map(lambda x:x*x,[1,3,5,7,9])
  for i in res:
   print(i)
>>>

1
9
25
49
81

 

Python學習日記day5 函數