在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 四、函數(shù)的參數(shù)
二、Enum 的源碼
前言
一、Python 模塊簡介
一、List(列表)
五、匿名函數(shù)
三、什么是元類
二、循環(huán)語句
二、模塊的使用
三、第一個 Python 程序
線程與進程
Python
三、條件語句和循環(huán)語句綜合實例
四、對象的描述器
三、類的屬性
一、迭代
五、迭代器和生成器綜合例子
六、運算符相關(guān)的魔術(shù)方法
一、枚舉類的使用
前言
一、簡明概述
二、Python 的基本數(shù)據(jù)類型
多線程編程
五、作用域
四、包
四、枚舉的比較
四、Python 中的變量
六、類的多態(tài)
一、Python 中類也是對象
一、Python 的 Magic Method
前言
四、生成器
一、面向?qū)ο蟮母拍?/span>
五、類的繼承
二、類
二、使用 <code>type()</code> 動態(tài)創(chuàng)建類
進程
二、set
三、主模塊和非主模塊
一、字典(Dictionary)
前言
前言
前言
前言
四、集成開發(fā)環(huán)境(IDE): PyCharm
前言
四、函數(shù)的參數(shù)
三、lsit 生成式(列表生成式)
四、自定義元類
四、類的方法
二、函數(shù)傳值問題
二、注釋
一、條件語句
一、Python 語法的簡要說明
三、函數(shù)返回值
三、基本數(shù)據(jù)類型轉(zhuǎn)換
三、屬性的訪問控制
二、Python 的安裝
前言
三、命名規(guī)范
一、Python 自定義函數(shù)的基本步驟
三、自定義類型的枚舉
五、自定義容器(Container)
二、Python 迭代器
前言
二、tuple(元組)
一、Python 簡介
前言
前言
前言
二、構(gòu)造(<code>__new__</code>)和初始化(<code>__init__</code>)
前言

四、函數(shù)的參數(shù)

1、默認值參數(shù)

有時候,我們自定義的函數(shù)中,如果調(diào)用的時候沒有設(shè)置參數(shù),需要給個默認值,這時候就需要用到默認值參數(shù)了。

# -*- coding: UTF-8 -*-

def print_user_info( name , age , sex = '男' ):
    # 打印用戶信息
    print('昵稱:{}'.format(name) , end = ' ')
    print('年齡:{}'.format(age) , end = ' ')
    print('性別:{}'.format(sex))
    return;

# 調(diào)用 print_user_info 函數(shù)

print_user_info( '兩點水' , 18 , '女')
print_user_info( '三點水' , 25 )

輸出結(jié)果:

昵稱:兩點水 年齡:18 性別:女
昵稱:三點水 年齡:25 性別:男

可以看到,當(dāng)你設(shè)置了默認參數(shù)的時候,在調(diào)用函數(shù)的時候,不傳該參數(shù),就會使用默認值。但是這里需要注意的一點是:只有在形參表末尾的那些參數(shù)可以有默認參數(shù)值,也就是說你不能在聲明函數(shù)形參的時候,先聲明有默認值的形參而后聲明沒有默認值的形參。這是因為賦給形參的值是根據(jù)位置而賦值的。例如,def func(a, b=1) 是有效的,但是 def func(a=1, b) 是 無效 的。

默認值參數(shù)就這樣結(jié)束了嗎?還沒有的,細想一下,如果參數(shù)中是一個可修改的容器比如一個 lsit (列表)或者 dict (字典),那么我們使用什么來作為默認值呢?我們可以使用 None 作為默認值。就像下面這個例子一樣:

# 如果 b 是一個 list ,可以使用 None 作為默認值
def print_info( a , b = None ):
    if b is None :
        b=[]
    return;

認真看下例子,會不會有這樣的疑問呢?在參數(shù)中我們直接 b=[] 不就行了嗎?也就是寫成下面這個樣子:

def print_info( a , b = [] ):
    return;

對不對呢?運行一下也沒發(fā)現(xiàn)錯誤啊,可以這樣寫嗎?這里需要特別注意的一點:默認參數(shù)的值是不可變的對象,比如None、True、False、數(shù)字或字符串,如果你像上面的那樣操作,當(dāng)默認值在其他地方被修改后你將會遇到各種麻煩。這些修改會影響到下次調(diào)用這個函數(shù)時的默認值。

示例如下:

# -*- coding: UTF-8 -*-

def print_info( a , b = [] ):
    print(b)
    return b ;

result = print_info(1)

result.append('error')

print_info(2)

輸出的結(jié)果:

[]
['error']

認真觀察,你會發(fā)現(xiàn)第二次輸出的值根本不是你想要的,因此切忌不能這樣操作。

還有一點,有時候我就是不想要默認值啊,只是想單單判斷默認參數(shù)有沒有值傳遞進來,那該怎么辦?我們可以這樣做:

_no_value =object()

def print_info( a , b = _no_value ):
    if b is _no_value :
        print('b 沒有賦值')
    return;

這里的 object 是python中所有類的基類。 你可以創(chuàng)建 object 類的實例,但是這些實例沒什么實際用處,因為它并沒有任何有用的方法, 也沒有任何實例數(shù)據(jù)(因為它沒有任何的實例字典,你甚至都不能設(shè)置任何屬性值)。 你唯一能做的就是測試同一性。也正好利用這個特性,來判斷是否有值輸入。

