五、函数和内存分析

函数的基本概念

1.一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。

2.函数是代码复用的通用机制

python函数的分类

1.内置函数,可以直接拿来使用的

2.标准库函数ipmort

3.第三方库函数,比如语音识别,科大讯飞的库,python社区提供了很多高质量的库

4.自定义的库

文档字符串:(注释)

‘’‘  xxxx ’‘’:通过help(函数名._doc_)进行调用

a='''  xxxx '''表示多行输入字符串

返回值

1.有return返回,没有返回none;

2.return有两个作用:1)返回值  2)函数执行结束

3.返回的值也可以是列表、元组、字典、集合

函数也是对象

python中一切皆对象,函数也是一个对象

def test01()

    print("djw")

test01()

c=test01

c()

上述代码中将test01的地址复制给了c,(括号)代表调用,调用的是一个function的对象,这个对象的值是djw所以c和test01调用的都是这个function的对象。如图:

变量的作用域:全局变量、局部变量

全局变量:尽量少定义,一般作为常量,使用global()可以进行查看,函数如果被调用,本身也是一个全局变量,如上面的test01

局部变量:调用的时候,会动态的创建栈帧,使用local()可以进行查看局部变量

参数传递
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。copy.copy()
深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不影响原对象。 copy.deepcopy()

不可变参数:字符串、元组、数字等都是浅拷贝。

可变参数
* 一个星号,将多个参数收集到一个"元组"对象中
** 二个星号,将多个参数收集到一个"字典"对象中

lambada表达式就是用来做一些简单的表达式,用来声明匿名函数:lambada arg1,arg2... <
表达式>

eval()函数:括号里面可以传递字符串

递归函数:自己调用自己的函数,在自己调用自己的同时,不断的在栈中创建引用,因此必须 有结束语句.

#计算阶层

def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)

returns=factorial(5)
print(returns)

 嵌套函数:在函数内部调用的函数,在内部函数可以封装,隐藏,降低重复代码,外部无法调用内部函数。

 nonlocal:表示声明外部函数的局部变量

LEGB规则:local-->enclosed(内置函数变量)-->global--->built in(内置函数)

原文地址:https://www.cnblogs.com/dangjingwei/p/12234529.html