函数(2)

Python基础

特殊变量

Python解释器提供了一些以两个下划线开头和结尾命名的变量,它们具有特别意义,比如_doc_ (获得文件里面的注释内容) _file_ ,表示当前脚本路径等,这也是为什么文件命名要尽量避免以两个下划线开头和结尾

递归函数(Recursive Function)

自己调用自己的函数,编写递归函数要重点把握两点:递推关系和递归结束条件

每次调用函数都需要分配一块栈区空间,用于储存函数的参数以及内部定义的局部变量等数据,在函数执行结束返回后,它对应的栈区空间会被释放(归还给系统),里面的数据将不复存在,如果不停地调用函数,并且函数都没有返回,那么栈区空间迟早会被耗尽,导致无法继续调用函数

递归思想在解决某些复杂问题时可能会意想不到的简单!

def f():

f()

f()

递归调用的深度不能太深,函数调用会耗费时间和内存空间,函数里的参数和变量存在栈区空间,还会存放函数执行的位置,而区栈空间是有限的,一般只有两兆的空间 ,所以此函数调用会失败

匿名函数(Lambda)

Lambda表达式,主要用于Python函数式编程中,或临时使用函数的场合,我们不想费神去定义一个函数名,使用lambda关键字定义

模块(Module)和包(Package)

模块就是Python源文件,可以直接运行,也可以被导入其他模块(使用import关键字,以调用它里面定义的全局变量、函数、类等,并能解决变量、函数和类的命名冲突问题 不同模块中可以冲突)

包就是存放若干个模块的文件夹,可以解决模块的命名冲突问题(在不同包中的模块可以同名),为了和普通文件夹有所区别,标准的做法是在包下面创建一个__init__.py文件,这个文件夹可以为空

注意import和from...import的用法区别

import Module # 引入模块

from Module import Other # 引入模块中的类、函数或者变量

from Module import * # 引入模块中的所有‘公开’成员

PS:当有一个包名为pname时,其内部 .py 文件的模块名就是 pname. 也就是说模块名中包含了 Package包 这个概念。

其区别就是:

第一个:引入的模块(假如是 mdemo )会自动生成一个‘对象‘以模块名命名,然后就可以通过这 个‘对象’(mdemo)获取该模块里面的类、函数或变量等..

第二个:引入模块中的Other(这里的Other就是模块中定义的成员)成员, 调用时就可以省略 模块名。

第三个:这种情况如果上面的第二个弄懂的话就不难理解了, 其意思就是引入模块中所有'公开'的成员。

标准库(不需要下载,直接可以使用)和第三方库

第三方库在使用时需要先下载,通常使用pip这个包管理器,其常用用法如下:

安装第三方库: pip install 包名 [-i https://pypi.douban.com/simple]

卸载第三方库:pip uninstall 包名

显示所有已安装的包:pip list

扩展

1.哲学:存在即合理

2.tuple的访问效率比list快一些,能用tuple的地方就不用list

3.tuple和list里面可以为任意数据类型

4.函数调用的变量一般使用两个即可,如果非要使用则顺序为:未知,默认,可变,命名,关键字

作业

1.解决汉诺塔问题

2.解决八皇后问题

3.实现一个二维码生成器

调用各种模块

 

猜你喜欢

转载自www.cnblogs.com/yanruizhe/p/11228318.html