2、關(guān)鍵字參數(shù)

在 Python 中,可以通過參數(shù)名來給函數(shù)傳遞參數(shù),而不用關(guān)心參數(shù)列表定義時的順序,這被稱之為關(guān)鍵字參數(shù)。使用關(guān)鍵參數(shù)有兩個優(yōu)勢 :

一、由于我們不必擔(dān)心參數(shù)的順序,使用函數(shù)變得更加簡單了。

二、假設(shè)其他參數(shù)都有默認值,我們可以只給我們想要的那些參數(shù)賦值

# -*- coding: UTF-8 -*-

def print_user_info( name ,  age  , sex = '男' ):
    # 打印用戶信息
    print('昵稱:{}'.format(name) , end = ' ')
    print('年齡:{}'.format(age) , end = ' ')
    print('性別:{}'.format(sex))
    return;

# 調(diào)用 print_user_info 函數(shù)

print_user_info( name = '兩點水' ,age = 18 , sex = '女')
print_user_info( name = '兩點水' ,sex = '女', age = 18 )

輸出的值:

昵稱:兩點水 年齡:18 性別:女
昵稱:兩點水 年齡:18 性別:女

3、不定長參數(shù)

有時我們在設(shè)計函數(shù)接口的時候,可會需要可變長的參數(shù)。也就是說,我們事先無法確定傳入的參數(shù)個數(shù)。Python 提供了一種元組的方式來接受沒有直接定義的參數(shù)。這種方式在參數(shù)前邊加星號 * 。如果在函數(shù)調(diào)用時沒有指定參數(shù),它就是一個空元組。我們也可以不向函數(shù)傳遞未命名的變量。

例如:

# -*- coding: UTF-8 -*-

def print_user_info( name ,  age  , sex = '男' , * hobby):
    # 打印用戶信息
    print('昵稱:{}'.format(name) , end = ' ')
    print('年齡:{}'.format(age) , end = ' ')
    print('性別:{}'.format(sex) ,end = ' ' )
    print('愛好:{}'.format(hobby))
    return;

# 調(diào)用 print_user_info 函數(shù)
print_user_info( '兩點水' ,18 , '女', '打籃球','打羽毛球','跑步')

輸出的結(jié)果:

昵稱:兩點水 年齡:18 性別:女 愛好:('打籃球', '打羽毛球', '跑步')

通過輸出的結(jié)果可以知道,*hobby是可變參數(shù),且 hobby其實就是一個 tuple (元祖)

可變長參數(shù)也支持關(guān)鍵參數(shù),沒有被定義的關(guān)鍵參數(shù)會被放到一個字典里。這種方式即是在參數(shù)前邊加 **,更改上面的示例如下:

# -*- coding: UTF-8 -*-

def print_user_info( name ,  age  , sex = '男' , ** hobby ):
    # 打印用戶信息
    print('昵稱:{}'.format(name) , end = ' ')
    print('年齡:{}'.format(age) , end = ' ')
    print('性別:{}'.format(sex) ,end = ' ' )
    print('愛好:{}'.format(hobby))
    return;

# 調(diào)用 print_user_info 函數(shù)
print_user_info( name = '兩點水' , age = 18 , sex = '女', hobby = ('打籃球','打羽毛球','跑步'))

輸出的結(jié)果:

昵稱:兩點水 年齡:18 性別:女 愛好:{'hobby': ('打籃球', '打羽毛球', '跑步')}   

通過對比上面的例子和這個例子,可以知道,*hobby是可變參數(shù),且 hobby其實就是一個 tuple (元祖),**hobby是關(guān)鍵字參數(shù),且 hobby 就是一個 dict (字典)

4、只接受關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)使用起來簡單,不容易參數(shù)出錯,那么有些時候,我們定義的函數(shù)希望某些參數(shù)強制使用關(guān)鍵字參數(shù)傳遞,這時候該怎么辦呢?

將強制關(guān)鍵字參數(shù)放到某個*參數(shù)或者單個*后面就能達到這種效果,比如:

# -*- coding: UTF-8 -*-

def print_user_info( name , *, age  , sex = '男' ):
    # 打印用戶信息
    print('昵稱:{}'.format(name) , end = ' ')
    print('年齡:{}'.format(age) , end = ' ')
    print('性別:{}'.format(sex))
    return;

# 調(diào)用 print_user_info 函數(shù)
print_user_info( name = '兩點水' ,age = 18 , sex = '女' )

# 這種寫法會報錯,因為 age ,sex 這兩個參數(shù)強制使用關(guān)鍵字參數(shù)
#print_user_info( '兩點水' , 18 , '女' )
print_user_info('兩點水',age='22',sex='男')

通過例子可以看,如果 age , sex 不適用關(guān)鍵字參數(shù)是會報錯的。

很多情況下,使用強制關(guān)鍵字參數(shù)會比使用位置參數(shù)表意更加清晰,程序也更加具有可讀性。使用強制關(guān)鍵字參數(shù)也會比使用 **kw 參數(shù)更好且強制關(guān)鍵字參數(shù)在一些更高級場合同樣也很有用。