Python极简读书笔记(四)Python函数

102 阅读2分钟

image-20221101171739404image-20221101171739404

image-20221101171801491

如何定义一个函数

image-20221101171905073

传参

  • 位置参数

  • 关键词参数

  • 可变参数:收集起来统一存放中以形参名为特定标识符的元组之中。

    • *args : 元组
    • **args: 字典

image-20221102105820075

  • 默认参数: def defautFun(x, y = 3)

参数序列的打包和解包

  • 打包&解包

    • val = 1, 2, 3, 4 # val元组, 打包操作
      ​
      a, b, c, d = val # a-d都是int,解包操作
      
  • 传值的时候,*val 传列表,**dict传字典

传值还是传引用

  • python的参数传递方式是统一进行对象引用传递,也就是传的是对象的内存地址,地址即引用
  • 不可变对象,函数内部会重构一个实参副本
  • 可变对象,修改形参,就会修改实参

函数的递归

  • 递归一定要有终止条件,这又被称为递归出口

    • 递归出口通常用if语句来设置

    • 被递归了?

      • image-20221102145134233
  • 迭代:5! = 1 * 2 * 3 * 4 * 5

  • 递归:5! = 5 * 4!

  • 递归过程每一步都是同一个算法,算法的逻辑变得非常简单,计算机只需要自顶向下不断重复即可。

函数式编程的高阶函数

函数就是面向过程编程范式的基本单元。

函数在python中是以对象的形式出现的。

函数式编程的一个显著特征——它允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

lambda表达式

lambda x, y : x + y

image-20221102145800432

Python filter() 函数

filter(function, iterable)
​
def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(newlist))

Python map() 函数

map(function, iterable, ...)
​
>>> def square(x) :         # 计算平方数
...     return x ** 2
...
>>> map(square, [1,2,3,4,5])    # 计算列表各个元素的平方
<map object at 0x100d3d550>     # 返回迭代器
>>> list(map(square, [1,2,3,4,5]))   # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))   # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
>>>

Python reduce() 函数

reduce(function, iterable[, initializer])
​
#!/usr/bin/python
from functools import reduce
​
def add(x, y) :            # 两数相加
    return x + y
sum1 = reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
print(sum1)
print(sum2)

Python List sort()方法

list.sort(cmp=None, key=None, reverse=False)
​
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond)
# 输出类别
print('排序列表:')
print(random)

函数只能返回一个值,python同样是遵守的,不过通过打包/解包的形式让用户感觉返回了多个值

image-20221102150706682

image-20221102150839734

image-20221102150851034

image-20221102150859945

  • 问: 对Python 不区分大小写对字符串列表排序

    string_list = ['d','s','a','i','j','A','S','D','U','N']
    new_list = sorted(str_list, key=str.lower)