1.函数与过程
过程是简单的,特殊且没有返回值的;函数有返回值,python严格来说只有函数没有过程。
python所有的函数都有返回值:如果没有使用return语句指定返回值,python会返回一个None对象。
def hello():
print('hello world')
temp = hello()
print(temp)
# 运行结果
hello world
None
2.全局变量
作用于整个模块。函数内若试图修改全局变量,python会新建一个同名局部变量用于存储修改值,原全局变量的值不变。
var = ' Hi '
def fun1():
global var
var = ' Baby '
return fun2(var)
def fun2(var):
var += 'I love you'
fun3(var)
return var
def fun3(var):
var = ' Lucy '
print(fun1())
# 运行结果
Baby I love you
3.递归的条件
递归必须满足两个基本条件:
- 函数调用自己;
- 函数设置了正确的返回值
4.一些重要的BIF
4.1内置zip()函数
zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
注意:zip()方法在python2和python3中的不同,python3为了减少内存,zip()返回的是一个对象,如果需要展示列表,需使用list()方法转换。
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = [4, 5, 6, 7, 8]
>>> zipped = zip(a, b) # 返回一个对象
>>> zipped
<zip object at 0x000001963BF0A180>
>>> list(zipped) # list()转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a, c)) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b)) # 与zip相反,*zip可理解为解压,返回二维矩阵式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
4.2 lambda表达式
- python写一些执行脚本时,使用lambda可以省下定义函数的过程,使代码精简
- 对于一些比较抽象且被调用次数少的函数,使用lambda无需考虑命名问题
- 提高代码可读性,省去阅读开头def定义部分的时间
lambda x:x if x%2 else None
# 转化为普通函数:
def odd(x):
if x%2:
return x
else:
return None
4.3 filter()
filter(function or None,iterable):两个参数为函数和可迭代的序列,函数定义了过滤的规则,默认过滤出真的部分。
>> a = list(filter(lambda x:x%3 == 0, range(1,100)))
>>> a
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
>>> b = list(filter(lambda x:not(x%3), range(1,100)))
>>> b
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
>>> c = list(filter(lambda x: x if x%3 == 0 else None, range(1,100)))
>>> c
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
>>> d = list(x for x in range(1,100) if x%3 == 0) # 列表推导式法
>>> d
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
4.4 map()
map(function or None,iterable): 同filter()的两个参数相同,这个内置函数的作用是,将序列的每一个元素作为函数的参数进行运算加工,直到可迭代序列的每个元素都加工完毕,返回所有加工后的元素构成的新序列,也称映射。
>>> list(map(lambda x : x * 2, range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]