Python学习之路05 函数深度解析与高级特性探讨-上

前言
在编程的学习过程中,函数是一个重要的里程碑。它不仅可以帮助我们组织和简化代码,还可以提高代码的可读性和重用性。在本章的学习中,我们将深入探讨Python中函数的使用,从基本的函数定义和调用开始,逐步了解参数的使用、返回值的设定以及变量的作用域。此外,我们还将探讨高级主题,如lambda表达式和nonlocal语句的使用。
.
通过理解和掌握这些概念,您将能够更有效地编写Python代码,并将您的编程技能提升到一个新的水平。我们将通过简明扼要的解释和实用的例子来展示每一个主题的实际应用,为您提供一个实实在在的学习经验。

个人主页:尘觉主页

个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力

在csdn获奖荣誉: csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣  端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 亚马逊DyamoDB结营

欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦

文章目录

  • Python 学习之路05:函数深度解析与高级特性探讨
    • 1、简介
    • 2、参数
      • 2.1 参数的作用
      • 2.2 形参和实参
    • 3、返回值
    • 4、嵌套调用
    • 5、变量的作用域
      • 5.1 局部变量
      • 5.2 全局变量
      • 5.3 global 关键字
    • 6、参数进阶
      • 6.1 形参和实参的值传递
      • 6.2 缺省参数
    • 7、lambda表达式
    • 8、nonlocal语句
    • 总结

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 形参和实参

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

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

Python学习之路05 函数深度解析与高级特性探讨-上_第1张图片

3、返回值

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

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

1、 return 关键字

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

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

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

image-20230903165236601

注意: return 表示返回, 后续的代码都不会被执行

4、嵌套调用

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

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

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


# 创建一个函数 remove
def remove():
    print("我的名字叫 hello")


# 调用函数
add()

image-20230903165305249

5、变量的作用域

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

5.1 局部变量

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

image-20230903165352879

局部变量的生命周期

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

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

5.2 全局变量

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

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

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

image-20230903165407505

5.3 global 关键字

如果在函数中需要修改全局变量,需要使⽤ global 进⾏声明

i = 100
 
 
# 创建一个函数add
def add():
    print(remove() + i)
# 创建一个函数 remove
def remove():
    # 函数内部使用 global 关键字声明全局变量 i
    global i
    i = 200
    return i
 
 
# 调用函数
add()

image-20230903165431998

6、参数进阶

6.1 形参和实参的值传递

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

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

image-20230903165505545

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

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

image-20230903165519181

6.2 缺省参数

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

image-20230903165533582

缺省参数的定义位置:

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

以下是错误示范

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

Python学习之路05 函数深度解析与高级特性探讨-上_第2张图片

Python学习之路05 函数深度解析与高级特性探讨-上_第3张图片

7、lambda表达式

它是大牛口中的匿名函数,它是一行流代码的核心。当你对 python的内置函数、语法规则以及哲学理念有了深层次的理解后,你才能实现用一行流来实现之前好几行代码才能实现的功能。

image-20230903230958583

lambda的语法如上图所示, lambda是个 关键字 ,然后是冒号 冒号的左边是传入的参数 右边是函数实现表达式以及返回值 ,我们可以将其理解为一个机制精简后的函数。它对应的传统的语法形式如下图所示:

image-20230903231038677

直接上例子:编写一个函数,传入一个参数,让它求出它的平方值:

def squareX(x):
    return x * x


print(squareX(3))

sqareY = lambda y: y * y

print(sqareY(3))

image-20230904090858324

​ 传统定义的函数,函数名是一个函数的引用,而lambda表达式这整个表达式就是一个函数的引用 ,上面的例子中我们将表达式赋值给 squareY,即 squareX和 squareY都是函数的引用

image-20230904090959506

​ 它们的重大区别就是 lambda是一个表达式,它可以用在常规函数不能使用的地方,比如说它可以使用在列表里面:

Y = [lambda y: y * y,2]

print(Y[0](Y[1]))

image-20230904091146300

mapper = map(lambda x: ord(x) + 10, "hello")
print(list(mapper))

image-20230904091352942

上面这段代码用到了map()函数,忘记的去前面查看 (忘了的去看一下,要不然很容易看不懂) ),这段代码的意思是将 hello的每个字符转换为它的 unicode编码,然后再把这个编码加 10给返回,写成普通的函数如下:


def boring(x):
    return ord(x) + 10


mapper = map(boring, "hello")
print(list(mapper))

filter()函数也是可以如法炮制的:

 print(list(filter(lambda x: x % 2, range(10))))

image-20230904091746842

​ 求出奇数,看不懂得函数回去查查哦。
​ 总结:lambda是一个表达式而不是一个语句,所以它可以出现在 Python语法不允许 def语句出现得地方,这是它最大得优势,但 lambda只能实现较为简单得函数需求, python就是希望lambda去做那些较为简单得事情,就不用花心思去想这个函数叫什么,所以它也叫匿名函数 。麻烦的功能需求交给 def就好了。

8、nonlocal语句

通过这个语句就可以实现内部函数修改外部函数的变量了

 def funA():
    x = 520
    def funB():
        nonlocal x
        x = 880
        print("In funB, x =", x)
    funB()
    print("In funA, x =", x)

funA();

image-20230903215841753

总结

经过本章的学习,我们已经对Python中的函数有了深刻的理解。我们学习了如何定义和调用函数,如何利用参数来增加函数的通用性,以及如何通过返回值来传递结果。

除了基本的功能之外,还探讨了更高级的主题,包括嵌套调用、变量的作用域、lambda表达式和nonlocal语句。通过理解这些高级特性,我们可以编写更灵活和强大的Python代码。

希望您在学习这一章时找到了它的价值,并且可以利用新学到的知识来提高您的编程技能。记得多加练习和应用所学的知识,因为“学以致用”是最好的学习方法。

感谢您的勤奋和努力学习!祝您编程愉快!

热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力

你可能感兴趣的:(python,python,学习,开发语言,mybatis,sql,数据库,教程)