三、函数

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.递归的条件

递归必须满足两个基本条件:

  1. 函数调用自己;
  2. 函数设置了正确的返回值

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]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛江清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值