Python3入門(四)——Python函數


一、概述

  python和其他高級語言一樣,支持函數

  注意和scala不一樣,結果必須使用return,否則默認return None!這和scala最后一個值作為返回是不一樣的!

二、函數調用

  和其他語言一樣,寫出函數名,傳入合適的參數即可,例如調用內置函數abs:

>>> abs(-1) 1

  函數支持別名:

>>> a = abs # 變量a指向abs函數
>>> a(-1) # 所以也可以通過a調用abs函數
1

  如果傳入了錯誤的參數,Python會報TypeError錯誤

  數據類型在Python中的轉換可以通過相關的函數:

>>> int('1') 1
>>> str(1) '1'

三、函數定義

  定義也是使用和scala一致的def關鍵字:

def fun1(x): if x > 0: print('正數') return x else: print('負數') return -x

  如果什么都不做,那就用pass(如果返回空,使用return None

def nop(): pass

  由python這個函數定義也能知道,Python只能給我們做參數個數的檢查,參數類型無法檢查。要檢查參數,只能通過手動編碼使用instance實現:

def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x

  並且,在Python這類有tuple的語言中,是可以返回多個值的!

def fun1(x,y): if x > 0: return x,y else: return x,y
a,b = fun1(1,2)

  當然,內在的是返回了一個tuple,只是返回值可以省略這個()來顯示表明這是一個tuple

  默認參數:
    定義帶有默認參數的函數時,注意默認參數必須放在后面且必須是不可變對象

def fun1(x,y=1): if x > 0: return x+y else: return x-y

  可變參數

    在參數前面加一個星號*即可,內部使用的是一個tuple包裝的

def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum

    如果要使用list或者tuple作為可變參數,類似calc(list[0],list[1]),可以使用*進行參數轉換:

calc(*list)

  關鍵字參數

    在參數前面加兩個星號**即可,內部會把這個關鍵字參數轉換為dict(也就是map)

def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw)
>>> person('Bob', 35, city='Beijing') name: Bob age: 35 other: {'city': 'Beijing'} >>> person('Adam', 45, gender='M', job='Engineer') name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

  //內部接收的dict是外部的副本,不會對傳入的作改變

  命名關鍵字參數(Python3獨有)

    在參數中使用*作為一個分隔符即可,這樣可以對傳入的關鍵字參數作命名檢查,只能傳入指定名字的關鍵字參數

def person(name, age, *, city, job): print(name, age, city, job)

  這樣,就可以對入參作命名檢查了,只能傳入city=xx,job=xx:

 person('Jack', 24, city='Beijing', job='Engineer')

  多種參數組合時,順序必須嚴格控制:
    必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。

四、遞歸函數

  和其他語言的遞歸函數是類似的:

def fact(n): if n==1: return 1
    return n * fact(n - 1)

 

 


免責聲明!

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



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