1. 程式人生 > >python學習(10)

python學習(10)

list app 使用 調用 imp `` exit 由於 對象

習題4: 寫一個函數,這個函數要計算浮點數乘法的一萬次相乘後的時間耗時,浮點數可以使用隨機小數

#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

def add_end(L=None):
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)