Python學習之函數

Python學習目錄python

  1. 在Mac下使用Python3
  2. Python學習之數據類型
  3. Python學習之函數
  4. Python學習之高級特性
  5. Python學習之函數式編程
  6. Python學習之模塊
  7. Python學習之面向對象編程
  8. Python學習之面向對象高級編程
  9. Python學習之錯誤調試和測試
  10. Python學習之IO編程
  11. Python學習之進程和線程
  12. Python學習之正則
  13. Python學習之經常使用模塊
  14. Python學習之網絡編程

練習代碼git

咱們知道圓的面積計算公式爲:S = πr2,當咱們知道半徑r的值時,就能夠根據公式計算出面積。假設咱們須要計算3個不一樣大小的圓的面積:github

r1 = 12.34
r2 = 9.08
r3 = 73.1
s1 = 3.14 * r1 * r1
s2 = 3.14 * r2 * r2
s3 = 3.14 * r3 * r3
複製代碼

當代碼出現有規律的重複的時候,你就須要小心了,每次寫3.14 * x * x不只很麻煩,並且,若是要把3.14改爲3.14159265359的時候,得所有替換。編程

有了函數,咱們就再也不每次寫s = 3.14 * x * x,而是寫成更有意義的函數調用s = area_of_circle(x),而函數area_of_circle自己只須要寫一次,就能夠屢次調用。網絡

基本上全部的高級語言都支持函數,Python也不例外。Python不但能很是靈活地定義函數,並且自己內置了不少有用的函數,能夠直接調用。函數式編程

定義函數

  • 使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,而後,在縮進塊中編寫函數體,函數的返回值用return語句返回。
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x
複製代碼
  • 可返回多個值(返回值是一個tuple!可是,在語法上,返回一個tuple能夠省略括號,而多個變量能夠同時接收一個tuple,按位置賦給對應的值,因此,Python的函數返回多值其實就是返回一個tuple)。
import math
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny
x, y = move(100, 100, 60, math.pi / 6)
複製代碼

函數的參數

位置參數

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
複製代碼

power(x, n)函數有兩個參數:xn,這兩個參數都是位置參數,調用函數時,傳入的兩個值按照位置順序依次賦給參數xn函數

默認參數

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)
enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')
複製代碼

從上面的例子能夠看出,默認參數能夠簡化函數的調用。設置默認參數時,有幾點要注意: 一是必選參數在前,默認參數在後,不然Python的解釋器會報錯;二是當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就能夠做爲默認參數。三是默認參數必須指向不變對象(str、None等)!post

可變參數

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
calc(1, 2)
nums = [1, 2, 3]
calc(*nums)
複製代碼

能夠看出,可變參數就是傳入的參數個數是可變的,能夠是1個、2個到任意個,還能夠是0個。學習

關鍵字參數

可變參數容許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。而關鍵字參數容許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。測試

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)

>>> name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
複製代碼

命名關鍵字參數

def person(name, age, *, city, job):
    print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')

>>> Jack 24 Beijing Engineer

def person(name, age, *args, city='Beijing', job):
    print(name, age, args, city, job)
person('Jack', 24, job='Engineer')

>>> Jack 24 Beijing Engineer
複製代碼

和關鍵字參數**kw不一樣,命名關鍵字參數須要一個特殊分隔符*,*後面的參數被視爲命名關鍵字參數。若是函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就再也不須要一個特殊分隔符*了

下一篇:Python學習之高級特性

相關文章
相關標籤/搜索