函式介紹 初識函式(定義,呼叫,引數介紹)

2022-07-16 03:15:14 字數 4882 閱讀 2570

函式就是盛放**的容器,把實現某一功能的一組**丟到乙個函式中,就做成了乙個小工具。

具備某一功能的工具就是函式。

事先準備工具的過程就是函式的定義。

遇到應用場景拿來就用就是函式的呼叫

沒用函式之前面臨的問題:

1、**冗餘,程式組織結構不清晰、可讀性差

2、擴充套件性差

def 函式名(引數1,引數2,引數3...):

'''文件注釋

'''**1

**2**3

return 返回值

1、def: 定義函式的關鍵字;

3、括號:括號內定義引數,引數根據個人需求可有可無;

5、"""文件注釋""": 描述函式功能,增強函式的可讀性;

6、函式體:由語句和表示式組成;

7、return 值:定義函式的返回值,return是可有可無的。

函式名()

函式的呼叫:函式名加括號

1、先找到名字

2、根據名字呼叫**

def name():

print('艾麗絲')

name()

# 艾麗絲

定義函式不執行函式體**,但是會檢測函式語法,而**的邏輯錯誤只有在執行時才會知道

def name():

print('艾麗絲')

xname()

# 結果輸出 愛麗絲 之後,報錯 。

def name():

print('艾麗絲')

forname()

# 語法錯誤,不執行就直接就報錯

1、先通過函式名找到函式的記憶體位址

2、然後函式的記憶體位址()會觸發函式體**的執行

用return控制函式的返回值
函式內可以有多個return,但只要執行一次,整個函式就立即結束,並且將return後的值當作本次呼叫的結果返回,具體來說,函式的返回值又分為三類:

1、return 值:返回的就是該值本身

def name():

return '羅莉安'

res = name()

print(res)

# 羅莉安

2、return 值1,值2,值3:返回的就是乙個元組

def number():

return 9,9,8

res = number()

print(res)

# (9, 9, 8)

3、函式內可以沒有return,或就乙個return後沒有值,返回的就是none

def number():

return

res = number()

print(res)

# none

5.1.1、無參
def pr():

print('你好')

print('都好')

pr()

5.1.2、有參
def max(x,y):

if x>y:

print(x)

else:

print(y)

res = max(x,y)

print(res)

5.1.3、空函式
def func():

pass

5.2.1、語句形式:單純呼叫乙個功能
foo()
5.2.2、表示式形式:
res = len('hello')

print(res)

5.2.3、可以把函式呼叫當作引數傳給另乙個函式:
res = len('hello')

for i in range(res):

print(i,end=' ')

# 0 1 2 3 4

6.1.1、形參
在函式定義階段括號內定義的變數名,稱之為形式引數,簡稱形參

def func(x,y):

pass

6.1.2、實參
在函式呼叫階段括號內傳入的值,稱之為實際引數,簡稱實參

def func(x):

pass

func(5)

形參與實參的關係:
在呼叫函式時,實參的值會繫結給形參名,然後可以在函式內使用,函式呼叫完畢後,解除繫結

def func(x):

print(x)

func(5)

# 5

6.1.1、位置形參:
在函式定義階段按照從左到右的順序依次定義的形參,稱之為位置形參

特點:必須被傳值,多乙個少乙個都不行

def func(x,y):

print(x,y)

func(5,15)

# 5 15

6.1.2、預設形參:
在函式定義階段已經為某個形參賦值了,稱之為預設形參

特點:在函式定義階段就已經賦值了,意味著在呼叫階段可以不用為其賦值

def func(x,y=10):

print(x,y)

func(5) # 5 10

def func(x,y=10):

print(x,y)

func(5,20) # 5 20

ps:可以混用位置形參與預設形參,但是位置形參必須在前
注意:

1、預設形參的值只在函式定義階段被賦值一次

2、預設形參的值,通常應該是不可變型別

x=10

def foo(arg=x):

print(arg)

x=20 #定義階段arg已被賦值為10,此處的修改與預設引數arg無任何關係

foo()

# 10

a = 100

def func(x, y=a):

print(x, y)

a = 200

func(10)

# 10 100

a = [1,2,3]

def func(x, y=a):

print(x, y)

func(10)

# 10 [1, 2, 3, 6]

def func(name,b,aihao=):

print(name,b,aihao)

func('tom','種花')

func('jon','種樹')

func('aili','看電視')

'''tom 種花 ['種花']

jon 種樹 ['種花', '種樹']

aili 看電視 ['種花', '種樹', '看電視']

之所以會發生這種情況,是因為列表是個可變型別,指向記憶體位址不會改變,每次執行函式都在給他的記憶體位址加值

'''

6.1.3、位置實參
在函式呼叫階段按照從左到右的順序依次傳入的值,稱之為位置實參

特點:按照順序與形參一一對應

def func(x,y):

print(x,y)

func(15,5)

# 15 5

6.1.4、關鍵字實參
在函式呼叫階段按照key = value 的格式傳入的值,稱之為關鍵字實參

特點:可以打亂順序,但是仍然能夠為指定的形參賦值

def func(x,y):

print(x,y)

func(y = 5,x = 15)

# 15 5

ps:可以混用位置實參與關鍵字實參,但是
1、位置實參必須在關鍵字實參前

2、不能為乙個形參多次賦值

6.3、*與**在形參與實參中的應用

可變長的引數:

可變長指的是函式呼叫階段,實參的個數不固定,而實參是為了形參賦值的,所以對應著必須要有一種特殊格式的形參能用來接受溢位的實參
形參帶*args:
* 會接受溢位的位置實參,然後將其存成元組,然後賦值給緊跟其後的變數名

def num(*args):

print(args)

res = 0

for i in args:

res += i

print(res)

num(1,2,3)

# (1, 2, 3)

# 6

形參帶**kwargs:
** 會接收溢位的關鍵字實參,然後將其存為字典,然後賦值給緊跟其後的變數名

def num(**kwargs):

print(kwargs)

for i in kwargs:

print(i,kwargs[i])

num(x=1,y=2,z=3)

# # x 1

# y 2

# z 3

實參中帶*:
* 後跟的必須是乙個可以被for迴圈遍歷的型別

* 會將實參打散成位置實參

def f1(x,y):

print(x,y)

f1(*(1,2))

# 1 2

實參中帶**:
** 後跟的必須是乙個字典

** 會將實參打散成關鍵字實參

def f1(x,y):

print(x,y)

f1(**)

# 1 2

函式傳值模板:
def index(x,y,z):

print(x,y,z)

index(*args,**kwargs)

# 1 2 3

# 1 2 3

函式初識 定義,呼叫,返回值,引數

def 關鍵字 定義乙個函式 def 函式名 縮排 函式體 塊 def func print 我 print 愛 print 你 return 1314 返回值,將內容返回給呼叫者 不寫return或寫了return不寫值返回none msg func 函式名 呼叫 print msg return...

python函式定義 呼叫 引數 返回

python函式定義語法 定義 def foo print bar print bar2 如果函式內容特別少,可以一行定義 def foo print bar 呼叫 foo 函式的引數 函式經常需要有引數,函式引數的命名和變數一樣。引數可以有 也可以沒有。函式是乙個獨立的功能體,引數是這個功能體的輸...

Python 函式的定義 引數及呼叫

定義乙個函式要使用def語句,依次寫出函式名 括號 括號中的引數和冒號,然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。如果你已經把my abs 的函式定義儲存為abstest.py檔案了,那麼,可以在該檔案的當前目錄下啟動python直譯器,用from abstest import...