python基礎(十) - 函數的定義及用法


 

前言:本文主要介紹python函數的定義和調用、函數的參數、函數的作用域、內置函數。

 

一、函數的定義和調用


1.函數的作用

對特定的一些功能進行封裝,提高代碼的重用率,進而提升開發的效率,格式:

def  函數名()
    # 函數體

2.函數名的命名規范

1)可以由字母、數字及下划線(_)組成,但不能用數字開頭,且不能使用python中的關鍵字。

2)函數命名的風格: 單詞之間下划線隔開(python中函數命名推薦這種風格), 大駝峰小駝峰寫法 ,如:UserName、userName英文單詞首字母大寫。

3.函數的返回值:return

語法:return 表達式

1)函數的返回值是由return來決定的,return后面寫什么,函數的返回值就是什么

2)如果函數中沒有return,那么函數的返回值默認為 None

3)return 后面沒有任何內容,返回值也是None

4)函數要返回多個數據,可以在return后面,每個數據之間用逗號隔開,調用函數之后接收到的是個元組形式的數據

注意:return的作用除了返回結果外,也可以用於結束函數的運行,只要函數中執行到return,就直接返回內容,跳出函數,return后面的代碼就不會執行

4.調用函數

函數名(),示例如下:

def func():
    print('python666')
    return "abc", 4444
    print("99999999999999999999")  # 該行不會被執行

res = func()
print(res)

運行結果:

C:\software\python\python.exe D:/myworkspace/test/test/test.py
python666
('abc', 4444)

Process finished with exit code 0

 

二、函數的參數


1.函數形參和實參

定義的參數稱為:形參

調用實際傳遞的為:實參

2.參數傳遞的兩種形式:

位置參數:按位置順序進行傳遞

關鍵字參數:通過關鍵字指定傳給某個參數

# 位置參數(按位置順序進行傳遞)
def add_num(a, b, c):  # a,b是形參,沒有真正的值,用於接收實參
    return a + b - c

res1 = add_num(67, 12, 1)  # 此時傳入的67,12是實參
print(res1)

# 關鍵字參數(通過關鍵字指定傳給某個參數)
res2 = add_num(b=34, a=12, c=11)
print(res2)

# 參數混用時,位置參數寫最前面,關鍵字參數寫在后面,不能重復傳
res3 = add_num(30, c=12, b=12)
print(res3)

運行結果:

C:\software\python\python.exe D:/myworkspace/test/test/test.py
78
35
30

Process finished with exit code 0

3.函數定義的三種形參

  • 必需參數  如:def add_num(a, b, c) ,a,b,c三個參數都必須要傳
  • 默認參數(缺省參數) 如:def add_num(a, b, c=99) ,c是默認參數,可以傳,可以不傳(不傳時直接使用c=99)
  • 不定長參數:如:def add_num(a, b, *args, **kwargs) ,其中a和b是必需參數,*args 可以不傳,也可以傳多個,它接收必需參數、默認參數完之外的位置參數,以元組的形式保存,**kwargs 可以不傳,也可以傳多個,接收必需參數、默認參數之外的關鍵字參數,以字典的形式保存
def test(a, b, c, *args, **kwargs):
    print("a的值", a)
    print("b的值", b)
    print("c的值", c)
    print("*args的值", args)
    print("**kwargs的值", kwargs)

va1 = test(11, 22, 33, 4, 3, 2)
va2 = test(11, 5, 6, 7, g=33, k=22, f=12)
print(va1, va2)

運行結果(有None是因為函數中沒有返回值,調用了兩次函數因此打印了兩個None):

C:\software\python\python.exe D:/myworkspace/test/test/test.py
a的值 11
b的值 22
c的值 33
*args的值 (4, 3, 2)
**kwargs的值 {}
a的值 11
b的值 5
c的值 6
*args的值 (7,)
**kwargs的值 {'g': 33, 'k': 22, 'f': 12}
None None

