Python 05 之函数【参数,返回值,嵌套调用,作用域,匿名函数】

简介: 函数的作⽤,在开发程序时,使⽤函数可以提⾼编写的效率以及代码的重⽤。

1、简介

函数的作⽤,在开发程序时,使⽤函数可以提⾼编写的效率以及代码的重⽤。

函数的使⽤包含两个步骤:

  1. 定义函数 —— 封装独⽴的功能 ;
  2. 调⽤函数 —— 执行函数的代码 。

1、函数基本使用

定义函数的格式如下:

def 函数名(): 
 
    函数封装的代码 
 
    …… 
    
def add():
    print(1+1)
  1. def 是英⽂ define 的缩写 ;
  2. 函数名称应该能够表达函数封装代码的功能,⽅便后续的调⽤ ;
  3. 函数名称的命名应该符合标识符的命名规则 ;

调用很简单,通过 函数名() 即可完成函数的调用。

# 创建一个函数
def add():
    print(1 + 1)
 
 
# 调用函数
add()

注:

  1. 因为函数体相对⽐较独⽴,函数定义的上⽅,应该和其他代码(包括注释)保留两个空⾏ 。
  2. 定义好函数之后,函数内的代码并不会执行,只表示这个函数封装了⼀段代 码⽽已 。
  3. 调用函数后,函数的代码才会执行。如果不主动调⽤函数,函数是不会主动 执⾏的。

2、参数

参数就是在声明函数时,在函数名后面的小括号内部填写参数,多个参数之间使用 , 分隔 。

# 创建一个函数
def add(i,j):
    print(i + j)
 
 
# 调用函数
add(1,2)

2.1 参数的作用

  • 函数: 把具有独⽴功能的代码块组织为⼀个⼩模块,在需要的时候调⽤;
  • 函数的参数: 增加函数的通⽤性,针对相同的数据处理逻辑,能够适应更多 的数据;

    • 在函数内部,把参数当做变量使⽤,进⾏需要的数据处理 。
    • 函数调⽤时,按照函数定义的参数顺序,把希望在函数内部处理的数据, 通过参数传递。

2.2 形参和实参

形参:定义函数时,⼩括号中的参数,是⽤来接收参数⽤的,在函数内部作为变量使⽤;

实参:调⽤函数时,⼩括号中的参数,是⽤来把数据传递到 函数内部⽤的 。

image-20220908091355329

3、返回值

在程序开发中,有时候会希望⼀个函数执⾏结束后,告诉调⽤者⼀个结果, 以便调⽤者针对具体的结果做后续的处理。

返回值是函数完成⼯作后,最后给调⽤者的⼀个结果。

1、 return 关键字

在函数中使⽤ return 关键字可以返回结果。

调⽤函数⼀⽅,可以使⽤变量来接收函数的返回结果 。

# 创建一个函数
def add(i,j):
    return i+j
 
 
# 调用函数
a = add(1,2)
print(a)
注意: return 表示返回, 后续的代码都不会被执行

4、嵌套调用

⼀个函数⾥⾯又调⽤ 了另外⼀个函数,这就是函数嵌套调⽤。

如果函数 add 中,调⽤了另外⼀个函数 remove,那么执⾏到调⽤add 函数时,会先把函数 add 中的任务都执⾏完才会回到 remove 中调⽤函数 add 的位置, 继续执行后续代码 。

# 创建一个函数add
def add():
    remove()
    print("我是的名字叫 add")
 
 
# 创建一个函数 remove
def remove():
    print("我的名字叫 remove")
 
 
# 调用函数
add()

5、变量的作用域

变量分为局部变量和全局变量

5.1 局部变量

  • 局部变量是在函数内部 定义的变量,只能在函数内部使⽤;
  • 函数执⾏结束后,函数内部的局部变量,会被系统回收;
  • 不同的函数,可以定义相同的名字的局部变量,彼此之间不会产⽣影响 ;
# 创建一个函数add
def add():
    i = 10
    print(remove() + i)
 
 
# 创建一个函数 remove
def remove():
    i = 20
    return i;
 
 
# 调用函数
add()

局部变量的生命周期

