python中的函數

函數可重複使用的代碼塊 簡單的來說:就是將我們常用的語句起了一個名字 每次調用名字就可以執行這些語句;

函數定義:

使用關鍵字 def語句 創建函數

def  sayHello():
 print("Hello World!");

調用定義的函數直接使用函數名即可

sayHello();

輸出結果:
 Hello World!

如果函數有多個返回值如:

def remainder(a,b): #a,b 叫做形參 
 q = a//b #取商
 r  = a-q*b
 return (q,r);
res ,res2 = remainder(24,6); #傳遞進函數的叫做實參
print(res,res2);

輸出結果:
4 0

函數參數可以提供默認值  可以使用一下的方法:

def setData(name,age = '18'):
 print(name+"你好,您已滿"+age+"可以註冊這個遊戲!");
setData("呼延灼");

輸出結果:
呼延灼你好,您已滿18可以註冊這個遊戲!


還有一種方法 可以不考慮參數順序

setData(age= 22,name = '春瑞')

輸出結果:
春瑞你好,您已滿22可以註冊這個遊戲!

在函數中創建變量,作用域都是局部的 如果要在函數內部修改全局變量則可使用global語句

count = 10;
def num():
 global count;
 if(count<=10):
   count += 1;
 print(count);
  
num()
print(count);

輸出結果:
11
11

如何在函數中打印文檔使用系統特殊屬性__doc__:

def  myData(name):
 '這是一個關於提取我個人信息的方法';
 print('我叫'+name);
myData('史進');
print(myData.__doc__);

輸出結果
我叫史進
這是一個關於提取我個人信息的方法

蒐集參數 參數前加* 表示蒐集其餘的位置參數 如果不提供任何蒐集的元素 蒐集參數爲空元組

def Demo(*param):
 print("參數長度是:",len(param),"參數中稱號是:", param[1]);
Demo(1,'及時雨','宋江','天魅星');

輸出結果:
參數長度是: 4 參數中稱號是: 及時雨

使用搜集參數時 如果有額外的參數需要傳遞,則使用一下方法:

def Demo(*param,book):
 print("參數長度是:",len(param),"參數中稱號是:", param[1],'人物來源於',book);
Demo(1,'及時雨','宋江','天魅星',book="水滸傳");

輸出結果:
參數長度是: 4 參數中稱號是: 及時雨 人物來源於 水滸傳

內嵌函數的使用 (函數嵌套):

def fun1():
  print("fun1()正在被調用...");
  def fun2():
   print("fun2() 正在被調用...");
  fun2();
fun1();

輸出結果:

fun1()正在被調用...
fun2() 正在被調用...

閉包由函數嵌套形成,是在一個函數的代碼塊中(局部變量)中定義的  通過return方法返回內部函數的名稱從而形成閉包

def funX():
  print('funX()正在被調用...');
  def funY():
   print('funY()正在被調用...');
  return funY; 
funZ = funX();
funZ();

 

輸出結果:

funX()正在被調用...
funY()正在被調用...

python中使用閉包如果需要傳值的情況下:

def  fun1(x):
 def fun2(y):
  print(x*y);
 return fun2;
f = fun1(4);
f(6);

輸出結果:

24

python閉包中如果需要對非全局局部變量進行賦值 需要使用nonlocal關鍵字

def  fun1():
 x = 5;
 def fun2():
  nonlocal x;
  x *=x;
  print(x);
 return fun2;
f  = fun1();
f();

輸出結果:

25

總結

    1,定義函數:def funname();

        2,函數調用 如果有多個返回值 則可通過元組的形式接收

        3,函數實參形參的區別

        4,函數的不同調用方式:不考慮參數順序調用

        5,系統特殊屬性 打印函數中的字符串信息:myData.__doc__

        6,蒐集參數:*param  蒐集多個參數 注意:如果有額外的值需要帶有參數名

        7,內置函數(內嵌函數)的使用:兩個函數相互嵌套形成

        8,閉包函數的使用:定義在函數代碼塊中的函數,通過返回函數的名稱進行調用  關鍵字return 

    9, 在局部作用域改變全局變量的值:global關鍵字  在內嵌函數或者閉包中改變非全局局部變量的值:nonlocal關鍵字

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章