Process finished with exit code 0

擴展:不定長參數可以使用*對元組(列表也可以,但一般不用)進行拆包,**可以對字典進行拆包,拆包原理如下:

# 拆包
def func():
    return 11,22,33   # 當返回結果有多個值時,會以元組的形式返回

c1 = func()
print(c1)    # 返回的是一個元組(11,22,33)

a,b,c =func()   # 可以通過變量把返回的元組進行拆包,接收對應的值,a接收了11,b接收了22,c接收了33
print(a,b,c)   # 返回對應的元素11,22,33

運行結果:

C:\software\python\python.exe D:/myworkspace/test/test/test.py
(11, 22, 33)
11 22 33

Process finished with exit code 0

拆包在自動化測試中有很大的作用,如果不理解,可以動手多敲幾遍,以下是拆包示例:

def func(a, b, c):
    print('這是', a)
    print('這是', b)
    print('這是', c)

# 利用*、**分別對元組、字典拆包:只能用在函數調用時使用
# 對元組進行拆包
func(*(1, 2, 3))

print('-------分割線-------')
tu = (4, 5, 6)
func(*tu)

print('-------分割線-------')
# 對字典進行拆包, 注意**kwargs接收的是接收必需參數、默認參數之外的關鍵字參數
# 因此字典的鍵要與函數的形參一致
dic = {'a': 88, 'b': 90, 'c': 91}
func(**dic)

運行結果:

C:\software\python\python.exe D:/myworkspace/test/test/test.py
這是 1
這是 2
這是 3
-------分割線-------
這是 4
這是 5
這是 6
-------分割線-------
這是 88
這是 90
這是 91

Process finished with exit code 0

 

三、函數的作用域


 1.全局變量

直接定義在py文件(即模塊)中的變量,叫全局變量,在該文件中任何地方都可以使用

2.局部變量

在函數內部定義的變量,叫做局部變量,只能在該函數內部使用,函數外部無法使用

3.聲明局部變量

關鍵字:global  在函數內部聲明全局變量。

變量的查找過程:由內到外(先找函數自身的,沒有再去外面找)。

  

如果要在外部使用函數內部定義的局部變量,需要聲明該變量,簡單來說就是告訴程序,這個變量在這個模塊內都能使用。

name = "張三"     # 定義一個全局變量

def func():
    # global a  # 如果要聲明全局變量,要加上這句
    a = 100     # 定義一個局部變量
    print(a)
    print(name)

func()   # 調用函數
print("------分割線-----")
print(name)     # 全局變量哪里都能使用
print(a)     # 這是一個局部變量,打印a運行會報錯說a沒有被定義,如果要使用a就要聲明a為全局變量

print("------分割線-----")
aa = 10
def func():
    print(aa)    # 變量的查找過程:由內到外(先找自身的,沒有再去外面找)
func()

運行結果(因為報錯了,所以后面的aa沒有打印出來,只要聲明全局變量就不會報錯):

C:\software\python\python.exe D:/myworkspace/test/test/test.py
100
張三
------分割線-----
張三
Traceback (most recent call last):
  File "D:/myworkspace/test/test/test.py", line 12, in <module>
    print(a)     # 這是一個局部變量,打印a運行會報錯說a沒有被定義,如果要使用a就要聲明a為全局變量
NameError: name 'a' is not defined

Process finished with exit code 1

 

四、python內置函數


內置函數就是python編程語言中預先已經定義的函數,直接調用即可,常用的內置函數如下:

  • len():獲取 列表\字符串\元組\字典 中的元素總數量(數據的長度)
  • eval():識別字符串中的python表達式
  • zip(): 聚合打包
  • max():獲取數據中元素的最大值
  • min():獲取數據中元素的最小值
  • sum():對元素進行求和

更多的內置函數有興趣的可以在菜鳥教程中查看,鏈接:https://www.runoob.com/python/python-built-in-functions.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM