一. 函数的分类
? ? ? ? 1.内置函数:自带,无需导包,如 list()、len()等。
? ? ? ? 2.标准库函数:自带,相对不常用,需导包。
? ? ? ? 3.第三方库函数:外援,需下载和导包。
? ? ? ? 4.自定义函数:自创,需定义。
二.函数的定义格式
? ? ? ? def my_function (形参):
? ? ? ? ? ? ? ? “‘文档注释’”
? ? ? ? ? ? ? ? 函数体/若干句子
三.局部变量VS全局变量效率? ? ?
import math
import time
a = 30
def test_variable ():
start = time.time()
for x in range(10**7):
a = 30
math.sqrt(a)
end = time.time()
print("局部变量耗时:{0}".format(end-start))
def test_globle ():
start = time.time()
for x in range(10**7):
math.sqrt(a)
end = time.time()
print("全局变量耗时:{0}".format(end-start))
test_variable()#局部变量耗时:1.363530158996582
test_globle()#全局变量耗时:1.4840335845947266
四.深浅拷贝及内存原理图
import copy #传参若发生拷贝则为浅拷贝!
a = [1,2,[3,4]]
b = copy.copy(a)
print("改变前a内容:{0};b内容:{1}".format(a,b))
b.append(6)
b[2].append(5)
print("浅拷贝:a内容:{0};b内容:{1}".format(a,b))
c = [1,2,[3,4]]
d = copy.deepcopy(c)
print("改变前c内容:{0};d内容:{1}".format(c,d))
d.append(6)
d[2].append(5)
print("深拷贝:c内容:{0};d内容:{1}".format(c,d))
?
五.参数的5中类型示例示例代码
def test(a,b,c):#位置参数
print("{0}-{1}-{2}".format(a,b,c))
test(1,2,3)
def test(a,b,c=3):#默认参数
print("{0}-{1}-{2}".format(a,b,c))
test(1,2)
def test(a,b,c):#命名参数
print("{0}-{1}-{2}".format(a,b,c))
test(b=1,a=2,c=3)
def test(a,b,*c,**d):#一个*是元组存储; 两个*是字典存储
print("{0}-{1}-{2}-{3}".format(a,b,c,d))
test(1,2,3,4,5,name=6,age=7)
def test(*a,b,c):#强制命名参数
print("{0}-{1}-{2}".format(a,b,c))
test(1,b=2,c=3)
六.lambda表达式示例代码
a = lambda a,b,c:a*b*c # lambda本质是函数的特例
def test(a, b, c):
return a*b*c
print("使用lambda:{0};使用函数:{1}".format(a(2,2,2), test(2,2,2)))
b = [lambda a:a*3, lambda b:b*3, lambda c:c*3] #函数也是对象哈!python中一切皆对象
print("a:{0}; b:{1}; c:{2}".format(b[0](2), b[1](3), b[2](4)))
七.eval()函数示例代码
eval("print('abcd')") # 将字符串 str 当成有效的表达式来求值并返回计算结果。
print(eval('20+30'))
dict_num = dict(b=10, c=20)
print(eval("b+c",dict_num))
八.递归函数案例及内存分析:阶乘函数
def test(num):
if num==1:
return 1
else:
return test(num-1)*num
print(test(3))
?
九.turtle相关案例代码:绘制18*18棋盘格
import turtle
p = turtle.Pen()
for x in range(19):#先画19条横线
if x%2==0:#此判断避免z字形绕路
p.penup()#抬笔
p.goto(-180,-180+20*x)
p.pendown()#落笔
p.goto(180, -180+20*x)
else:
p.penup()
p.goto(180 , -180+20*x)
p.pendown()
p.goto(-180,-180+20*x)
for x in range(19):#再画19条竖线线
if x%2==0:#此判断避免z字形绕路
p.penup()
p.goto(-180+20*x,180)
p.pendown()
p.goto(-180+20*x, -180)
else:
p.penup()
p.goto(-180+20*x ,-180)
p.pendown()
p.goto(-180+20*x,180)
turtle.done()#避免画框自动关闭
|