函数
为了提高代码的利用率,我们需要将重复的代码包装成一个函数来进行使用,这样可以提高工作效率,也便于代码的管理,在python中,我们需要使用def来定义一个函数,函数名最好使用下划线法来进行命名,符合代码规范,需要调用函数的时候只要写函数的名字加小括号就可以调用了
同时可以在定义函数的时候在括号内加上参数来丰富函数的功能,参数的形式有普通参数,默认参数,不定长参数,不定长参数有两种,带一个*号的与带**号的,区别在于一个接收的是不定长的普通参数,两个接收的是定长的字典参数
参数的传递顺序必须按照首先普通参数,然后默认参数,接着不定长参数,不定长参数(*args)要在(**kwargs)之前。同时,函数可以返回值,用return来返回,注意一旦返回值函数之后的代码就不会执行了,函数已经结束,若要返回多个值,需要在同一句return语句中返回
可以看到返回之后的那一句并没有执行,返回多个值的时候返回形式是以元组的形式返回
局部变量与全局变量
局部变量是指在函数内使用的变量,在函数外这个变量不存在,不可用,全局变量则是在整个程序运行过程中起作用,在函数内外均可以使用,若要在函数内声明全局变量,需要在变量声明前加global关键字
可以看到局部变量b在函数内可以正常使用,但是在函数外则显示未定义,但在函数内声明的全局变量c可以在函数外正常使用
递归函数
递归函数是指在函数调用函数自身,相当于一个循环,故也有可能像while一样可能造成死循环,所以一定要定义递归的边界,什么时候退出循环,比较明显的递归例子有斐波拉契数列,汉诺塔,阶乘等,这里示例来做一个求和的递归函数,输入一个整数n,求1+2+3+4+…+n的值
匿名函数
匿名函数,也就是lambda函数,意义:在我们声明函数的过程中太过复杂,甚至是对一些简单的函数也需要几行才可以完成,而且函数多了名字会有重复的问题,为了简便函数的声明,于是引入了匿名函数,匿名函数不用单行命名重复的问题,适用于生成简单的函数,复杂的函数则不适用。
关于filter(过滤),map(刷子),reduce(合并)
filter是过滤出满足条件的元素,需要传入两个参数,第一个是函数,也就是过滤条件,可以使用lambda匿名函数,第二个参数传入范围,也就是被过滤的值,示例
map和filter类似,也需要传入两个参数,首先是一个函数,然后是作用范围,map的功能是将后面作用范围内的每一个值都采用前面的函数运算,示例
reduce与前两个不同,使用前需要先导入,因为在python3中,reduce不是内建函数了,需要先从functools中导入在使用,传入的参数还可以多一个初始值,reduce的作用是将后面的作用值依次参与前面函数的运算,最后返回一个值,示例
文件操作
在我们进行编程的时候,总会有input和output,对于文件的操作也是,尤其是在Linux中,有着一切皆文件的说法,对于文件的操作一般有三种,读,追加写入,覆盖写入,也就是我们通常所说的io操作,python中对于文件的操作是通过open来操作的,open需要的参数有文件名,打开方式,打开方式又分为多种,r:只读,r+:读写,指针在文件开头,rb:以二进制只读,一般带b的二进制操作针对于非文本操作,w:覆盖写入,w+:读写,指针在开头,wb:二进制写入,a:追加写入,指针在文件末尾,a+:读写,ab:二进制追加写入,还有rb+:二进制读写,wb+:覆盖写入追加,ab+:二进制追加,在打开文件操作完毕后,一定要关闭文件,读取文件方法为,readlines:按行读取整个文本并返回,readline:读取当前指针所在的行并返回,然后指针指向下一行 ,read(number)读取规定字节数量的内容,write方法用于写入文本,写完换行
然后可以根据文件形式和需求看是否进行二进制操作,需要二进制操作则加上b
此外,我们还可以用tell方法来获取当前指针的位置
数字14和30指的是当前二进制位置。
对于文件操作,还有专业的os模块可以使用,对于文件和文件夹得操作十分方便。比如说,可以用name方法来获取当前工作的平台是windows还是Linux,"nt"表示是windows平台
使用os.getcwd()可以获取当前执行程序的路径
使用os.listdir()来获取目录下的所有文件和文件夹
使用os.mkdir()创建新目录
使用os.remove()删除文件,使用os.rmdir()删除文件夹,创建多层文件夹使用mkdirs(),使用path.isdir()判断是否是一个文件夹,使用path.isexist()判断文件或者文件夹是否存在,使用chdir()改变当前工作目录,使用path.xxx()来进行相关路径的操作
注:windows平台下os.path.isexist()不存在