Python语法-函数进阶篇

2020-10-18  本文已影响0人  蒋征

主要是对函数的一些补充内容,包括递归函数,常见内置函数和常见的高阶函数的使用

递归函数

和所有语言一样,递归函数说穿了就是自己调用自己,如果大家想要一个官方术语:递归就是子程序(函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。

image.png

递归函数例子:

# 递归函数
def factorial(n) :
    # 结算数字的阶乘
    if n==1 :
        return 1
    else :
        return n * factorial(n-1)

print('数字的阶乘结果为:%d'%factorial(5))

计算的结果为:

数字的阶乘结果为:120

匿名函数

定义函数的过程中,没有给定名称的函数就叫匿名函数; Python中使用lambda表达式来创建匿名函数

匿名函数有一些基本规则:

# 匿名函数
"""
    匿名函数格式:lambda [参数] : expression
    默认会返回一个表达式
"""

匿名函数案例:

# 无参匿名函数
e = lambda : 'Hello World'
print(e())

# 有参匿名函数
e = lambda x,y : x+y
print(e(3,2))

# 矢量化三元运算符
e = lambda x,y : x if x > 2 else y
print(e(3,2))

运行结果:

Hello World
5
3

内置函数

print(dir(__builtins__)) # 我们可以通过这行命令打印所有的内置函数
image.png

上图中展示的为经常使用的几个函数,以及相应的参数和方法

以sorted函数使用举例:

# -*- coding:utf-8 -*-
dict = {'a':'1','c':'2','b':'3'};
## 只返回key
dict2 = sorted(dict);
## 整个item返回
dict3 = sorted(dict.items());
## 逆序排列
dict4 = sorted(dict.items(),reverse=True);
## 指定排序key
dict5 = sorted(dict.items(),key=lambda x:x[1],reverse=True);

print(dict)
print(dict2)
## 列表推导式
print({k:v for k,v in dict3})
print({k:v for k,v in dict4})
print({k:v for k,v in dict5})

运行结果,大家可以自己映射

{'a': '1', 'c': '2', 'b': '3'}
['a', 'b', 'c']
{'a': '1', 'b': '3', 'c': '2'}
{'c': '2', 'b': '3', 'a': '1'}
{'b': '3', 'c': '2', 'a': '1'}

我们可以通过help函数来帮助我们学习使用函数:

help(sorted)

运行结果:

Help on built-in function sorted in module builtins:

sorted(iterable, /, *, key=None, reverse=False)
    Return a new list containing all items from the iterable in ascending order.
    
    A custom key function can be supplied to customize the sort order, and the
    reverse flag can be set to request the result in descending order.

image.png

上图中展示的就是常见的内置函数,标红的为经常使用的函数。


高阶函数

以下为常见的三个进阶函数,我们了解以下

image.png

map

## base data
list01 = (1,3,5,7,9)
list02 = (2,4,6,8,10)

## map
maplist = map(lambda x:x*2,list01)
print(maplist)  ## map函数返回的是map对象
print(list(maplist)) ## 将map对象转化为list对象

maplist = map(lambda x,y:x+y,list01,list02)
print(list(maplist)) ## 多个集合操作

运行结果

<map object at 0x0000024DAE790A60>
[2, 6, 10, 14, 18]
[3, 7, 11, 15, 19]

filter

## base data
list01 = (1,3,5,7,9)
list02 = (2,4,6,8,10)

## filter
filterlist = filter(lambda x:x>4, list02)

print(filterlist)  ## filter函数返回的是filter对象
print(list(filterlist)) ## 将filter对象转化为list对象

运行结果为:

<filter object at 0x000001638C7B4A60>
[6, 8, 10]

reduce

## base data
list01 = (1,3,5,7,9)
list02 = (2,4,6,8,10)

## filter
from functools import reduce
reducelist = reduce(lambda x,y:x+y,list02)

print(reducelist)  ## reduce函数返回合并以后的结果

运行结果为:

30

上一篇下一篇

猜你喜欢

热点阅读