# 函式
[toc]
## 基礎
```python
# 也支援可變函式
a = abs # 變數a指向abs函式
a(-1) # 所以也可以通過a呼叫abs函式
## 空函式
def nop():
pass # pass可以用來作為佔位符,比如現在還沒想好怎麼寫函式的**,就可以先放乙個pass
age = 20
if age >= 18:
pass # pass可以寫在任何地方;
def my_abs(x):
if not isinstance(x, (int, float)): # x必須是int或者float
raise typeerror('bad operand type')
if x >= 0:
return x
else:
return -x
## 返回多個值
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
# 返回的其實是tuple(151.96152422706632, 70.0) ,但是,在語法上,返回乙個tuple可以省略括號
# 而多個變數可以同時接收乙個tuple,按位置賦給對應的值
x, y = move(100, 100, 60, math.pi / 6)
## 引數
```python
# 位置引數
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
# 預設引數
def enroll(name, gender, age=6, city='beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
enroll('adam', 'm', city='tianjin') # 位置引數可以不按位置呼叫
# 預設引數盡量不要傳可變的值,比如list,set,dict;否則會被汙染
def add_end(l=):
return l
add_end() # ['end']
add_end() # ['end', 'end']
add_end() # ['end', 'end', 'end']
# 通過none來解決可變引數被汙染,函式的預設引數其實是全域性變數,函式內部才是區域性變數;
# 把可變的全域性變數約束在區域性變數裡面,就可以防止被汙染
def add_end(l=none):
if l is none:
l =
s = '區域性變數'
return l
### 可變引數
1. 在引數前面加了乙個*號
2. 在函式內部,引數numbers接收到的是乙個tuple
```python
# 給定一組數字a,b,c……,請計算a*a + b*b + c*c + ……
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print(calc(1,2,3,4))
### 關鍵字引數
1. 關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict
```python
def person(name, age, **kw):
print('name:', name, 'age:', age, 'data:', kw)
person('michael', 30) # name: michael age: 30 other: {}
person('bob', 35, city='beijing') # name: bob age: 35 other:
person('adam', 45, gender='m', job='engineer') # name: adam age: 45 other:
extra = ;
person('jack', 24, **extra) # 也可以直接傳dict進來
### 命名關鍵字引數
1. 限制關鍵字引數的名字
2. 命名關鍵字引數需要乙個特殊分隔符*,*後面的引數被視為命名關鍵字引數。
```python
def person(name, age, *, city, job):
print(name, age, city, job)
person('jack', 24, city='beijing', job='engineer')
person('jack', 24, job='engineer') # 報錯,必須寫全引數
person('jack', 24, name='zxg') # 報錯
# 已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符*了
def person(name, age, *args, city, job):
print(name, age, args, city, job)
# jack 24 ('2018-2-9', 'zhouzhou') beijing engineer
person('jack', 24, '2018-2-9', 'zhouzhou' , city='beijing', job='engineer')
# 前面的可變引數不能是關鍵字可變引數,否則會報錯
def person(name, age, city , job, **kw ):
print(name, age, 'data:' , kw, city, job)
person('jack', 24, city='beijing', job='engineer' , date='2018-2-9', ***='man')
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
f1(1, 2)
f1(1, 2, 3)
f1(1, 2, 3, 'a', 'b')
f1(1, 2, 3, 'a', 'b', x=99)
# 對於任意函式,都可以通過類似func(*args, **kw)的形式呼叫它,無論它的引數是如何定義的
args = (1, 2, 3, 4)
kw =
f1(*args, **kw)
python函式概述 Python中函式概述
python中的函式 認識函式 在乙個完整的專案中,某些功能會反覆的使用。那麼我們會將功能封裝成函式,當我們要使用這個功能的時候 直接呼叫函式即可 本質 函式就是對功能的封裝 優點 1簡化 結構,增加了 的復用度 重複使用的程度 2如果想修改某些功能或者除錯某些bug,還需要修改對應的函式即可 引數...
Python基礎語法2 函式
1.定義 def 函式名 引數1,引數2,引數n 函式體return 語句 例如 def greet name print name 早上好 2.呼叫 例如 greet 貝貝 4.return 可以返回多個值,對映資料型別元素 tuple def love name1,name2 face name...
Python2語法簡記(7) 函式
def printme str1,str2 列印傳入的字串 函式的第一行語句可以選擇性地使用文件字串 用於存放函式說明。print str1,str2 return str1,str2 return只能返回乙個值,可以是任何型別。寫成這樣是返回乙個元祖,間接實現了返回多個值。不可變物件傳入函式 不能...