文章目录
函数用法和底层分析
函数简介(function)
函数的基本概念
1.一个程序由一个个任务组成;函数就是代表一个任务或者一个功能
2.函数是代码复用的通用机制
python函数的分类
函数的定义与调用
核心要点
形参和实参
文档字符串(函数的注释)
返回值
函数也是对象,内存底层分析
pyhton中,”一切皆是对象“。定义了一个函数之后,相当于定义了一个对象。可以调用好几次。
变量
变量的作用域(全局变量和局部变量)
全局变量
1.在函数和类定义之外生命的变量。作用域为定义的模块,在定义位置开始直到模块结束。
2.全局变量降低了函数的通用性和可读性。应避免全局变量的使用。
3.全局变脸一般作为常用变量使用。
4.函数内要改变全局变量的值,使用global声明一下
局部变量
1.在函数体中(包含形式参数)声明的变量
2.在局部变量的引用比全局变量快,优先考虑使用。
3.如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量。
【操作】全局变量的使用
局部变量和全局变量的效率测试
局部变量的查询和访问比全局变量快,尤其是在循环的时候
在特别强调效率的地方或者循环次数特别多的地方,可以将全局变量变成局部变量提高效率
“”"
#测试局部变量,全局变量的效率
import math
import time
def test01():
start = time.time()
for i in range(1000000):
math.sqrt(30)
end = time.time()
print(“耗时{0}”.format(end-start))
def test02():
b = math.sqrt
start = time.time()
for i in range(1000000):
b(30)
end = time.time()
print(“耗时{0}”.format(end-start))
test01()
test02()
参数
参数的传递
本质就是:从实参到形参的赋值操作。
1.对可变对象进行写操作,直接作用于原对象本身。可变对象有:字典列表集合 自定义的对象等
2.对不可变对象进行写操作,会产生一个新的对象空间 并用心的值填充这块空间 起到其他语言的值传递,但不是值传递
不可变对象有 数字、字符串、元祖、func。
传递可变对象的引用
传递不可变对象的引用
不可变对象:int 、字符串、元组,布尔值等
在赋值操作的时候,由于不可变对象无法修改,系统会创建一个新的对象。
深拷贝与浅拷贝
浅拷贝
深拷贝
传递不可变对象用浅拷贝
参数的类型
位置参数
默认值参数
命名参数
可变参数
可变参数指的值是可变数量的参数,分为两种情况:
1.*param(一个星号),将多个参数收集到一个元组对象中
2.**param(两个星号),将多个参数收集到一个字典对象中
强制命名参数
在带星号的可变参数后面增加新的参数,必须是强制命名参数
lambda表达式和匿名函数
eval()函数
功能:将字符串str当成有效的表达式来求值并返回计算结果
语法:eval(sourcel[,global[,locals]]) - >value
参数:
source:一个python表达式或函数compile()返回的代码对象
globals:可选。必须是dictionary
locals:可选。任意映制对象
递归函数
【操作】使用递归函数,计算阶乘
嵌套函数(内部函数)
nonlocal关键字
nonlocal 用来声明外部的局部变量
global 用来生命全局变量
LEGB规则