Python 函数

发布时间: 更新时间: 总字数:1051 阅读时间:3m 作者: IP上海 分享 网址

Python函数的目的是降低编程难度、增加代码复用。

介绍

格式定义:

def 函数名(参数1, 参数2):
    实现语句
    实现语句
    return ...

def 函数名(positional_only_parameters, /, positional_or_keyword_parameters,*, keyword_only_parameters):

说明:

  • 函数名其实就是一个函数对象的引用,可以赋值给其他变量,等于起个别名
  • 参数:

    • 仅位置参数(positional-only)/ 之前定义的参数,传参时不带变量名
      • python3.8 引入了仅位置参数,内置函数早已使用该方法,可参考 help(sum)
    • 位置或关键字参数(positional_or_keyword)
      • / 后面和 * 号前面定义的参数,这里是我们自定义函数时最常用的
      • 传参时可以把它当作位置参数或关键字参数看待,可以带变量名也可以不带
    • 集合位置参数(var_positional) 函数定义时采用 *args 定义,是 可变参数,args 接收的是一个 tuple
    • 仅关键字参数(keyword-only)* 后面定义的参数(或在 *args 后面定义),传参时必需带变量名
    • 集合关键字参数(var_keyword) 函数定义时采用 **kargs 指定的参数,**kwargs 接收的是一个 dict,传参时必须带变量名
  • 返回值
    • 函数没有 return 时,自动 return Nonereturn None可以简写成 return
    • 返回多个值其实就是返回了一个 tuple

内建函数

  • len 函数返回序列中所包含元素的数量
  • minmax 函数返回序列中的最小值和最大值
  • python内建了 map()reduce()filter()函数。这些函数接受两个参数,一个是函数,一个是序列。
    • map 函数会根据提供的函数对指定序列做映射
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
返回结果为:
[1, 4, 9, 16, 25]
  • reduce 函数会对参数序列中元素进行累积,py3以后使用,必须导入 from functools import reduce
def myadd(x,y):
    return x+y
sum=reduce(myadd,(1,2,3,4,5,6,7))
print(sum) # 结果就是输出1+2+3+4+5+6+7的结果即28
  • filter 函数会对指定序列执行过滤操作
def is_even(x):
    return x & 1 != 0
filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 返回结果为:
[1, 3, 5, 7, 9]
  • Python 内置的 sorted(iterable, key=None, reverse=False) 可以对 list 进行排序
a_list = ["aaa", "cc", "bb"]

# Sort by length then alphabetically
new_list = sorted(a_list, key=lambda x: (len(x), x))

print(new_list)
# ['bb', 'cc', 'aaa']
  • map(func, *iterables) Make an iterator that computes the function using arguments from each of the iterables.
>> [i for i in map(lambda x: x*2, range(1, 10))]
[2, 4, 6, 8, 10, 12, 14, 16, 18]

内名函数

lambda关键字表示匿名函数,例如:

f = lambda x: x * x

匿名函数有个限制:只能有一个表达式,不用写return,返回值就是结果。

函数 vs generator

  • Generator 是边用边生成,而不是一次性生成。下面示例中,a就是一个 generator,和 [x * x for x in range(5)] 不同:
a = (x * x for x in range(5))
  • 如果一个函数中包含 yield,那么该函数就不是一个普通的函数,而是一个 generator

  • generator 和普通函数的执行流程不一样

    • 函数是顺序执行,遇到 return 或最后一句时就返回
    • generator 调用 next() 时才执行,遇到 yield 就返回,再次执行时,从上次的 yield 处继续执行
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数