Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)—玩转Python语法(一):面向过程—Python国的一国多治(2)(二十三)

简介: 玩转Python语法(一):面向过程

5.5 函数的参数定义

1️⃣ 函数定义默认值参数,函数在定义的时候,我们可以给形式参数设置默认值,只有当默认值不符的时候才需要传递实参:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 10:22
# 欢迎大家关注AIoT相关博客~
def fun(a, b = 10):     # 给b设置默认值为10
    print('a =', a)
    print('b =', b)
fun(1)     # 只传入一个参数,只给a赋值
fun(1, 10) # 传入两个参数,但是传给b的参数等于b的默认参数
fun(1, 2)  # 传入两个参数,传给b的参数不等于b的默认参数

image.png

我们知道,类似 print() 这类函数是系统为我们准备好的,不妨想一下,pint() 是默认输出后换行的,我们可以修改 end 使 print() 不是默认换行,这是否意味着系统的 print() 函数具体实现中是给 end 默认赋值为 \n 呢?

我们可以在 PyCharm 中打出一个 print(),然后按下键盘中的 Ctrl 键同时鼠标指向 print(),点击 print() 就可以查看 print() 实现代码:

21.png

从这里我们确确实实可以看出,系统实现 print() 函数的时候,设置默认参数 end='\n',故当我们不传入 end 的时候,默认输出换行,我们当然也可以自行设置 end 的值,达到我们想要的输出结构

2️⃣ 个数可变的位置参数,我们在写函数的时候,我们可能有时候不能确定我们到底有几个位置参数,这个时候,我们就可以采取*参数名的方式,最终返回的是一个元组:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 10:22
# 欢迎大家关注AIoT相关博客~
def printf(*a):
    print(a)
printf(10)
printf(10, 20)
printf(10, 20, 30, 40)

image.png

3️⃣ 个数可变的关键字形参,和位置参数一样,我们同样可以按照类似的方式去定义个数可变的关键字形参,语法格式为**参数名,最终的返回值是一个字典

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 10:22
# 欢迎大家关注AIoT相关博客~
def printf(**a):
    print(a)
printf(a = 10)
printf(a = 10, b = 20)
printf(a = 10, b = 20, c = 30, d = 40)

image.png

4️⃣ 同时有个数可变的关键字形参和个数可变的位置形参,要求个数可变的位置形参放在个数可变的关键字形参之前,否则报错

def act(*a, **b):
    pass

5.6 变量的作用域

🚩变量的作用域其实就是指程序代码能访问该变量的区域,我们根据变量的有效范围可以把变量划分为:

1️⃣ 局部变量:在函数内定义使用的变量,只在函数内有效,局部变量可以使用 global 声明,声明后的变量就会变成全局变量

2️⃣ 全局变量:函数体外定义的变量,可用于函数内外

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 16:53
# 欢迎大家关注AIoT相关博客~
def add(a,b):
    c = a + b
    # c 就称为局部变量,因为c在是函数体内进行定义的变量
    # a, b为函数的形参,作用范围也是函数内部,相当于局部变量
    print(c)
#print(c)  报错,因为 a, c超出了起作用的范围(超出了作用域)
#print(a)
name='辰chen'   #name的作用范围为函数内部和外部都可以使用 -->称为全局变量
print(name)
def func1():
    print(name)
#调用函数
func1()
def func2():
    global  age   #函数内部定义的变量称为局部变量
    # 局部变量使用global声明,这个变量实际上就变成了全局变量
    age=19
    print(age)
func2()
print(age)

5.7 递归函数

🚩递归函数其实就是指在函数内部自己调用自己的这么一类函数,当然,自己调用自己也是有一个度的,否则就会:爱的魔力转圈圈,出不来可不行,所以,递归函数最重要的一部分就是递归终止的条件,比如我们要计算 n 的阶乘,我们知道 n 的阶乘等于 n * n-1 的阶乘,上述思想其实就是递归的思想,退出递归的条件则是当 n = 1 的时候,返回 1

image.png

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/19 17:18
# 欢迎大家关注AIoT相关博客~
def fac(n):
    if n == 1:        # 当n=1,退出递归
        return 1
    else:
        return n * fac(n - 1)  # n的阶乘等于n * n-1的阶乘
print(fac(6))

递归的调用过程 :

每递归调用一次函数,都会在栈内存分配一个栈帧,每执行完一次函数,都会释放相应的空间(这一点不需要理解,学完数据结构后,会自然理解这句话的含义)

递归的优缺点:

缺点:占用内存多,效率低下,

优点:思路和代码简单


5.8 lambda 表达式

🚩lambda 表达式用来声明匿名函数,即一些我们没有命名的,临时需要调用的小函数,lambda 表达式常用在我们临时需要一个类似函数的功能但又不想定义函数的场合,当然,我们也可以使用 lambda 表达式定义具名函数。

lambda 表达式只可以包含一个表达式,不允许包含复杂语句和结构,但是我们可以在表达式中调用其他的函数,lambda 表达式的计算结果相当于函数的返回值.

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/17 18:56
# 欢迎大家关注AIoT相关博客~
# 我们可以给我们的 lambda 表达式起一个名字
add = lambda x, y, z: x + y + z
print(add(1, 2, 3))
# lambda 表达式支持默认参数
add = lambda x, y = 2, z = 3: x + y + z
print(add(1))
# lambda 表达式可作为函数参数
l = [item for item in range(5)]
print(l)
print(list(map(lambda x: x + 5, l)))

image.png

*5.9 生成器函数

注:本小节带 *,不需要进行学习,可以简单进行了解

⛲️ 包涵 yield 语句的函数可用来创建生成器对象,我们称这样的函数为生成器函数,yield 语句与 return 语句作用类似,都用来返回函数的值。与 return 语句不同的是,return 语句一旦执行就会立刻结束函数的运行,而每次执行到 yield 语句并返回一个数之后会暂停或挂起后面代码的执行,下次通过生成器对象的 __next__() 方法、内置函数 next()、for 循环遍历生成器对象元素或其他方式显示“索要”数据时恢复执行。生成器具有惰性求值的特点,适合大数据处理。


例:编写并使用能够生成斐波那契数列的生成器函数

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2021/12/17 15:27
# 欢迎大家关注AIoT相关博客~
def f():
    a, b = 1, 1
    while True:
        yield a
        a, b = b, a + b
a = f()      # 创建生成器对象
for i in range(10):     # 斐波那契数列中前10个元素
    print(a.__next__(), end = ' ')
print()
for i in f():      # 斐波那契数列中第一个大于100的元素
    if i > 100:
        print(i, end = ' ')
        break



20.png20.png20.png21.png

目录
相关文章
|
2月前
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
77 4
|
29天前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
37 7
|
27天前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
56 5
|
1月前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
32 1
|
1月前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
1月前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
24 2
|
2月前
|
存储 程序员 开发者
Python编程入门:从零开始掌握基础语法
【10月更文挑战第21天】本文将带你走进Python的世界,通过浅显易懂的语言和实例,让你快速了解并掌握Python的基础语法。无论你是编程新手还是想学习一门新的编程语言,这篇文章都将是你的不二之选。我们将一起探索变量、数据类型、运算符、控制结构、函数等基本概念,并通过实际代码示例加深理解。准备好了吗?让我们开始吧!
|
18天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
17天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
5天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
98 80