1. 程式人生 > 其它 >3.16學習筆記

3.16學習筆記

函式的定義與呼叫

1.函式一定要遵循先定義後呼叫的原則
	#其實就是生產出產品,才有產品可以去使用
2.函式在定義階段只檢測語法不執行程式碼
	#相當於只對產品進行檢測,但不會去使用產品
3.函式體程式碼只有在呼叫時候才執行
	#產品不使用時,相當於放在庫存裡一樣
    呼叫函式的方式:函式名加括號  # 如果有引數則傳遞引數
4.函式名其實相當於是變數名指向的是記憶體中函式體程式碼所在的位置
	#函式名相當於倉庫的名字,讓計算機尋找這個產品在哪裡
# 定義函式
 	def func():
    	 print('hello world')

函式的分類

主要分內建函式,自定義函式
1.內建函式 #(原廠出品)
	python直譯器提前定義好可以直接呼叫的函式
  	eg:len、open...  # 如何檢視程式碼的內部原始碼ctrl+滑鼠左鍵
2.自定義函式 #(自己生產)
	程式設計師自己編寫的函式
  	2.1.無參函式
    2.2.有參函式
    2.3.空函式
#無參函式:在函式定義階段括號內沒有引數
 def index():
     print('色即是空 空即是色')
 呼叫無參函式:括號內也不需要寫引數
 index()
 #有參函式:在函式定義階段括號內有引數>>>:類似於變數名
 def index(a):
     print('嘿嘿嘿 妹紙有事衝我來',a)
 呼叫有參函式:在函式呼叫階段括號內也必須傳引數>>>:類似於變數值
 index(123)

 空函式:在定義階段函式體程式碼是用pass或者...佔位
 def index():
     pass
 #空函式的作用
	前期能夠通過空函式快速的羅列出程式中大致的功能
    讓程式整體框架清晰  空函式大量的使用在專案前期的功能框架搭建

函式的返回值

# 函式的返回值其實就是在呼叫函式之後返回的結果
    s = 'hello world'
    res = len(s)  # 將len函式的返回值賦值給變數res
    print(res)

# 如何獲取函式的返回值
	變數名 = 函式呼叫
 
# 如何操作返回值
	1.當函式體程式碼沒有return關鍵字的時候 返回值是None
  	def index():
    	print('滴滴滴滴')
    res = index()
    print(res)  # None
  2.當函式體程式碼寫了return但是沒有跟任何值得時候 返回值也是None
  	def index():
    	print('滴滴滴滴')
    	return 
		res = index()
		print(res)  # None
  3.當函式體程式碼寫了return並且跟了資料 那麼寫什麼就返回什麼
  		如果寫的是值那麼直接返回值(任意資料型別)
    	如果寫的是變數名那麼返回變數名指向的值
  	def index():
    	print('滴滴滴滴')
    	name = 'zhangqiang'
    	return name
    res = index()
    print(res)  # zhangqiang
  4.return後面還可以跟多個值 逗號隔開  會自動組織成元組返回出去後
		def index():
    	print('滴滴滴滴')
    	return 111,'滴滴滴滴',222
    res = index()
    print(res)  # (111,'滴滴滴滴',222)
  5.函式體程式碼遇到return會立刻結束函式執行
  	函式體程式碼裡面寫return相當於迴圈體程式碼裡面寫break
    遇到了就立刻結束函式和迴圈的執行

函式的引數

1.函式的引數可以分為兩大類
	1.函式在定義階段括號內寫的引數 
		我們稱之為'形式引數' 簡稱為>>>:形參
	2.函式在呼叫階段括號內寫的引數
		我們稱之為'實際引數' 簡稱為>>>:實參

2.形參與實參的關係
	形參類似於是變數名、實參類似於是變數的值
		在呼叫函式的時候傳入實參 會與形參臨時繫結
		函式執行結束之後自動解除繫結

位置引數

# 位置引數就是按照位置關係一一對應就好了,也是我們最最常用的,但是要注意的是各個引數必須按順序對應。
def printstr(m,n):
    print(m)
    print(n)
return
printstr('第一個引數','第二個引數')
#輸出
第一個引數
第二個引數

預設引數

預設引數及在函式的定義的時候就給了個預設值,在函式呼叫的時候可以不傳這個預設引數。

def printint(m=1,n=100):
    sum = 0
    for i in range(m,n+1):
        sum += i
    print(sum)
    return sum
#輸出 
5050

可變引數

可變引數是指引數的個數是可變化的,可以是 0 個,可以是 1 個,也可以是多個,可變引數在定義的時候用符號 * 表示,而且在函式被呼叫的時候引數會被組裝成一個 tuple (類似 list 陣列的一種基本資料型別),比如我們要實現一個計算多個數字的平方和,多個數字即可以被當成一個可變引數傳過去,具體看下面的程式碼。

"""
*號在形參中
    可以接收多餘的位置引數 並組織成元組的形式賦值給*號後面的變數名
"""
def variableParams(*params):
    print(params) #可變引數會被組裝成一個tuple
    sum = 0
    for i in params:
        sum += i*i
        print(i)
    print(sum)
    return sum
#輸出
(2, 4)
2
4
20
"""
**在形參中
    用於接收多餘的關鍵字引數 並且組織成字典的形式賦值給**後面的變數名
"""
def index(a, b, **k):
    print(a, b, k)
index(a=1, b=2)  # 1 2 {}
index(a=1, b=2, c=3, name='jason')  # 1 2 {'c': 3, 'name': 'jason'}
index(1,2,name='jason',age=18,pwd=123)  # 1 2 {'name': 'jason', 'age': 18, 'pwd': 123}
'''需求:定義一個函式 無論傳入多少關鍵字引數都可以正常執行'''
def func(**k):
    print(k)
func()  # {}
func(a=1,b=2)  # {'a': 1, 'b': 2}
func(a=1,b=2,c=3,d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

關鍵字引數

關鍵字引數和可變引數類似,引數的個數都是可變的,所以也常被稱作可變關鍵字引數,但是和可變引數的區別在於關鍵字引數在呼叫的時候會被組裝成一個字典 dict ,而且引數是帶引數名的,關鍵字引數在定義的時候用兩個符號 ** 表示,和可變引數差不多,看下下面的具體程式碼就行。

def keyWordParams(**params):
    print(params) #關鍵字引數會被組裝成一個字典dict   

dict = {'a':6,'b':3}
keyWordParams(a=6,b=3)
keyWordParams(**dict) #如果已經存在了一個dict,可以使用**來把引數當做關鍵字引數傳入
#輸出
{'a': 6, 'b': 3}
{'a': 6, 'b': 3}