版权声明:
本文作者为—陈鑫
本文的所有内容均来陈鑫总结,未经本人许可,禁止私自转发及使用。
QQ: 499741233
E-mail: 499741233@qq.com
第1章 Python函数
面向对象
面向过程
1.可读性差
2.重用性差
函数式编程
第2章 自定义函数
看一个函数的例子:db文件内容为chenxin|123
def login(username,password): ''' 用于用户登陆 :param username: 用户输入用户名 :param password: 用户输入密码 :return: true,登陆成功 false,登陆失败 ''' file_name = open("db",'r') for line in file_name: line_list = line.split("|") if line_list[0] == username and line_list[1] == password: return True return False
解释:
1.def:表示函数的关键字
2.函数名:函数的名称,日后根据函数名调用函数
3.函数体:函数中进行一系列的逻辑计算,如:发送邮件
4.返回值:当函数执行完毕后,可以给调用者返回数据。
5.参数:为函数体提供数据(Python函数传递参数是传递一个引用。而不是重新赋值.)
1.普通参数(严格按照顺序,将实际参数赋值给形式参数)
2.默认参数(必须放置在参数列表的最后)
3.指定参数(将实际参数复制给指定的形式参数)
4.动态参数:
*args 默认将位置参数,全部放置在元组中
**kwargs 默认将关键字参数(字典),全部放置在字典中
5.万能参数
第3章 局部变量
1.在程序中定义的变量成为局部变量。
2.局部变量作用域是定义该变量的子程序。
3.当全局变量与局部变量冲突时,在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用
3.1 实 例:
#!/usr/bin/env python name = "chenxin" def change_name(name): print("before change:", name) name = "陈鑫" #定义局部变量 print("after chage:", name) change_name(name) print("在外面看name改了么?",name) 执行结果: before change: chenxin after chage: 陈鑫 在外面看name改了么? chenxin
第4章 全局变量
一、在程序一开始定义的变量称为全局变量。
1.全局变量定义变量,必须都是大写(潜规则)。比如:NAME="chenxin"
2.函数优先读当前环境变量,如果没有则会读全局变量,全局变量在所有的作用域都可读。
3.修改全局变量需要先global name,表示name是全局变量(重新赋值)。
4.特殊:列表,字典,元组嵌套列表,可修改,不可重新赋值。
第5章 内置函数
# all #非0即真 # any # # bool #0和,空字典空列表都是假 # callable #表示是否可执行,或是否可调用 # dir #快速查看对象提供了哪些功能 # divmod #文章分页使用 # isinstance #用于判断,对象是否是某个类的实例 # globals #列出全局变量 # locals #列出所有局部变量 # hash # #enumerate #float #format #frozenset # max #最大 # min #最小 # sum #求和 # int #整数 # hex #十进制转换十六进制 # bin #十进制转二进制 # oct #十进制转十进制 # filter #内部循环,参数比较 # map #将函数返回值添加到结果中 # compile #将字符串,编译成Python代码 # eval #执行表达式,并且获取结果 # exec #执行Python代码,接收:代码或者字符串 #id #查看内存地址 #input #等待用户输入 # isinstance #查看某个对象是不是某个类的实例 # issubclass # # len #查看长度 # list # # memoryview #查看内存地址相关类 # next # # iter #创建迭代器 # object #所有类的复类 # open # # ord # # pow # # print # # property # # range # # repr # # reversed #反转 # round # # set #集合 # slice # # sorted # # staticmethod # # str #字符串 # super #面向对象 # tuple #元祖 # type #类型 # vars #当前模块有哪些变量 # zip #压缩 # __import__ #导入模块 # delattr() # getattr() # setattr()
第6章 函数返回值
想要获取函数的执行结果,就可以用return语句把结果返回。
1.函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为return语句代表着函数的结果。
2.如果未在函数中指定return,那这个函数的返回值为None。
第7章 递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身,这个函数就是递归函数。
#!/usr/bin/env python def calc(n): print(n) if int(n/2) ==0: return n return calc (int(n/2)) calc(10)
7.1 递归特征:
1、必须有一个明确的结束条件。
2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少。
3、递归效率不高,递归层次过多会导致栈益处(在计算机中,函数调用是通过栈(stack)这种数据结果实现的,每当进入一个函数调用,栈就会加一层栈帧,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈益处。
第8章 匿名函数
匿名函数就是不需要显示的指定函数
#!/usr/bin/env python def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10)) #从上看来好像并无卵用,如果是这么用确实没毛改进,不过匿名函数主要是和其他函数搭配使用,如下: res = map(lambda x:x**2,[1,5,7]) for i in res: print(i) #结果: 1 25 49
第9章 高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
#!/usr/bin/env python def add (x,y,f): return f(x) + f(y) res = add(3,-6,abs) print(res)
第10章 函数式编程
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
而函数式编程,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。
我们首先要搞明白计算机(Computer)和计算(Compute)的概念。
在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言。
而计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远。
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
(1 + 2) * 3 - 4
#传统的过程式编程,可能这样写:
var a = 1 + 2; var b = a * 3; var c = b - 4;
#函数式编程要求使用函数,我们可以把运算过程定义为不同的函数,如下:
var result = subtract(multiply(add(1,2), 3), 4);
#这就是函数式编程(就会这么多)