python學習-基礎-函式
阿新 • • 發佈:2019-01-14
# 定義函式 使用def def my_abs(x): # isinstance 型別檢查 if not isinstance(x, (int, float)): raise TypeError('引數型別錯誤') if x >= 0: return x else: return -x # 引入函式 #from 'abstest' import my_abs print(my_abs(100)) # 空函式 pass 就是什麼都不做,pass可以作為佔位符 def nop(): pass # 返回多個值 # 引入內建函式 import math def move(x, y, step, angle = 0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny print(move(100, 100, 60, math.pi / 6)) # 函式引數 # 位置引數 def power(x, n = 0): if n: s = 1 while n > 0: n -= 1 s = s * x return s else: return x * x print(power(4, 3)) # list 預設 引數,要注意指向 def add_end(L=None): if L is None: L = [] L.append('END') return L # 可變引數 引數前面加個*號 # 如果引數是個陣列,需要在呼叫的時候,引數前面加星號 # *nums表示把nums這個list的所有元素作為可變引數傳進去。 def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum print(calc(1,3,5)) print(calc(*[1,3,5])) # 可變關鍵詞引數 引數前面加2個*號 # 可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為一個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為一個dict def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) print(person('xixi', 16)) extra = {'city': 'Beijing', 'job': 'Engineer'} person('Jack', 24, **extra) # 命名關鍵詞 # 命名關鍵字引數需要一個特殊分隔符*,*後面的引數被視為命名關鍵字引數。 # 如果函式定義中已經有了一個可變引數,後面跟著的命名關鍵字引數就不再需要一個特殊分隔符*了: def person1(name, age, *, city = 'xxx', job): print(name, age, city, job) def person2(name, age, *args, city, job): print(name, age, city, job) person1('Jokc', 18, city = 'xxx', job = 'xxxx') # 引數組合 def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw) # 通過tuple和dict 可以轉換為引數呼叫 args = (1, 2, 3, 4) kw = {'d': 99, 'x': '#'} f1(*args, **kw) #遞迴函式