python學習(10)
#coding=utf-8
def func(n):
import time
import random
start = time.time()
for i in range(n):
random.random()*random.random()
print(time.time()-start)
func(10000000)
函數參數:可變類型、不可變類型
不可變對象:所有的數字、字符串、元組
可變:set?dict?list?實例
參數傳不可變對象的時候,函數內外變量值是獨立的
在函數內部使用global,會影響外部變量
示例:
#函數的參數a,只是函數的局部變量,只是和全局變量a=100重名而已
a = 100
def func(a):
a += 1
print(a)
print(func(a)
```)
print(a)
函數調用: 把外部的a傳入參數(a = a),由於外部a指向的是不可變對象,所以外部a的值不會改變。
a=[1]
def compute(x):
x.append(2)
print(a)
print(x)
print (compute(a))
函數調用:列表參數a 傳入,傳入的是[1]的引用(x = a)等於把引用a賦值給了x,對x的改動會影響到a 函數內部訪問全部變量global 會改變全局變量的值
a=100
def compute():
global a
a+=1
compute()
print (a)
默認可變參數之坑
#coding=utf-8
def add_end(L=[]):
L.append(‘END‘)
return L
print (add_end([1, 2, 3])) #調用正常
print (add_end([‘x‘, ‘y‘, ‘z‘])) #調用正常
print (add_end())#調用正常
print (add_end())#調用不正常
print (add_end())#調用不正常
出現以上問題原因:
L = []函數的默認值在內存中只有一份
修改為:
#coding=utf-8
if L is None:
L = []
L.append(‘END‘)
return L
print (add_end([1, 2, 3])) #調用正常
print (add_end([‘x‘, ‘y‘, ‘z‘])) #調用正常
print (add_end())#調用正常
print (add_end())#調用不正常
print (add_end())#調用不正常
練習5:定義函數add(a,b)要求有個值是result來存結果
1 a,b 數字,相加
2 a,b 字符串,就當做字符串相加
3 a,b 如果list就當list相加
#coding=utf-8
import sys
def add(a,b):
if isinstance(a,(int,float)) and isinstance(b,(int,float)):
result = 0.0
elif isinstance(a,str) and isinstance(b,str):
result = ""
elif isinstance(a,list) and isinstance(b,list):
result = []
else:
print("參數錯誤!")
sys.exit(1)
result = a + b
return result
print(add(4,5))
print(add(4,5.0))
print(add("ab","cd"))
print(add([1,2],[3,4]))
print(add(4,"a"))
多個返回值
函數可以有做個返回值
>>> def add(a,b):
... return a,b
...
>>> x,y = add(1,2)
>>> x
1
>>> y
2
python學習(10)