python基礎--函數的形參,默認參數值,列表參數,不定長參數,字典型參數


1,默認參數值:

  首先來上段代碼:

def login(username='abc',password='123'):
    if username=='admin' and password=='admin123':
        print('登陸成功')
    else:
        print('登錄失敗')
    return username,password

print(login('admin','admin123'))
print(login('admin'))
print(login(password='ssssss'))
print(login())

運行結果:

登陸成功
('admin', 'admin123')
登錄失敗
('admin', '123')
登錄失敗
('abc', 'ssssss')
登錄失敗
('abc', '123')

定義login函數的時候,有兩個形參,一個是username,並賦予了一個默認值是abc,另一個形參是password,賦予的默認值是123,最后把調用login函數時傳入的實參username和password一並返回。

if判斷

username=='admin' 和 password=='admin123'
同時成立的時候打印登陸成功,接下來就是帶不同參數時調用login函數產生的結果:
  第一次調用login函數,並傳入'admin','admin123'做為實參,滿足if的判斷條件,打印登陸成功,並且返回了('admin', 'admin123')
  第二次調用login函數,只傳入一個實參admin,這個時候會自動將這個實參放入函數中第一個形參,沒有傳入實參的password就會采用默認值123來參與函數的運算
所以這個時候相當於username的值是admin,但是password的值是123,不滿足if的判斷,所以打印登錄失敗,並且返回了('admin', '123')
  第三次調用login函數,指定傳入實參password='ssssss',沒有傳入實參的username就會自動采用默認值admin來參與函數的運算,所以這個時候相當於username的值是abc,
password的值是ssssss,不滿足if的判讀,打印登錄失敗並返回('abc', 'ssssss')
  第四次調用login函數,沒有傳入任何參數,所以username和password都自動采用默認值參與函數的運算,所以這個時候相當於username的值是abc,password的值是123,
不滿足if的判斷,打印登錄失敗,並返回('abc', '123')

2,列表參數:
  參數可以是變量,也可以是元組,列表等內置數據結構:
def login(username=[],password='admin123'):
    username=username[0]
    if username=='admin' and password=='admin123':
        print('登陸成功')
    else:
        print('登錄失敗')
    return username,password

print(login(['admin','aaaaaa'])
print(login(['bbbbbb','admin']))
運行結果:

登陸成功
('admin', 'admin123')
登錄失敗
('bbbbbb', 'admin123')

第一次調用login函數,傳入了列表['admin','aaaaaa'],列表的第0個元素是admin,password沒有傳入參數,自動采用默認值admin123參與運算,所以滿足if判斷,打印登錄成功,並返回('admin', 'admin123')

第二次調用login函數,傳入了列表['bbbbbb','admin'],列表的第0個元素是bbbbbb,password沒有傳入參數,自動采用默認值admi123參與運算,所以不滿足if判斷,打印登錄失敗,並返回('bbbbbb', 'admin123')

3,可變長度參數

參數前加上*標識符,表示可變長度參數,*也可以引用元組,將多個參數組合在一個元組中。
def func(*n):
    a=n[0]
    b=n[1]
    if(a=='1111' and b=='2222'):
        print('yes')
    else:
        print('no')
    return n
print(func('1111','2222','3333'))
print(func('4444','5555','6666','7777','8888'))

運行結果:

yes
('1111', '2222', '3333')
no
('4444', '5555', '6666', '7777', '8888')

這里可以看到最后返回的結果n是一個不定長的元組

4,字典類型參數

**標識符表示一個字典類型的參數

def func(**n):
    num=n.keys()
    for i in num:
        print(i,n)

func(a=1111,b=2222,c=3333)
func(d=4444,e=5555,f=6666,g=7777,h=8888)

運行結果:

a {'a': 1111, 'b': 2222, 'c': 3333}
b {'a': 1111, 'b': 2222, 'c': 3333}
c {'a': 1111, 'b': 2222, 'c': 3333}
d {'d': 4444, 'e': 5555, 'f': 6666, 'g': 7777, 'h': 8888}
e {'d': 4444, 'e': 5555, 'f': 6666, 'g': 7777, 'h': 8888}
f {'d': 4444, 'e': 5555, 'f': 6666, 'g': 7777, 'h': 8888}
g {'d': 4444, 'e': 5555, 'f': 6666, 'g': 7777, 'h': 8888}
h {'d': 4444, 'e': 5555, 'f': 6666, 'g': 7777, 'h': 8888}

這里可以看到,打印的參數n是一個不定長的字典

ps:如果參數中既有列表型參數或元組型參數(帶*的參數)也有字典型參數(帶**號的參數),則帶*的參數應該寫在帶**號的參數的前面


免責聲明!

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



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