Python學習之路-函數

來源:互聯網
上載者:User

標籤:odi   混合   ret   傳參   代碼   預設參數   put   ==   種類   

1.初始函數

在沒有函數之前,我們是怎麼實現一段代碼的呢?我們之前學了len()方法,可以求出一個列表的長度,假如現在沒有len()方法,那我們要自己寫一個類似功能的代碼來實現求一個列表的長度。

代碼如下:

list = [1,2,3,‘hello‘,‘abc‘]

count = 0

for i in list:

  count +=1

print (count)

這段代碼實現了len()的功能,但是如果一個程式裡有n多需要測試長度的地方,我們需要黏貼n遍這樣的代碼,所以這樣的操作有什麼缺點呢?

1. 重複代碼多

2.可讀性差

2. 建立函數

我們通過定義一個函數,就能解決以上兩個問題。

s1 = ‘hello world!!!!‘
def my_len():
count = 0
for i in s1:
count += 1
# print(count)

my_len()

2.1 函數的文法格式
def 函數名(參數1,參數2,參數3,...):    ‘‘‘注釋‘‘‘    函數體    return 返回的值注意:函數名要能表達出這個函數的作用和意義

2.2 如何運行一個函數

函數名加上括弧()調用一個函數,就是執行函數

my_len()
2.3 函數運行遵循的原則
原則:先定義,再調用
  1. 函數名,就是一個變數名
  2. 變數必須先定義後引用,所以如果沒有定義函數,而直接去引用這個函數,就相當於在引用一個不存在的變數名
  3. 函數體內,不要用print()方法,用return傳回值代替,目的是讓函數完成最小的功能,不讓函數做額外的操作
2.4 函數的傳回值return
作用1:傳回值的作用:函數執行時,當遇到傳回值return是就結束函數
代碼:
def func1():
print(11)
print(22)
return
print(333)
print(444)
func1()

作用2:傳回值會返回給給函數的調用者(執行者)
  • 函數體內的代碼部分可以不寫return,則傳回值預設是None
  • 傳回值寫成return None,則傳回值是None
  • return 後接單個值
  • return 後接多個值,多個值會放在一個元組中返回給函數的調用者
舉例:return 後接單個值
def my_len():
count = 0
for i in s1:
count += 1
return 666
print(my_len(),type(my_len()))

舉例:return 後接多個值
def my_len():
count = 0
for i in s1:
count += 1
return 666,222,count,‘中國‘
print(my_len(),type(my_len()))

舉例:return 後接多個值,且賦值給多個變數
def my_len():
count = 0
for i in s1:
count += 1
return 666,222,count
ret1,ret2,ret3 = my_len() # (666, 222, 19,)
print(ret1)
print(ret2)
print(ret3)

3. 函數的參數
定義函數時的括弧就是放置函數參數的地方,這時的參數叫形式參數,簡稱形參,例如:def my_len(a,b) #括弧中是定義參數的地方
如果定義函數時有形參,調用函數時括弧裡面也要寫參數,這是的參數叫實際參數,簡稱實參,例如:my_len (1,2) #括弧裡面的實參,就是實際的數

3.1 實參的種類
  1. 位置參數
    要求:必須按順序傳參,必須一一對應
    舉例:
    def func1(x,y):
    print(x,y)
    func1(1, 2)
  2. 關鍵字參數
    要求:不分順序,必須一一對應
    舉例:
    def func1(x,y,z):
    print(x,y,z)
    func1(y=2,x=1,z=5,)
  3. 混合參數(位置參數+關鍵字參數)
    要求:關鍵字參數必須在位置參數後面,必須一一對應
    舉例:
    def func2(argv1,argv2,argv3):
    print(argv1)
    print(argv2)
    print(argv3)
    func2(1,2,argv3=4)

3.2 形參的種類

  1. 位置參數
    要求:必須按順序傳參,必須一一對應
    舉例:
    def func1(x,y):
    print(x,y)
    func1(1,2)
  2. 預設參數
    要求:必須放在位置參數後面
    注意:

    如果有一個形參有預設參數,實參在傳參時可以不傳,函數運行時會自動識別預設參數的值。

    如果實參對於形參的預設參數傳遞了新值,那麼新值會覆蓋了預設參數的值

    舉例:統計姓名
    def register(name,sex=‘男‘):
    with open(‘register‘,encoding=‘utf-8‘,mode=‘a‘) as f1:
    f1.write(‘{} {}\n‘.format(name,sex))

    while True:
    username = input(‘請輸入姓名:/q 或者 Q 退出‘) #傳參時可以不傳sex
    if username.upper() == ‘Q‘:break
    if ‘a‘ in username:
    sex = input(‘請輸入性別:‘) #程式運行中給sex參數重新賦值
    register(username,sex)
    else:
    register(username)
  3. 動態參數(萬能參數)
    格式:
    def my_len(*args, **kwargs)
    作用:
    在某種情況下,實參傳值的個數是不固定的,為了保證程式運行,形參需要能接收多餘的實參

    形參中的*args,作用是接收實參角度的所有多餘的位置參數,並把它們放到一個元組中

    形參中的**kwargs,作用是接收實參角度的所有多餘的關鍵字參數,並把它們放到一個字典中

    舉例:
    def func2(*args,**kwargs):
    print(args) # 元組(所有位置參數)
    print(kwargs) #字典(所有關鍵字參數)
    func2(1,2,3,4,5,6,7,11,‘john‘,‘中國‘,a=‘ww‘,b=‘qq‘,c=‘222‘)

4. 參數的順序
  1. 位置參數-*args-預設參數
    舉例:
    def func3(a,b,*args,sex=‘男‘):
    print(a)
    print(b)
    print(sex)
    print(args)
    func3(1,2,‘中國‘,‘tom‘,‘jerry‘,sex=‘女‘)
  2. 位置參數-*args-預設參數-**kwargs
    舉例:
    def func3(a,b,*args,sex=‘男‘,**kwargs):
    print(a)
    print(b)
    print(sex)
    print(args)
    print(kwargs)
    func3(1,2,‘中國‘,‘tom‘,‘jerry‘,name=‘jack‘,age=46)

5. 打散和彙總功能
  1. 實參位置: 加*或**是打撒功能
  2. 形參位置:加*或**是彙總功能
    舉例:

    def func1(*args,**kwargs): # 函數的定義 * 彙總。

 

      print(args)
  print(kwargs)

   l1 = [1,2,3,4]
   l11 = (1,2,3,4)
   l2 = [‘tom‘,‘jack‘,4]
   func1(*l1,*l2,*l11) # 函數的執行:* 打散功能。


 

 








 

  

Python學習之路-函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.