Python函数

本文详细介绍了Python中的函数,包括如何定义和调用函数,以及函数参数的使用,如位置参数、关键字参数、默认参数、可变参数(元组和字典类型)。此外,还讲解了函数作用域、全局与局部变量,以及`global`和`nonlocal`关键字。同时,提到了函数类型、过滤函数`filter()`、映射函数`map()`、匿名函数`lambda`以及递归函数的概念。最后,举例展示了这些概念的实际应用。
摘要由CSDN通过智能技术生成

目录

1、定义函数

2、调用函数

3、函数参数

3.1使用位置参数(必须参数)调用函数

3.2使用关键字参数调用函数

3.3默认参数

3.4可变参数

3.4.1基于元组的可变参数(*可变参数)

3.4.2基于字典的可变参数(**可变参数)

4、函数中变量的作用域

4.1 global关键字

4.2 nonlocal 关键字

5、函数类型

5.1理解函数类型

5.2过滤函数filter()

5.3映射函数map()

6、匿名函数

7.递归函数


认识函数:

函数:封装具有某种具体功能的代码块。

        在此之前我们已经见过一些函数了,比如 del len print range input type 等都是我们Python中已经定义好的函数。

1、定义函数

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

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

语法:

Python定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):
    函数体
    return 返回值 # 若没有返回数据,则return可以省略

默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。

示例:

# 函数有返回值
def rect_area(width,height):
    are = width * height
    return area
# 函数没有返回值
def rect_area(width,height):
    are = width * height
    print(f'长方形的面积为{are}')

2、调用函数

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,就可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

示例:

def hello():
    print('hello world')

a = hello()

# 输出
hello world

3、函数参数

格式:

def 函数名(形式参数/形参):
    函数体(代码块)
# 调用函数
函数名(实际参数/实参)

参数分为两种:形式参数(形参),实际参数(实参)

函数在使用参数和调用参数的过程叫做:传递参数(传参)

形式参数:就是一个参数名,没有任何数值。 实际参数:有实际数值

3.1使用位置参数(必须参数)调用函数

        在调用函数时传递的实参与定义函数时的形参顺序一致,这是调用函数的基本形式。

示例:

def rect_area(width,height):
    area = width * height
    return area

r_area = rect_area(5,6)
# width = 5
# height = 6
print(f'长方形的面积为{r_area}')

# 输出
长方形的面积为30

3.2使用关键字参数调用函数

        在调用函数时可以采用“关键字”=“实参”的形式,其中,关键字的名称就是定义函数时形参的名称。

        在传递参数的时候 , 使用参数名对参数进行传递。在使用关键字传递的时候 , 不需要按照定义的形参位置进行传递,当关键字传递与非关键字一同出现的时候,非关键字必须先传递

示例:

def rect_area(width,height):
    area = width * height
    return area

r_area = rect_area(width=5,height=6)
print(f'长方形的面积为{r_area}')

r_area = rect_area(height=6,width=5)
print(f'长方形的面积为{r_area}')

3.3默认参数

        在函数定义的时候 , 就已经将参数值定义好了 , 在后期进行调用的时候,就可以不传递实参;如果在调用函数的时候也进行了实参的传递的话 , 那么原有的参数值会被覆盖掉。

示例:
 

def make_coffee(name='卡布奇诺'):
    return f"制作一杯{name}咖啡"

coffee1 = make_coffee()
coffee2 = make_coffee('拿铁')
print(coffee1)
print(coffee2)

# 输出
制作一杯卡布奇诺咖啡
制作一杯拿铁咖啡

注意:定义函数的默认参数时 ,一定要注意:默认参数一定要在必须参数后面,否则会报错

3.4可变参数

可变参数:一个形参可以接受多个参数值(参数的个数可变)

3.4.1基于元组的可变参数(*可变参数)

        在形参名前面加一个*,该参数就是可变参数,它可以接受多个参数值,也可以没有。该参数接收到多月的参数值之后 , 会将值保存到元组中。

示例:

def sum(*numbers):
    s = 0 
    for i in numbers:
        s += i
    return s

print(sum())
print(sum(1,2,3))

# 输出
0
6

