1. 程式人生 > >python基礎——函式一

python基礎——函式一

目錄

 

 

一.函式的定義和呼叫:

二.函式引數的型別:

 三.函式的返回值及返回多個值:

四.位置引數和關鍵字引數:

五.預設引數和可變引數:

 六.引數順序和函式巢狀:


 

一.函式的定義和呼叫:

1.函式的格式:    

                        def   函式名稱()

                                 ...函式體...

注意:

 函式的名稱是要遵循識別符號命名規則,使用下劃線命名法。

函式體是靠強制縮排來表示的。

:()都是用英文來表示的。

 函式只有在呼叫時才會執行,只建立不呼叫是不會執行的。

 2.呼叫函式的格式:
         
         函式名()

注意:

必須先建立函式,後呼叫函式。

一般情況下呼叫函式不能和函式體放在一起。

函式可以呼叫多次。

 

def say_hello():
    
    print('hello')

say_hello()
say_hello()
say_hello()

輸出結果:hello
                    hello
                    hello

3.函式的註釋:

在函式體的一行適應多行註釋對函式的功能進行解釋說明 

呼叫函式的時候,通過快捷鍵ctrl+Q,可以檢視函式的功能。

 

註釋用三引號括起來:

4. 帶引數的函式:

-在小括號中寫的變數名就是函式的引數,多個引數之間使用逗號","隔開。

-函式定義幾個引數,呼叫函式是就必須傳遞對應個數的引數。

-定義函式的引數叫做形參--->形式引數

-呼叫函式時候的引數叫做實參-----> 實際引數

二.函式引數的型別:

可變資料型別:   list,dic
不可變資料型別: int,str,float

1.傳遞不可變資料型別不會影響引數本身

a =100
print('a的id是:',id(a))   # 檢視
def func(b):
     print(b)
     print('b的id是:',id(b))

func(a)

輸出結果:a的id是: 493516912
                    100
                    b的id是: 493516912

由此可以看是傳遞不可變資料型別,函式本身是不會改變的。

 

2.傳遞可變引數型別:(會影響引數本身)

輸出結果:

如果修改引數:形參被修改,實參也會跟著改。

輸出結果:

 三.函式的返回值及返回多個值:

1.返回值:    return是誰呼叫的就把返回值給誰

格式: 函式名(引數1,引數2,...):
            ...函式體...

             return  值
1. 在函式體的最後使用關鍵字return 要返回的值
2. 如果一個函式不寫返回值,預設返回None
3.return有兩個作用:
    -可以返回值
    -可以結束這個函式,一般return  後面不會再寫其他程式碼了。
1.返回值

def sum_num(aa,bb):
    num3 = aa+bb

    return num3         # 返回num3

ret = sum_num(1,2)  # 定義一個變數ret來接受函式返回的值,拿到返回值後可以做後續的邏輯操作。
print(ret)

輸出結果:3

2.返回None

def sum_num(aa,bb):
    num3 = aa+bb

    return        # 沒有寫返回值

ret = sum_num(1,2)  
print(ret)

輸出結果:None

3.return兩個作用

def func(c):
    print('func...')
    a = 10
    b = c
    if b < a:  # 在函式體內進行條件判斷
        return
    print('哈哈哈')
    print('呵呵呵')


func(1)


輸出結果:func...

--------------------------------------------------------------------
def func(c):
    print('func...')
    a = 10
    b = c
    if b < a:  # 在函式體內進行條件判斷
        return
    print('哈哈哈')
    print('呵呵呵')


func(11)


輸出結果:func
         哈哈哈
         呵呵呵

2.返回多個值:

語法:
def 函式名():
    ...函式體...
    Return 值1,值2,...

返回多值其實就是返回一個tuple,在語法上返回一個tuple可以省略括號數
def func():
    a = 10
    b = 20
    return a,b

ret = func()
print(ret)

 輸出結果:(10,20)

四.位置引數和關鍵字引數:

1.位置引數:

實參和形參一一對應,按照對應位置傳遞引數,叫位置引數。

def sum_num(num1,num2):
    sum = num1+num2
    print(sum)

sum_num(12,13)    # 12傳遞給num1,  13傳遞給num2,一一對應

輸出結果:25

2.關鍵字引數:

按關鍵字傳遞引數,位置變化不會影響且關鍵字必須是在形參中聲名過才能使用。

輸出結果: 25’

注意:如果位置引數和關鍵字引數混用,必須位置引數在前,關鍵字引數在後。
def sum_num(num1,num2):
    sum = num1+num2
    print(sum)

sum_num(12,num2=13)  # 12 是按照位置引數傳遞給num1, num2=13按照關鍵字引數傳遞。

輸出結果:25

五.預設引數和可變引數:

1.預設引數:

在定義函式的形參的時候,可以給形參賦一個初始值(預設值),這種引數就叫做預設引數,當呼叫函式的時候,
如果不給預設引數賦值,函式就會使用使用預設值,如果給預設引數賦值,函式就會使用重新賦的值。

注意:預設引數一定要寫在形參後面。

def user_info(name,age,gender='男'):
    print('姓名:{},年齡:{},性別:{}'.format(name,age,gender))

user_info('張三',20)   # 使用預設值  注意一一對應

user_info('王五',30,'女') # 使用賦的值  注意一一對應

輸出結果:姓名:zs,年齡:20,性別:男
                    姓名:ww,年齡:30,性別:女

2.可變引數:

如果函式中的引數過多,我們定義起來非常的麻煩,呼叫起來也非常的麻煩,因此python給我們提供了可變引數型別。能處理比當初宣告時更多的引數,會將傳入的引數變成元組(*args)或者字典(**kwargs)

元組引數: *args

通過給形參前面新增*使引數變成一個元組,所有傳遞的引數變成元組的元素

注意: args引數名稱可以任意命名,但是一般我們叫他 args。

f func(*args):
    print(args)
    print(args[0],args[1])   # 獲取元組內前兩個元素。

func(1,2,3,4)         # 可以傳遞多個實參

輸出結果:(1,2,3,4)

                      1,2

* 具有打散功能:

tup = (1,2,3,4)
print(*tup)

lst = ['a','b','c','d']
print(*lst)

s = 'hello'
print(*s)

輸出結果:1 2 3 4
                    a b c d
                    h e l l o

 字典引數 **kwargs:

通過給形參前面新增**使引數變成一個字典,所有傳遞的引數變成字典的鍵值對,這裡傳參要求鍵等於值的形式。

**kwargs結果型別是字典,傳遞值是以key=value方式傳入

def func(**kwargs):
    print(kwargs)

func(name = 'zs',age = 20, gender ='男' )    #{'name': 'zs', 'age': 20, 'gender': '男'}

輸出結果:{'name': 'zs', 'age': 20, 'gender': '男'}

打散字典:

def func(name,age):
    print(name,age)

dic={'name':'zs','age':20}
func(**dic)

輸出結果:zs  20

注意:**kwargs必須放在*args後面,否則會報錯。

 六.引數順序和函式巢狀:

1.引數順序:

建立函式聲名引數時的順序:
位置引數,*args,預設引數,**kwargs

輸出結果:

 2.函式巢狀:

def outter():
    print('aaa')
    def inner():
        print('bbb')

    inner()
outter()

 輸出結果:aaa

                     bbb