一 函式基礎
一、 為何要用函式之不用函式的問題
二、 函式分類
二 函式定義
一、 如何自定義函式?
二、 函式使用的原則:先定義,再呼叫
三、 函式在定義階段都幹了哪些事?
四、 定義函式的三種形式
三 函式呼叫
一、 呼叫函式
二、 函式返回值
三、 函式呼叫的三種形式
四 函式引數
一、 形參與實參
二、 具體應用
1、**的組織結構不清晰,可讀性差
2、遇到重複的功能只能重複編寫實現**,**冗餘
3、功能需要擴充套件時,需要找出所有實現該功能的地方修改之,無法統一管理且維護難度極大
1、內建函式
為了方便我們的開發,針對一些簡單的功能,python直譯器已經為我們定義好了的函式即內建函式。對於內建函式,我們可以拿來就用而無需事先定義,如len(),sum(),max()
ps:我們將會在最後詳細介紹常用的內建函式。
2、自定義函式
很明顯內建函式所能提供的功能是有限的,這就需要我們自己根據需求,事先定製好我們自己的函式來實現某種功能,以後,在遇到應用場景時,呼叫自定義的函式即可。
1#語法2def
函式名(引數1,引數2,引數3,...):
3'''
注釋'''
4函式體
5return
返回的值67
#函式名要能反映其意義
1函式即「變數」,「變數」必須先定義後引用。未定義而直接引用函式,就相當於在引用乙個不存在的變數名2#
測試一3
deffoo():
4print('
from foo')
5bar()
6 foo() #報錯7
8#測試二9
defbar():
10print('
from bar')
11def
foo():
12print('
from foo')
13bar()
14 foo() #
正常1516#
測試三17
deffoo():
18print('
from foo')
19bar()
2021
defbar():
22print('
from bar')
23 foo() #
會報錯嗎?
242526#
結論:函式的使用,必須遵循原則:先定義,後呼叫27#
我們在使用函式時,一定要明確地區分定義階段和呼叫階段
2829
#定義階段
30def
foo():
31print('
from foo')
32bar()
33def
bar():
34print('
from bar')
35#呼叫階段
36 foo()
#只檢測語法,不執行**
#也就說,語法錯誤在函式定義階段就會檢測出來,而**的邏輯錯誤只有在執行時才會知道
#1、無參:應用場景僅僅只是執行一些操作,比如與使用者互動,列印
#2、有參:需要根據外部傳進來的引數,才能執行相應的邏輯,比如統計長度,求最大值最小值
#3、空函式:設計**結構
#函式的呼叫:函式名加括號
#1 先找到名字
#2 根據名字呼叫**
1 無return->none2return 1個值->返回1個值
3return 逗號分隔多個值->元組4#
什麼時候該有返回值?5#
呼叫函式,經過一系列的操作,最後要拿到乙個明確的結果,則必須要有返回值6#
通常有參函式需要有返回值,輸入引數,經過計算,得到乙個最終的結果7#
什麼時候不需要有返回值?8#
呼叫函式,僅僅只是執行一系列的操作,最後不需要得到什麼結果,則無需有返回值9#
通常無參函式不需要有返回值
#1 語句形式:foo()
#2 表示式形式:3*len('hello')
#3 當中另外乙個函式的引數:range(len('hello'))
#形參即變數名,實參即變數值,函式呼叫時,將值繫結到變數名上,函式呼叫結束,解除繫結
1#1、位置引數:按照從左到右的順序定義的引數
2位置形參:必選引數
3位置實參:按照位置給形參傳值45
#2、關鍵字引數:按照key=value的形式定義的實參
6無需按照位置為形參傳值
7注意的問題:
8 1. 關鍵字實參必須在位置實參右面
9 2. 對同乙個形參不能重複傳值
1011
#3、預設引數:形參在定義時就已經為其賦值
12可以傳值也可以不傳值,經常需要變得引數定義成位置形參,變化較小的引數定義成預設引數(形參)
13注意的問題:
14 1. 只在定義時賦值一次
15 2. 預設引數的定義應該在位置形參右面
16 3. 預設引數通常應該定義成不可變型別
171819#
4、可變長引數:
20可變長指的是實參值的個數不固定
21 而實參有按位置和按關鍵字兩種形式定義,針對這兩種形式的可變長,形參對應有兩種解決方案來完整地存放它們,分別是*args,**kwargs
2223 **********=*args**********=
24def foo(x,y,*args):
25print
(x,y)
26print
(args)
27 foo(1,2,3,4,5)
2829
def foo(x,y,*args):
30print
(x,y)
31print
(args)
32 foo(1,2,*[3,4,5])
3334
35def
foo(x,y,z):
36print
(x,y,z)
37 foo(*[1,2,3])
3839 **********=**kwargs**********=
40def foo(x,y,**kwargs):
41print
(x,y)
42print
(kwargs)
43 foo(1,y=2,a=1,b=2,c=3)
4445
def foo(x,y,**kwargs):
46print
(x,y)
47print
(kwargs)
48 foo(1,y=2,**)
4950
51def
foo(x,y,z):
52print
(x,y,z)
53 foo(**)
5455 **********=*args+**kwargs**********=
5657
deffoo(x,y):
58print
(x,y)
5960
61print('
====>')
62 foo(*args,**kwargs)
6364
#5、命名關鍵字引數:*後定義的引數,必須被傳值(有預設值的除外),且必須按照關鍵字實參的形式傳遞
65可以保證,傳入的引數中一定包含某些關鍵字
66def foo(x,y,*args,a=1,b,**kwargs):
67print
(x,y)
68print
(args)
69print
(a)70
(b)71
(kwargs)
7273 foo(1,2,3,4,5,b=3,c=4,d=5)
74結果:
75 2
76 (3, 4, 5)
77 3
78
一 函式定義
函式的建立 def關鍵字定義 def my function param1,param2 return param1 2 param2 2注意函式名後面的小括號不能省略。函式的呼叫 my function 3,4 25 函式的文件字串 函式文件 用於描述函式的功能和一些注意事項。def my fun...
python def 定義函式(一)
一.函式的定義 在某些程式語言當中,函式宣告和函式定義是區分開的 在這些程式語言當中函式宣告和函式定義可以出現在不同的檔案中,比如c語言 但是在python中,函式宣告和函式定義是視為一體的。在python中,函式定義的基本形式如下 def function params somthing retu...
php如何定義函式,php如何定義乙個函式
函式是完成乙個特定功能的 集合,可以分為系統函式和使用者函式。使用者可以通過建立自定義函式實現特定需要。1.函式定義語法結構 php中允許使用者使用function關鍵字建立乙個自定義函式。語法結構 function 函式名稱 引數1,引數2,函式內的 php對函式名稱的限制比較少,可以是以字母或下...