3.4.2基于字典的可变参数(**可变参数)

        在形参名前面加上** , 该参数就是可变参数,它可以接受多个参数值,也可以没有。双星号接受多余的参数必须是关键字方式传递的参数值。

        该参数将多余的参数值以字典的方式保存 , 其中参数名作为字典的键(key) , 参数值作为字典的值(value)

示例:

def grade(C,M,E , **kwargs):
    print(f'''
    Chinese:{C}
    Math :{M}
    English:{E}
    ''')
    print(kwargs)
grade(98 , 99 , 100 , Java = 100 , Python = 150)

# 输出
    Chinese:98
    Math :99
    English:100
    
{'Java': 100, 'Python': 150}

4、函数中变量的作用域

作用域:就是个变量使用的范围

作用域分为:全局作用域、局部作用域

全局:就是整篇代码都可以访问到(例如:公共WC)公共的WIFi

局部:只有再该代码块的范围内使用(例如:自己家里的WC)自己的流量

num = 100  # 全局变量,作用域是整个模块
def func():
    num = 10   # 局部变量,作用域是整个函数
    print(num)

func()
print(num)

# 输出
10
100

注意:一般情况下尽量不在模块和函数中定义两个相同的变量名,但它们两个是不同的变量 ,因为会发生命名冲突,函数中的同名变量会屏蔽模块中的同名变量。

4.1 global关键字

是可以在局部内修改全局变量 , 也可以在局部定义全局变量

示例:

num = 100

def func():
    global num
    num += 1
    print(num)

 func()
 print(num)

#输出
101
101

4.2 nonlocal 关键字

将局部变量再度局部化(深度私有化)

def func1():
    a = 1
    def f():
        nonlocal a
        a += 5
        return a
    return f()
print(func1())
# 输出
6

5、函数类型

Python中的任意一个函数都有数据类型,这种数据类型是function,被称为函数类型。

5.1理解函数类型

        函数类型的数据与其他类型的数据是一样的,任意类型的数据都可以作为函数返回值使用,还可以作为函数参数使用。因此,一个函数可以作为另一个函数返回值使用,也可以作为另一个函数参数使用。

示例:

def add(a,b):
    return a+b

def sub(a,b):
    return a-b

def calc(c):
    if c == '+':
        return add
    else:
        return sub
f1 = calc('-')
f2 = calc('+')
print(f1(3,2))
print(f2(3,2))

# 输出
1
5

注意:以上3个函数都是函数类型,但在细节方面还是有区别的,这个区别主要是函数参数列表,有两个参数的函数和有一个参数的函数是不同的函数类型。

5.2过滤函数filter()

 在Python中定义了一些用于数据处理的函数,如filter() 和 map()等。

filter()函数用于对容器中的元素进行过滤处理

语法:filter(function,iterable)

        参数function是一个提供过滤条件的函数,返回布尔值

        参数iterable是容器类型的数据

在调用filter()函数时,iterable会被进行遍历,它的元素会逐一传入function()函数中。function()函数若返回True,则元素被保留,若返回False,则元素被过滤。最后遍历完成,以保留的元素被放到一个新的容器数据中。

示例:

def f1(x):
    return x > 5
data1 = [1,2,3,4,5,6,7,8,9]
filtered =filter(f1,data1)
data2 = list(filtered)
print(data2)

# 输出
[6, 7, 8, 9]

5.3映射函数map()

map()函数用于对容器中的元素进行映射(或变换)。

语法:map(function,iterable)

        参数function是一个提供变换规则的函数,返回变换之后的元素。

        参数iterable是容器类型的数据

示例:

def f1(x):
    return x *2
data1 = [1,2,3,4]
mapped = map(f1,data1)
data2 = list(mapped)
print(data2)
#输出
[2,4,6,8]

6、匿名函数

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

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

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

语法: lambda 参数列表:lambda体

示例:
 

x = lambda a : a + 10
print(x(5))

# 输出
15

注意:lambda体部分不能时一个代码块,不能包含多条语句,只有一条语句,语句会计算一个结果并返回给lambda() 函数,但与有名函数不同的是,不需要使用return语句返回。

7.递归函数

递归函数:定义一个函数 , 在函数内部自己调用自己。

示例:
 

def func(n):
    if n == 1:
        return 1
    return n + func(n-1)

print(func(5))

# 输出
15

注意:写递归函数的时候一定要明确递归出口

上一章:Python程序流程控制

下一章:Python函数中的闭包与装饰器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值