1. 函數的定義:
1 . 含義:我們把實現某一功能的代碼定義為一個函數,在需要使用時,隨時調用,十分方便。對于函數,簡單理解就是可以完成某功能的代碼塊,可反復使用。
Python提供了許多內建函數,比如print()。也可以自己創建函數,這被叫做用戶自定義函數。
2 . 建立一個函數:
def functionname([parameterlist]):"""comments"""founctionbody含義:
functionname:為函數名,可以自定義,在調用函數時使用。
parameterlist:為可選參數,用于指定向函數中傳遞的參數。如果有多個參數,各個參數間用逗號(,)隔開,如果不指定,則表示該函數沒有參數。
comments:函數指定注釋,注釋內容為其功能,傳遞的參數的作用等,讓人能快速了解該函數
founctionbody:為實現功能的語句塊
3 . 調用函數:
def hello():print('hello')print('python')# 通過函數名來調用函數
hello()運行結果:
hello
python
4 . 函數的鑲套:
def westos():print('is westos')def python():print('is python')python()
westos()運行結果:
is westos
is python
2 . 參數傳遞
函數參數的作用是傳遞數據給函數使用,函數利用接收的數據進行具體的操作處理。
區別形式參數和實際參數
形式參數:簡稱形參,定義函數時寫的參數叫形參。
實際參數:簡稱實參,調用函數時寫的參數。
def func(形參) #定義func函數passfunc(實參) #調用func函數
形參:位置參數 默認參數 可變參數 關鍵字參數
1 位置參數:
def func(name,score):print(name+'的成績為:'+score+'分')func('小李','98')運行結果:
小李的成績為:98分
2 默認參數
在定義函數的時候,給定一個參數默認值,當調用函數的時候,如果沒有給該形參傳入實參,則使用該默認值進行運算。
def add(x,y=10): # 定義函數,其中第二個形參的默認值為10print(x+y)
add(5,3) # 當調用函數的時候,傳入兩個實參,則使用傳入的值進行運算
add(5) # 當只傳入一個值的時候,另一個使用默認參數值進行運算運行結果:
8
15
3 可變參數
當參數的個數不確定的時候,可以使用可變參數,來表示該函數可以接收任意個參數
在使用可變參數的時候:
其中*a 表示對參數進行解包,將序列中的元素一個一個的拿出來。
a的對象類型是一個元組。
def mysum(*a): # 定義函數的形參數是任意個print(*a)print(a)sum = 0for item in a:sum += itemprint(sum)
nums = [1,2,3,4]
nums1 = (1,2,3,4)
nums2 = {1,2,3,4}
mysum(*nums)
mysum(*nums1)
mysum(*nums2)運行結果:
當實參是一個列表的時候,返回值
1 2 3 4 # 解包列表的得到的數據
(1, 2, 3, 4) # a的對象類型為一個元組
10 # 最后的返回值當實參是一個元組的時候,返回值
1 2 3 4 # 解包元組的得到的數據
(1, 2, 3, 4) # a的對象類型為一個元組
10 # 最后的返回值當實參是一個集合的時候,返回值
1 2 3 4 # 解包集合的得到的數據
(1, 2, 3, 4) # a的對象類型為一個元組
10 # 最后的返回值
4 關鍵字參數
關鍵值參數是指使用形參的名字來確定輸入的參數值。
def func(name,score):print(name+'的成績為:'+score+'分')func(score='100',name='redhat') #順序并沒有一致運行結果:
redhat的成績為:100分
3. 函數的返回值
返回值:函數運算的結果,還需要進一步操作,給函數一個返回值
return用來返回函數執行的結果,如果函數沒有返回值,默認返回None
一旦遇到return 函數執行結束,后面的代碼不會執行
多個返回值的時候,python會幫我們封裝成一個元組類型
def getStuInfo(name,age):print(name)print(age)
a = getStuInfo('redhat',16)
print(a)運行結果:
redhat
16
None # 函數沒有返回值,函數執行的結果默認返回None
當函數存在返回值的時候,一旦遇到return 直接結束 后面的代碼就不會在再執行。
def getStuInfo(name,age):print(name)if name == 'redhat' :return 'name is redhat' # 函數的返回值print(age)
a = getStuInfo('redhat',16)
print(a)運行結果:
redhat
name is redhat # 存在返回值,并且成功返回該返回值,之后的代碼將不會再執行
4 . 作用域
變量的作用域指程序代碼能訪問該變量的區域,一般根據‘有效范圍’,將變量分為“局部變量”和“全局變量”。
變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python的作用域一共有4種,分別是:
L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全局作用域
B (Built-in) 內置作用域(內置函數所在模塊的范圍)
total = 0 # 這是一個全局變量
def sum(arg1, arg2):# 返回2個參數的和total = arg1 + arg2 # total在這里是局部變量.print("函數內是局部變量 : ", total)return total# 調用sum函數
sum(10, 20)
print("函數外是全局變量 : ", total)運行結果:
函數內是局部變量 : 30
函數外是全局變量 : 0
練習:
案例1:
編寫一個函數cacluate, 可以接收任意多個數,返回的是一個元組.
元組的第一個值為所有參數的平均值, 第二個值是大于平均值的所有數.
def cacluate(*x):sum = 0for i in x :sum += iaverage = sum/len(x)li = []for k in x :if k > average :li.append(k)return (average,li)
案例2:
編寫一個函數, 接收字符串參數, 返回一個元組,‘ehllo WROLD’
元組的第一個值為大寫字母的個數, 第二個值為小寫字母個數.
def count(s):upper_c = 0lower_c = 0for i in s :if i.isupper() :upper_c +=1if i.islower() :lower_c +=1return (upper_c,lower_c)
print(count(input(':')))
題目:兩個乒乓球隊進行比賽,各出三人。
甲隊為a,b,c三人,乙隊為x,y,z三人。
已抽簽決定比賽名單。有人向隊員打聽比賽的名單。
a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。
team = ['x','y','z']
all_order = []
for i in team :for k in team :if k != i :for m in team:if m !=k and m !=i :all_order.append([i,k,m])
for t in all_order :if t[0] !=team[0] and t[2] != team[0] and t[2] != team[2] :print('a — %s ; b — %s ; c — %s ' %(t[0],t[1],t[2]))