一、函数
1、函数的传参:
(1)值传递:将实际的参数复制一份传递给形参,函数中修改形参时,不会影响到实际参数;
def a(b,c=2):
return b+c
print(a(10))
print(a(123,2))
print(a(2))
(2)引用传递:将实际参数的地址传递给形参,函数修改形参时,会影响到实际参数;
def a(b,d=[]):
d.append(b)
return d
print(a(10))
print(a(123,[]))
print(a('a'))
(3)不可变类型传参是值传递,可变类型参数传递是引用传递;
2、闭包
(1)必须有一个内嵌函数;
(2)内嵌函数必须引用外部函数的变量;
(3)外部函数的返回值必须是内嵌函数
def extend(a):
def hello(b):
return a*b
return hello
hello=extend(2)
hello(6)
闭包的作用:
3、*args和**kwargs的作用
(1)*args
发送一个非键值对的可变数量的参数列表给一个函数,*args
会接受任意多个参数,并把这些参数作为元祖传递给函数;
(2)**kwargs
存储可变的关键字参数,允许使用没有事先定义的参数名,将接收到任意多个关键字参数作为字典传递给函数;
(3)必须按照arg、*args*、*kwargs
的顺序。
4、递归
(1)递归模型
def recursions(n):
if n==1:
# 退出条件
return 1
# 继续递归
return n * recursions(n-1)
(2)递归深度
sys.getrecursionlimit()
5、函数和方法
如果是类调用的,需要穿self参数,则是函数(FunctionType),如果是对象调用的,不需要传self参数,这时他是一个方法(MethodType)
6、python变量的搜索顺序
本地作用域(Local)–>当前作用域被嵌入的本地作用域(Enclosing locals)–>全局/模块作用域(Global)–>内置作用域(Built-in)
二、模块:
1、os模块:
os模块是负责程序与操作系统的交互,提供了访问操作系统底层的接口
sys模块是负责python与python解释器的交互,提供了一系列的函数和变量,用于操控python时运行环境
os.getcwd() # 获取当前程序所在目录
os.name # 判断系统类型名称
os.path # 获取文件的属性信息
...
可以用subprocess模块执行shell脚本
2、__name__的作用:
- 一个模块被另一个模块第一次引用时,其主程序将全部运行。如果想在模块被引入时,模块中的某一块程序不被执行,那么此时可以用
__name__
属性来使该程序块仅在该模块自身运行时被执行; - 每个模块都有一个
__name__
属性,当其值是__main__
时,表明该模块在自身运行,否则是被引入
3、pickle模块的作用
(1)序列化后存入文件
pickle.dumps(对象,文件对象)
(2)从文件中反序列化对象
pickle.loads(文件对象)
- 可以处理复杂的序列化语法(例如自定义的类的方法、游戏的存档)
- 序列化的是对象,而不是内存地址
4、random模块
- random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。
- random.uniform()正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。
- random.randint()随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值,python
random.randint。 - random.choice()可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。
>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] ) #随机选取字符串:
'lemon'
- random.shuffle()如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。
p = ["Python", "is", "powerful", "simple", "and so on..."]
random.shuffle(p)
print p
#结果(因为随机,所以你的结果可能不一样。)
#['powerful', 'simple', 'is', 'Python', 'and so on...']
p = ["Python", "is", "powerful", "simple", "and so on..."]
- random.sample()可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。
5、日志(logging)
(1)日志的级别
(2)logging.basicConfig()函数说明
logging.basicConfig(**kwargs)
python日志处理
6、python装饰器
提高了代码的复用性
(1)常用于:
- 引入日志
- 函数执行时间的计算
- 执行函数前预备处理
- 执行函数后的清理工作
- 权限校验
- 缓存
7、python构造器
构造方法也叫构造器
__init__
8、python生成器
(1)生成列表的方式:
- 列表推导式(耗内存)
- 生成器(一边循环一边计算),依赖于
yeild
三、内置函数
1、map()函数
根据提供的函数对指定序列做映射
map(function,iterable,...)
print(list(map(str,[1,2,3,4,5,6,7,8,9])))
2、reduce()函数
reduce(function,iterable,[initializer])
3、filter()函数
把传入的函数依次作用域序列中的每个元素,然后根据函数返回值(True,False)进行过滤,决定是否保留该元素,函数返回值必须是True或者False
def isOdd(n):
""" 判断奇数 """
return n%2==1
f=filter(isOdd,[1,2,3,4,5,6,7])
print(list(f))
4、enumerate()函数
enumerate()用于将一个可遍历的数据对象(列表、元祖和字符串)组合成一个索引序列,同时列出数据和数据下标,该函数返回enumerate(枚举)对象
enumerate(一个序列、迭代器或者其他支持迭代的对象,[start=0])
5、zip()函数
以一个或多个序列作为参数,返回一个元祖的列表,并将这些序列中并排的元素配对,当传入的参数长度不同时,自动以最短的序列长度为准进行截取
a=[1,2,3]
b=[4,5,6,7]
print(list(zip(a,b)))
# 解压
a1,b1=zip(*zip(a,b))
print(a1,b1)
6、hasattr()、getattr()和setattr()
(1)hasattr():
hasattr(object,name)
判断一个对象中是否含有name属性或者name方法,返回bool值
(2)getattr()
hasattr(object,name,[default])
获取对象object的属性或者方法,若存在则打印出来,若不存在则打印默认值,如果返回的是对象的方法,那么打印的结果是方法的内存地址,如果需要运行这个方法,那么可以在后面添加括号
(3)setattr()
setattr(object,name,[default])
给对象属性赋值,若属性不存在,则先创建再赋值