所谓⽣命周期就是变量从被创建到被系统回收的过程 ;

  1. 局部变量在函数执⾏时才会被创建 ;
  2. 函数执⾏结束后局部变量被系统回收 ;
  3. 局部变量在⽣命周期内,可以⽤来存储 函数内部临时使⽤到的数据 。

5.2 全局变量

全局变量是在函数外部定义的变量,所有函数内部都可以使⽤这个变量 。

为了保证所有的函数都能够正确使⽤到全局变量,应该将全局变量定义放在其他函数上方。

i = 100
 
 
# 创建一个函数add
def add():
    print(remove() + i)
# 创建一个函数 remove
def remove():
    return i;
 
 
# 调用函数
add()

5.3 global 关键字

如果在函数中需要修改全局变量,需要使⽤ global 进⾏声明
i = 100
 
 
# 创建一个函数add
def add():
    print(remove() + i)
# 创建一个函数 remove
def remove():
    # 函数内部使用 global 关键字声明全局变量 i
    global i
    i = 200
    return i;
 
 
# 调用函数
add()

6、参数进阶

6.1 形参和实参的值传递

1、如果函数的参数为数字,字符串,在函数内部,针对形参使⽤赋值语句,不会影响调⽤函数时传递的实参的值。

# 创建一个函数add
def add(i):
    i += 1
    print("i = %d" % i)
 
 
# 调用函数
a = 100
add(a)
print("a = %d" % a)

2、如果函数参数为列表,集合,字典等类型。函数内部修改了参数的内容,会影响到外部的数据 。

# 创建一个函数add
def add(i):
    i[0] = '小黄'
 
 
a = ["小明", 18, '男']
add(a)
print(a)

6.2 缺省参数

  1. 定义函数时,可以给 某个参数指定⼀个默认值,具有默认值的参数就叫做缺省参数 。
  2. 调⽤函数时,如果没有传⼊缺省参数的值,则在函数内部使⽤定义函数时指定的参数默认值 。
  3. 函数的缺省参数,将常⻅的值设置为参数的缺省值,从⽽简化函数的调⽤ 。
# 创建一个函数add
def add(i, j=100):
    print(i + j)
 
 
add(1)

缺省参数的定义位置:

必须保证带有默认值的缺省参数在参数列表末尾 。

以下是错误示范

# 创建一个函数add
def add(j=100,i):
    print(i + j)

7、匿名函数

⽤lambda 关键词能创建⼩型匿名函数。这种函数得名于省略了⽤def 声明函数的标准步骤。

示例:

sum = lambda a, b: a + b
print(sum(1,2))
sum = (lambda a, b: a if a>b else b)(1,2)
print(sum)
Lambda 函数只能返回⼀个表达式的值 ;

匿名函数不能直接调⽤print,因为 lambda 需要⼀个表达式 。

相关文章
|
8天前
|
Python
Python 构造方法可以返回值吗?
python 构造方法的返回值
WK
|
19天前
|
Python
Python数返回值
在Python中,函数可以通过`return`语句返回一个值或多个值(通过元组)。返回值可以是任何数据类型,如整数、字符串、列表、字典等。如果没有`return`语句或返回`None`,函数将返回`None`。多个值通过返回元组并解包来实现。函数中的多个`return`语句会导致函数在执行到第一个时立即结束。
WK
13 4
|
18天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
20天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
23天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
27 4
|
24天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
18 1
|
6月前
|
存储 Python
Python函数参数传递
Python函数参数传递
61 1
|
C++ Python
Python函数参数传递:传值还是传引用
Python函数参数传递:传值还是传引用
60 0
|
Python
python之函数的参数传递(引用传递和值传递),查看变量的内存地址的方法
python之函数的参数传递(引用传递和值传递),查看变量的内存地址的方法
深入理解 Python 中的函数参数传递机制
在 Python 中,对于函数的参数传递,有两种主要的方式:传值和传引用。事实上,Python 的参数传递是一种“传对象引用”的方式。接下来的文章我们将详细介绍 Python 的函数参数传递机制,这对理解 Python 编程语言的底层实现以及优化你的代码都非常有帮助。