Python的函数,内建函数、匿名函数、递归函数

目录

1、关于函数

1.1  定义

1.2 语法

1.3  参数

2、内建函数

3、匿名函数

3.1 定义

3.2 语法

3.3 举例

4、递归函数

4.1 定义

4.2 特性

4.3 举例


1、关于函数

        1.1  定义

        你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

       1.2 语法

def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

        1.3  参数

        形参:函数定义时的参数名。

        实参:函数调用时的实际值。

        可变长形参之*
        形参中的*会将溢出的位置实参全部接受,然后以元组的形式存储,然后把元组赋值给*后的参数,需要注意的是*后的参数名约定成俗成为args。

        可变长实参之*
        实参中的*会将*后参数的值循环取出,打散成位置实参,以后但凡碰到实参中带有*的,就是位置实参,应该马上进行打散成位置实参去看。

       可变长形参之**
形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数,需要注意的是**后的参数名约定成俗为kwargs。

       可变长形参之**
形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数,需要注意的是**后的参数名约定成俗为kwargs。

        1.4  函数的return

        退出函数,并且返回结果,可以有多个return,一旦执行到return就退出不会执行后面的语句了,函数也可以没有return,或者return后面不接返回值,默认返回值都是None,return后面也可以接多个返回值。

2、内建函数

        python的内建函数即是python自带的函数,这种函数不需要定义,并且不同的内建函数具有不同的功能,可以直接使用。

abs()返回数的绝对值
all()如果可迭代对象中的所有项均为 true,则返回 True。
any()如果可迭代对象中的任何项为 true,则返回 True。
bin()返回数的二进制版本。
bool()返回指定对象的布尔值。
bytes()返回字节对象。
compile()把指定的源作为对象返回,准备执行。
complex()返回复数。
dict()返回字典(数组)。
dir()返回指定对象的属性和方法的列表。
eval()评估并执行表达式。
filter()使用过滤器函数排除可迭代对象中的项目。
float()返回浮点数。
format()格式化指定值。
frozenset()返回 frozenset 对象。
getattr()返回指定属性的值(属性或方法)。
help()执行内建的帮助系统。
hex()把数字转换为十六进制值。
id()返回对象的 id。
input()允许用户输入。
int()返回整数。
isinstance()如果指定的对象是指定对象的实例,则返回 True。
issubclass()如果指定的类是指定对象的子类,则返回 True。
iter()返回迭代器对象。
len()返回对象的长度。
list()返回列表。
map()返回指定的迭代器,其中指定的函数应用于每个项目。
next()返回可迭代对象中的下一项。
object()返回新对象。
oct()把数转换为八进制。
open()打开文件并返回文件对象。
ord()转换表示指定字符的 Unicode 的整数。
pow()返回 x 的 y 次幂的值。
print()打印标准输出设备。
range()返回数字序列,从 0 开始且以 1 为增量(默认地)。
reversed()返回反转的迭代器。
round()对数进行舍入。
set()返回新的集合对象。
slice()返回 slice 对象。
type()返回对象的类型。

        具体请参考: 

Python 内建函数 (w3school.com.cn)

3、匿名函数

        3.1 定义

        python 使用 lambda 来创建匿名函数。

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

3.2 语法

        lambda [arg1 [,arg2,.....argn]]:expression

3.3 举例

例1:
def s(x):
    if x==1:
        return "yes"
    else:
        return "no"
print(s(0))
print(s(1))


匿名函数:
s=lambda x:"yes" if x==1 else "no"
print(s(0))
print(s(1))

输出:
no
yes
no
yes
例2:
def sum(x,y):
    return x+y
print(sum(1,2))


匿名函数:
sum = lambda x,y : x+y
print(sum(1,2))


输出:
3
3
print(list(map(lambda  x,y:x+y, lst, lst2)))
#x,y为需要接收的参数,x+y为要得到什么结果对参数进行什么处理

4、递归函数

4.1 定义

        函数在运行的过程中,直接和间接调用了自身,就是递归函数。

4.2 特性

  • 必须有一个结束的条件
  • 每一次递归都必须离“结果”更近一步
  • 通常前一次的输出作为后一次的输入
  • 如果没有结束的条件或者递归次数过多会导致内存溢出

4.3 举例

        1.斐波拉契数列

        现在有数列,[1,1,2,3,5,8,13,......,n],请问第7位数是什么?请编写一个函数。

def fact(a):
    if a <= 2:
        return 1
    return fact(a - 1) + fact(a - 2)
print(fact(7))

        上述前一个数和有一个数之间有关联:f(n) = f(n-1) + f(n-2)。使用递归函数需要注意防止栈溢出。

        2.走楼梯问题

        每次走楼梯可以选择走一个台阶,或者两个台阶,走到n阶台阶共有多少个走法?

        到第10阶的方式第可上一阶可上二阶,到达第8阶的方式+到达第九阶的方式就为到达第10阶的共有的方式。

def func1(n):
    if n == 1 or n == 2:
        return n
    else:
        return func1(n-1)+func1(n-2)

print(func1(10))

        有一对雌雄兔每两个月繁殖一对雌雄兔,第n每月有多少对?

def func1(n):
    if  n<= 2:
        return 1
    return func1(n - 2)*2
print(func1(6))

        参考文章:Python 函数 | 菜鸟教程 (runoob.com)

5、高阶函数

        5.1 定义

         把函数作为参数传入,这样的函数称为高阶函数。

        5.2 map

        内置函数map,map()函数接收两个参数,一个是函数,一个是Iterable(可多个),
        • map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

# map函数:求list[1-10]各项的平方
def f2(m):
    return m * m
print(list(map(f2, range(1,11))))

输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

        5.3 filter

        filter()把传入的函数依次作用于每个元素,然后根据返回值是True保留,还是False丢弃该元素。

 #filter函数:找出[1-100]能被3整除的数
def f(n):
    return n % 3 == 0
print(list(filter(f, range(0,101))))

输出:
[0, 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]

        5.4 reduce

        用Python-reduce代码实现:将列表[1,3,5,7,9],变成整数13579
        • reduce把一个函数作用在一个序列[x1, x2, x3, ...]上
        • 这个函数必须接收两个参数
        • reduce把结果继续和序列的下一个元素做累积计算
        • reduce(f, [x1, x2, x3, x4]) => f(f(f(x1, x2), x

from functools import reduce
def f(x, y):
    return x * 10 + y
print(reduce(f, [1, 3, 5, 7, 9]))    运行结果13579
# 将列表[1,4,5,9]转换成'1459'的字符串
from functools import reduce
def f3(b, a):
    return b * 10 + a
print(reduce(f3,[1,4,5,9]))

输出:
1459

        5.5 sorted

        用Python-sorted代码实现:按绝对值大小排序,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。
        对比原始的list和经过key=abs处理过的list:
        • 执行语句:sorted([36, 5, -12, 9, -21], key=abs)

list1 = [7,-8,5,4,0,-2,-5]
print(sorted(list1,key=lambda x:(x<=0, abs(x))))

输出:
[4, 5, 7, 0, -2, -5, -8]
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值