python学习(10),,习题4: 写一个函数


习题4: 写一个函数,这个函数要计算浮点数乘法的一万次相乘后的时间耗时,浮点数可以使用随机小数

#coding=utf-8def 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 = 100def 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)>>> x1>>> y2

python学习(10)

评论关闭