Day3 函数
1. 面向对象 ---类,class
面向过程 ---过程,def
函数式编程 --函数,def
2.过程和函数的区别:
过程是没有返回值的函数。
返回值可以为数字,字符串,列表,字典。没有定义返回值时,返回None。
def func():
'func' #函数
print('hello')
return 0
def func2():
'process' #过程
print('hello')
3.使用函数的三大优点:
a.可扩展性
b.可重复性
c.保持一致性
eg.
import time def logger(): with open("a.text",'a+') as f: time_format='%y-%m-%d %x' time_current = time.strftime(time_format) f.write('\n%s first time\n'%time_current) def func1(): print('in the test 1') logger() def func2(): print('in the test 2') logger() def func3(): print('in the test 3') logger() func1() func2() func3()
4.位置参数调用:需要实参和形参一一对应
关键字调用: 与形参顺序无关
def test(x,y)
print(x)
print(y)
test(x=1,y=2) #关键字调用
test(1,2) #位置参数调用
test(2,y=3) #关键参数不能写在位置参数前面。
5.默认参数特点:调用函数的时候,默认参数非必须传递。
用途:a.默认安装值
eg. def conn(host,port =3306)
pass
6.参数组
a. def test(*args): # *args接受多个位置参数,转换为元组
print(args)
b。与位置参数混合使用
def test(x,*args)
print(x)
print(args)
test(1,2,3,4,5)
结果:1
(2,3,4,5)
c.**kwargs 把N个关键字参数,转换成字典的方式
def test(**kwargs)
print(kwargs)
test(name = 'alex',age = 8,sex ='F')
结果:{'name' : 'alex','age' :8,'sex':'F'}
参数组一定要放在位置参数,默认参数之后。
7.递归
a.必须要有明确的结束条件,否则会死循环,递归循环次数默认为998次。
b.每次进入更深一层递归时,问题规模相比上次递归应有所减少。
c.递归效率不高,递归层数过多会导致栈溢出。(因为函数调用是通过栈这种数据结构来实现的,每当进入一个函数调用,就会加一层栈帧,每当函数返回,会减少一层栈帧,由于栈的大小不是无限的,所以当递归次数过多时,会导致栈溢出。)
8.匿名函数:
9.函数式编程:
a.函数式编程的语言:lisp,haspshell,erlang
b.Python只支持部分函数式编程。
c.把运算过程尽量写成一系列嵌套的函数调用。
10.高阶函数:
函数的参数能接受变量,变量能接受函数,那么一个函数也可以接受另外一个函数作为参数,这就叫高阶函数。
def add(a,b,f):
return f(a)+f(b)
print(add(4,-1,abs))
11.把字符串转换为字典
b = eval (a) #a 是字符串,b 为字典
12.内置函数
abs() : 绝对值
all(): 如果迭代器里所有的元素为真则返回真,否则返回false
any(): 如果迭代器里任意一元素为真则返回真,否则返回false
ascii(): 把内存的数据对象编程可打印的字符串的形式
bin(): 把数字由十进制转二进制
bool(): 0为假,1 为真,空为假
bytearray():把二进制变成数组的格式然后编辑修改
callable(): 看是否可调用, eg.函数,类可调用
chr(): 将数字转换为ASCII表对应的字符
ord(): 将ASCII 的字符转换为相应的数字
classmethod():类方法
compile(): 用于编译代码,可以将一段代码转成字符串,在赋给一个变量,再动态调用/
用exec直接调用
complex(): 复数
delattr():
dict(): 字典
dir(): 比如有一个字典,,dir可以查看字典里有什么方法。双下划綫的是内部方法,除了next的内部方法可以用,其余的不能用
divmod(): 相除返回(商,余数)
enumerate(): 返回下标及内容,同时需要index和value值的时候可以使用 enumerate。
eval(): 把一个字符串变成字典,简单的加减乘除/数据类型,如果是复杂的数据算法,则要用exec()
exec():
fiter(): 按条件筛选出值并返回
匿名函数:lambda,
map(): 把一个列表中的所有元素统一处理返回并覆盖。
eg. res = map(lambda n:n*2,range(10))
res = [lambda i:i*2 for i in range(10)]
reduce(): 在3.0里,需导入import functools,再使用reduce.:每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。在reduce函数f中,init是可选的,如果使用,则作为第一次迭代的第一个元素使用。eg。阶乘。
res = functools.reduce(x,y:x*y,range(1,n+1),2) -------->最后一个2代表2倍
frozenset(): 冻结的不可变的集合。集合本身可变。
getattr(): 面向对象时用
globals(): 以key/value 格式返回当前程序所有的全局变量,也可以用来判断一个变量存不存在。
hash(): 折半查找,先将无序的列表通过一定的算法编程有序的映射表,然后通过对比,对半删掉进行查找。MD5是哈希的一种算法
help(): 查看帮助
hex(): 把一个数字转成十六进制
id(): 返回内存地址
isinstance():
issubclass(): 是不是一个子类
iter(): 迭代器
len(): 长度
local():
max(): 最大值
min(): 最小值
class object
oct(): 转八进制
repr(): 用字符串表示一个对象。
reversed():
pow(): a的b 次方
round(): 对传入的参数四舍五入
sorted(): 排序
type(): 查看数据类型
vars(): 返回一个对象的所有属性名
zip(): zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。合并

浙公网安备 33010602011771号