1 函數的特性
- 功能性
- 隱藏細節
- 避免編寫重複的代碼
2 函數的定義及運行特點
使用def來定義函數;
def funcname(parameter_list):
pass
- 參數列表可以沒有
- 使用return value來返回函數值,否則返回None
- 改變程序遞歸的次數
import sys
sys.setrecursionlimit(xxxx)
當函數返回多個結果時,最好的方式是使用多個變量名來接收:
def damage(skill1,skill2):
damage1 = skill1*2
damage2 = skill2*3+10
return damage1,damage2
skill1_damage,skill2_damage = damage(4,2)
print(skill1_damage,skill2_damage)
序列解包:用有意義的變量名稱來返回函數的有效值。
3 必須參數與關鍵字參數
(注意是在函數調用上而不是定義上)
1. 必須參數:函數的參數列表中定義的必須賦值的參數。必須放在參數列表的前面。
2. 關鍵字參數:可以在函數調用時明確指出實參是傳給哪個形參的,不一定要按照形參順序。可以大大提高閱讀代碼的效率。
def add(x,y):
result = x+y
return result
c = add(y=3,x=2) # 此處就用了關鍵字參數
- 默認參數:沒有設置默認值的參數必須傳遞實參。
def student(name,age=18,sex='boy'):
print("My name is "+name+". I'm "+str(age)+", and I am a "+sex+".")
student('Tom')
student('Lilly',sex='girl')
打印結果如下:
4. 可變參數:在參數列表前加一個*,在傳遞實參時就可以輸入多個實參,並且結果是輸出一個元組。
def demo(*param):
print(param)
demo(1,2,3,4,5,6,7,8)
打印結果如下:
- 關鍵字可變參數:
def squsum(*param): # 可變參數
sum = 0
for i in param:
sum += i*i
print(sum)
squsum(1,2,3)
def city_temp(**param): # 關鍵字可變參數
print(param)
print(type(param))
for key,value in param.items(): # 字典的遍歷需要調用它的items()方法
print(key,':',value)
city_temp(bj='32c',xm='23c',sh='31c')
# 當然字典也可以直接來傳參
a = {'xa':'16c','nt':'12c','ng':'15c'}
city_temp(**a)
變量作用域
全局變量:函數外部定義的,函數內部也可以使用
局部變量:函數內部定義的,函數外部不可以使用
* for,while,if內部的變量是可以在循環外被引用的(python特有)
global關鍵字
在局部變量前加global關鍵字可以將其轉變爲全局變量
def demo():
global c
c = 2
demo()
print(c)