Advertisement

python基础语法整理汇总,python基础语法菜鸟教程

阅读量:

本文旨在为读者提供关于Python基础语法的系统整理和总结,并同时提供Python入门者的学习指南以期为广大学习者提供便利。请注意关注并收藏我们的网站以便及时获取最新资讯。

Python基础语法体系

一:基本数据类型及操作
(一)基本数据类型
1.整数类型
  • 整数类型一共有4种不同的进位表示方式:十进位、二元位、八元位以及十六元位
    一般情况下,默认情况下,默认情况下,默认情况下,默认情况下整数以十元位形式呈现;若需采用其他元位形式,则需在数字前添加相应的引导符号(大写或小写字母皆可)。
整数类型
  • 整数类型在理论上允许取值范围为负无穷到正无穷...c++和Python哪个更好。实际上受到限制的是运行Python程序时所占用的内存空间大小。通常情况下认为,在非极端数值运算的情况下整数类型没有取值范围限制。
2.浮点数类型
  • Python语言强制所有浮点数值包含小数值部分,并且这些数值可能包含零值。这种做法的目的在于通过明确的标识将浮点型与整型区分开来。
  • 浮点数值二种主要的表达方式包括十进制记号以及科学技术记号。
  • 科学计术采用字母e或E作为指数符号,并以10为基数展开。具体而言:
    • 当指数为正时,默认省略前导零
    • 当指数为负时,默认省略末尾零
    • 如果没有指定指数则默认取值为1
科学计数法表示

例如:2.5e-3的值为0.0025; 8.5E5的值是850000.0

  • 浮点运算和小数值运算由计算机的不同硬件单元执行,在实际应用中采用不同的计算方式。
    需要注意的是:虽然float类型的零值(float 0.0)与int类型的零值(int 0)在数值上相等;但在计算机内部的表示方式存在差异。
  • Python中的float数据类型的数值范围和小数精度会受到运行环境的影响:例如sys.float_info详细列出了Python解释器所运行系统的浮点运算相关的各项参数信息。
浮点数数值范围和小数精度

上述输出详细描述了浮点数值类型及其相关属性包括:

  • 浮点数值所能表示的最大与最小范围
  • 科学计数法下的指数范围
  • 数制基数为2时的最大与最小指数
  • 系统提供的精度限制
  • 计算机能够区分并处理的小数值差
    以及能够准确表示为浮点数值的最大数量(dig)
    其中:
  • 系统支持直接表示或科学记数法中的系数a最多显示16位数字
  • 浮点运算结果中系数a最多可精确到17位数字
    但根据sys.float_info的结果可知:
    计算机实际只能够提供前15位的有效数字,
    第16位及之后的数据由二进制计算结果确定,
    因此存在精度误差例如:
浮点数精确度验证

该数值范围从[2^{-1} \text{至} 2^{+} \text{覆盖了}} [ -\text{ } ( \text{ } ) ]之间的一个广泛区间。其精确度达到了 ( \text{ } ) 的数量级,在这种情况下浮点数计算的误差仅限于 ( \text{ } ) 个单位级别内。对于除高精度科学计算之外的大规模运算而言,在这些情况下该数据类型的性能表现得非常稳定且可靠;通常认为在这种情况下数据类型能够满足所需的所有操作需求而无需设定任何限制条件。

3.复数类型
  • 复数可被视为有序二元实数组(a,b),以形式a+bj表示其中a代表实部而b代表虚部。
  • 在Python编程语言中该种方式具有显著的效果。
  • Python语言中复数量的虚部分量通过后缀J或j来标识例如数字3+4j即为一实例。
  • 复数量类中其实部与虚部均属于浮点数据类型。
  • 对于任意给定的复数量z我们可用属性z.real与z.imag分别获取其实值与虚值如取值范围则取决于具体实现。
复数取实部和虚部
4.字符串类型
  • 字据类型用于存储和处理文本数据;文本数据可通过使用单一引用符号、双重引用符号或多重引用符号来标识;单一引用符号与双重引用符号的功能等同,在同一上下文中可互相替代;当采用单一引用符号时,则允许在引用中嵌入另一层引用符号;采用双重引用符号则可将另一层引用置于内部;多重引用则可表示一段连续的多行文本内容
  • 文本数据是由单独的字符组成的序列;系统支持基于单一字符或连续字符块进行索引操作;该系统包含正向递增索引起及反向递减索引起两种主要的数据访问方式;
字符串两种序列

Python字符串支持区间访问方式,并遵循[N:M:T]格式进行操作。其中N至M(不含M)对应子字符串内容,在此过程中既可以采用正向递增序列也可以采用反向递减序列的方式进行操作,并且T值代表步长参数的具体数值。例如:

复制代码
 string = "我将无我,不负人民" #共有9个字符

    
 print(string[0:4])            #打印前四个字符
    
 print(string[2:4])            #打印第三四个字符
    
 print(string[0:-1])           #打印除去最后一个字符的字符串
    
 print(string[:-1])            #打印除去最后一个字符的字符串
    
 print(string[-1])             #打印最后一个字符
    
 print(string[:])              #打印全部字符
    
 print(string[::2])            #切片打印,步长为2

输出

若我是无我的,
仍是无我的,
负重于民,
负重于人民,
我不再有我,
我不再自持,
负载起责任。

字符串采用Unicode编码方式存储,在此编码体系下,不论是英文字母还是中文符号均被视为单个字符。反斜杠符号(\)是一种特殊的编码符,在编程语言中用于触发特定的操作;它指示随后紧跟的元素将被赋予特定的含义。

转义字符 说明
\ ’ 表示单引号
\ " 表示双引号
格式化控制字符 说明
\a 蜂鸣,响铃
\b 回退,向后退一格
\f 换页
\n 换行,光标移到下行行首
\r 回车,光标移到本行行首
\t 水平制表
\v 垂直指标
\0 NULL,什么都不做
格式化控制字符
(二)数据类型的操作
1.内置的数值运算操作符
  • Python提供了9个基本的数值运算操作符,不需要引用第三方库。
操作符 描述
x + y x与y之和
x - y x与y之差
x * y x与y之积
x / y x与y之商
x // y x与y之整数商,即不大于x与y之商的最大整数
x % y xy与y之商的余数,也称为模运算
- x x的负值
+ x x本身
x ** y x的y次幂,即xy
  • 操作符运算可能会影响数字类型,请遵循以下基本规则:
  • (1) 当两个整型数值进行运算时:
    • 如果计算结果为小数值,则返回浮点型数值
    • 如果计算结果仍为整数值,则返回整型数值
    • 如果参与运算是一个浮点型和一个整型数值,则计算结果为浮点型
    • 如果参与运算是一个复杂数或一个实型数值,则计算结果将变为复型
  • (2) 对于所有二元算术运算符(如加减乘除等),都存在相应的增强赋值算子(如 +=, -= 等)。其中op代表任意一种上述二元算术运算符号。
  • 这些增强赋值算子的工作原理类似于基本的二元操作符:
    • x op = y等价于x = x op y
  • 这种简化的方式可以使代码更加简洁易读。
2.内置的数值运算函数
内置数值运算函数

abs()可以计算复数的绝对值,例如: abs(-3+4j)的值为5.0

3.内置的数字类型转换函数
  • 这些数值运算操作符能够隐式地将计算结果的数据类型进行转换。
    例如,在使用运算符"//"进行整数除法时可能会得到浮点型的结果。
    此外,在程序中可以通过内置的数据类型转换函数来进行显式的数据类型间的转换;
函数 描述
int(x) 将x转换为整数,x可以是浮点数或字符串
float(x) 将x转换为浮点数,x可以是整数或字符串
complex(re[,im]) 生成一个复数,实部为re,虚部为im,re可以是整数、浮点数或字符串,im可以是整数或浮点数但不能是字符串
  • double型在进行转码操作时会丢失小数值。(不采用四舍五入)
    无法直接将复数值转成其他数据类型的数值。
    可以通过分别提取其实部和虚部来进行转码。
    例如:
复制代码
    float((3+4j).imag)

4.0

4.基本字符串操作符
操作符 描述
x+y 连接两个字符串x和y
x n 或 n x 复制n次字符串x
x in s 如果是x s的子串,返回Ture,否则返回False
str[ i ] 索引,返回第i个字符
str[ N:M ] 切片,返回索引第N到第M的子串,其中不包括M
5.关系操作符
关系操作符
6.内置的字符串处理函数
字符串处理函数
7.常用字符串处理函数

用于获取用户的输入。由控制台捕获用户的任意内容,并以字符串形式返回结果。例如,在获取用户的输入之前,在命令行界面前添加一些提示信息。

<变量> = input(<提示性文字>)

举例

input函数演示

评估函数
当调用eval(<Python表达式>)时,在特定上下文中可以理解为一个能够解析并执行指定的字符串内容的功能模块。简而言之,在这种情况下(eval(<Python表达式>))将接收一个特定的字符串参数,并将其转换为对应的Python语句进行执行。

该函数能将用户的输入部分从字符串形式转换为Python中支持的数值类型。

eval\(\)函数演示

使用eval()函数对字符进行操作时需谨慎运用。例如,在编程环境中如果直接输入字符'hello'则会导致eval()函数去除双引号从而解析为未声明过的变量进而引发错误提示而当遇到带有多层引号的情况比如输入字符"‘hello’"此时经过外层双引号去除后内部残留的一对内层引号使得解析结果被识别为单个单引号包裹的字符串从而避免了变量引用的问题

8.字符串类型的格式化
复制代码
    字符串通过format()方法进行格式化处理
  • format()方法的基本使用
    < 模板字符串>. format (<逗号分隔的参数>)

    • 模板字符串由一系列槽组成,用来控制修改字符串中嵌入值出现的位置,其基本思想是将format)方法中逗号分隔的参数按照序号关系替换到模板字符串的槽中。槽用大括号({}) 表示,如果大括号中没有序号,则按照出现顺序替换,例如
复制代码
    "{ }:计算机{ }的CPU占用率为{ }%。".format("2020.01.30","Python",10)
槽的顺序

format()方法的基本使用
< 模板字符串>. format (<逗号分隔的参数>)

复制代码
* 如果大括号中指定了使用参数的序号,按照序号对应参数替换,参数从0开始编号。调用format()方法后会返回一个新的字符串。例如:  
槽的顺序

format() 方法具备格式控制功能。
在 format() 方法中模板字符串的槽不仅包含参数序列还包含格式控制信息。此时槽内部样式如下: { <参数序号>:<格式控制标记>}

槽中格式控制标记

格式控制标记字段
二:程序的控制结构
1.程序流程图
  • 这类图形被用来作为程序流程图的表现形式。 通过流程线连接并辅以文字说明展示程序的操作步骤及控制逻辑,在进行程序分析与过程描述时具有不可替代的作用。 这类图形的基本元素共有七种:
流程图基本元素

其中,起止块表示一个程序的开始和结束; 判断块判断一个条件是否成立,并根据判断结果选择不同的执行路径; 处理块表示一组处理过程; 输入输出框表示数据输入或结果输出; 注释块增加程序的解释; 流向连线以带箭头直线或曲线形式指示程序的执行路径; 连接节点将多个流程图连接到一起, 常用于将一个较大流程图分隔为若干部分。下图所示为一个流程图示例, 为了便于描述, 使用连接节点A将流程图划分为两部分。

流程图
2.程序基本结构

程序三种基本结构:顺序结构,分支结构和循环结构。

顺序结构:是程序按照线性顺序依次执行的一种运行方式;-分 支结构

该系统表示其根据条件判断的结果采取不同前向执行路径的运行模式。该类分支结构主要包括单分型、二分型和多分型三种类型。

复制代码
* 单分支结构:if 语句  

语法格式如下:

if <条件>:
<语句>

if语句

当if条件被满足时执行的一组或多条指令构成的代码块。
该代码块中的指令与其所在的if行之间通过缩进字符建立关联。
该if结构先计算出其条件表达式的逻辑结果。
当逻辑结果为True时会依次执行该代码块内的所有指令。
随后将控制流程传递到当前代码行下的第一条非缩进指令。
若逻辑结果为False,则该代码块的所有指令将不会被执行。

复制代码
* 二分支结构:if—else

if <条件>:
<语句块1>
else:
<语句块2>

二分之条件语句

依据if条件满足的情况分别定义两个语句块:语句块1是在if条件满足后被执行的一组语句序列;而语句块2则是在if条件不满足时被依次执行的一组语句序列。

二分支结构主要通过判断逻辑来实现程序的不同路径选择;其语法形式较为简洁明了:基于<条件>判断结果分别对应不同的操作处理。

表达式间的关系可采用以下形式书写:

表达式1当条件为真时被执行的结果与表达式2当条件为假时被执行的结果之间的一种关系。

复制代码
* 多分支结构:if—elif—else

if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
···
else:
<语句块N>

在这里插入图片描述

多分支结构可视为二分支结构的一种延伸,在程序设计中常用于实现同一判断条件下多个可能路径的处理逻辑。

在Python编程语言中,默认情况下该结构会依次评估每一个符合条件的情况,并一旦发现结果为True就立即执行对应的代码块。

执行完当前if-elif-else中的某个子项后会直接跳过后续的所有if-elif-else相关代码。

如果所有前设条件均未满足,则位于else后面的代码将被执行。

与之对应的是else子clu是可有可无的设计选项。

循环结构:是根据条件判断结果向后反复执行的一种运行方式。

  • for 循环(即 finite 循环):是一种程序控制结构。
    也被称作 while 循环的一种特性,则是因为 for 循环的执行次数由其初始设置决定。
    遍历过程可以从 iterators 或者 enumerators 中逐步获取每一个元素。
    这种方法能够依次处理每个元素所对应的代码块。

for <循环变量> in <遍历结构>:
<语句块2>

遍历操作可应用于多种数据类型和场景:例如

进行N次迭代
for i in range(N):
<语句块2>

对文件fi进行逐行处理
for line in fi:
<语句块2>

遍历字符序列s中的每个元素
for c in s:
<语句块2>

复制代码
* 无限循环(即条件循环):while语句

该无限循环会持续执行其操作直至其条件不满足时才会终止,并无需预先设定循环次数。
while <条件>:
<语句块>

采用break指令可脱离最内层的for或while循环结构;跳转至该循环结束后紧跟的代码段继续执行;通过continue指令可终止当前这一次循环;它会跳过尚未执行的后续语句但仍然留在当前循环体内。

3.程序的异常处理

异常处理:try—except
举例

异常处理1

当输入数字时,程序正常执行,如果输入的不是数字呢?

异常处理2

在Python异常信息中核心内容是最为关键的部分,它不仅反映了发生异常的根本原因,同时也构成了程序进行正常处理的基础.

Python使用try—except语句实现异常处理,其基本语法格式如下:

try:
<语句块1>
except <异常类型>:
<语句块2>

为上述实例程序增加异常处理

异常处理3

复杂情况下的高级功能是try—except语句可搭配多个except子场景的应用场景。其语法结构如下:

try:
<语句块1>
catch <异常类别1>:
<语句块2>
···
catch <异常类别N>:
<语句块N+1>
catch:
<语句块N+2>

举例

异常处理高级用法

Python能够识别多种类型的异常,并且建议在编程时避免过度依赖try-except机制。此类异常通常仅用于检测罕见发生的状况,如用户的输入合规性、文件是否正确打开等。对于上述实例中的索引字符串超出范围情况,则应尽量使用if语句进行直接判断而非依赖于异常处理来应对可能出现的错误。

对于面向商业应用的软件产品 稳定性和可靠性是核心评价标准 但实际上这类软件产品会尽量避免使用try-except语句 因为使用try-except语句虽然能捕捉异常信息 但会降低代码可读性并增加维护复杂度 因此一般只会将其作为关键模块进行异常处理 对于实际开发中的异常处理 建议结合函数设计进行综合考虑 实践积累则能提升开发效率

三:函数和代码复用
(一)函数的基本使用
1.函数的定义

函数是以明确的功能为目标而设计的一组可操作指令序列,在使用时以函数名称的形式被引用并运行;它也可以被视为一段带有标识符的小程序,在适当的位置被调用来执行操作,并且避免在每次执行时重新编写代码。每当调用该函数时都可以传递若干不同的输入参数以实现对不同数据的运算;当该过程完成之后还可以返回相应的处理结果。

该函数具备执行特定功能的能力,在应用过程中,在无需深入理解其内部工作原理的前提下,在关注其输入输出关系的基础上,在某种程度上实现了特定的功能目标。从严格的数学角度来看,在编程领域中,默认地将一个函数视为一种功能抽象的形式。

部分功能由用户自行开发,并可被称作自定义功能。然而,在Python安装包自身也提供了许多内置功能与操作方法。这些内置功能包括Python内置的几个常用功能如abs()、eval()等。此外,在Python标准库中还有一些关键功能来自其模块系统中特定组件的行为机制或属性特征(例如math模块下的sqrt()等)。

使用函数两大主要目的即减少编程复杂度与提高代码重用性。它能够通过实现将一个复杂的大问题拆解为多个相对简单的子任务,并进一步将其拆解为更加基础的子problem。当子problem简化到一定程度时,则可以通过分而治之的方法分别解决这些subtasks,并最终整合它们以解决原始大problem。这就是一种自顶向下的程序设计方法。同时由于单一function可以在同一程序中被多次调用甚至被不同程序共享,在这种情况下只需对其中任何一个实例进行改动即可达到更新所有依赖它的实例的目的;因此这不仅减少了整个项目的总行数还大大降低了维护工作的负担

python使用def保留字定义一个函数,语法格式如下:

def <函数名>(<参数列表>):
<函数体>
<返回值列表>

函数名可以是任何有效的Python标识符;

在函数调用过程中传递给函数的内容被称为参数列表,在其被调用的过程中数量可能为零个、一个或者多个;若传递多个输入项,则它们以逗号分隔;即便没有提供任何输入项,在函数定义中仍需保留圆括号;其中构成函数定义中的那些变量即被称为形式参数(简称形参)。

函数体是函数每次被调用时执行的代码,由一行或多行语句组成。

当函数需要返回特定值时, 调用 return 关键字并配合 返回一个列表结构, 如果该函数不需要立即 返回任何值, 则无需包含 return 语句, 在程序执行到该函数定义结束的位置后, 自动将执行权限传递回调用端

函数调用和执行的一般形式:

<函数名>(<参数列表>)

函数定义及调用举例:

编写生日歌,最简单可以重复使用print()语句

复制代码
        1. print("Happy birthday to you!")

    
        2. print("Happy birthday to you!")
    
        3. print("Happy birthday, dear Climb!")
    
        4. print("Happy birthday to you!")

在第1、2、4行中存在相同的代码结构

复制代码
        1. def happy():

    
        2. 	print("Happy birthday to you!")
    
        3. def happyN(name):
    
        4. 	happy()
    
        5. 	happy()
    
        6. 	print("Happy birthday, dear {}!".format(name))
    
        7. 	happy()
    
        8. happyN("Linda")
    
        9. print()     #换行作用
    
        10. happyN("Liming")

输出

Happy birthday to you!
Happy birthday to you!
Happy birthday, dear Linda!
Happy birthday to you!

Happy birthday to you!
Happy birthday to you!
Happy birthday, dear Liming!
Happy birthday to you!

函数的操作
应用程序或系统中使用一个函数需要遵循以下四个步骤。
(1) 导致该处暂停运行。

(2)在调用时将实参复制给函数的形参。

(3)执行函数体语句。

(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。

生日歌程序分析

前面七行均为函数定义。只有当被调用时才会启动。因此,在编译阶段前七行代码不会立即运行。程序最先将要运行的是第8行happyN(“Linda”)这一条指令。当Python运行至该处时,由于调用了happyN()这个函数,当前操作暂停下来,等待传入的实际参数来替代形参变量name的位置以完成参数传递工作。一旦参数传递完毕,程序就会继续按照原定顺序依次处理剩下的代码内容

2.函数的返回值

该语句用于终止函数并将其执行结果传递回其调用位置继续后续操作。该语句能够返回零至一个或多个函数运算的结果给其被调用处的变量。

复制代码
        1. def func(m,n):

    
        2. 	return m*n
    
        3. s = func("hello~",2)
    
        4. print(s)

函数可能不带有return关键字,在该情况下也不会返回任何值;比如,在一个生日歌处理程序中调用happy()时

3.全局变量与局部变量

全局变量即为在外部定义的非局部数据元素,在整个程序运行过程中均保持可见性与有效性。
局部变量则特指某个具体操作或逻辑流程中被引用的数据项,在完成当前操作后将被释放或失效。

注意事项:
(1) 简单数据类型变量即使与全局变量同名,在函数体内也仅被定义和使用,并且一旦函数结束后这些变量会自动释放;如果有全局同名的变量存在,则它们的值不会受到影响。

(2)基本数据类型的变量在声明为global保留字后会被指定为全局变量使用;一旦函数退出后, 该变量会被修改。

当处理一个复合数据类型的全局变量时,在没有被真正创建同一名称的全局变量存在的情况下,则可以在函数内部直接使用并修改该全局变量的值。

当函数内部确实生成了一种组合数据类型的局部变
量时,
即使存在与之同名的全球变
量,
该程序段仅负责处理这些局
部变
量。
在执行完毕后,
这些局
部变
量会被销毁,
而全球变
量的值将保持不变。

4.代码复用与模块化设计

主要思路:函数作为程序的核心概念,通过将代码打包实现功能复用。我们可以通过编写函数来实现程序的模块化设计。

该系统由多个功能模块构成;如果这些模块按顺序排列但缺乏组织,则不仅会影响使用效率而且会增加维护难度;因此建议对代码进行重新架构使其更加条理清晰便于理解和维护;当前主流编程语言在代码层面上采用函数式和面向对象两种抽象方式分别对应于面向过程编程与面向对象编程的思想

在程序中采用函数作为基本的抽象方式,在软件开发中具有重要意义。这种设计不仅能够将一系列特定的功能逻辑集中管理,并通过命名的方式供其他模块调用和访问,在提升开发效率的同时也便于维护与调试工作。其主要优势在于实现了代码的复用,在降低开发成本的同时也减少了潜在的人力资源浪费。这一设计带来的额外好处在于当某个模块的功能发生变更时,则会自动影响到所有依赖于该模块的其他部分。

面向过程编程强调通过描述执行流程来实现问题解决。该方法要求程序员明确解决问题所需的具体步骤,并通过函数将这些步骤逐一实现。使用时可以通过调用函数或编写相应的语句来完成。面向过程编程是一种基础而自然的程序设计范式。通过将步骤或子功能封装,函数实现了代码复用和简化了程序设计的过程。

该抽象形式作为一种程序设计中的高级表达方式,在编程逻辑中起到关键作用。
它通过组织程序代码形成更高级别的类结构。
这种结构不仅包含表征对象特征的信息项以及代表对象执行操作的行为项。
在实际应用中,默认情况下每个实例都包含一组特定的对象信息项。
这些信息项通常以静态的方式存在,并通过继承机制实现共享。
在方法调用过程中遵循统一的访问路径原则。
这种设计使得数据的安全性和一致性得到显著提升。
同时,在编程效率方面也展现出明显优势。
与传统的函数式编程方式相比,
这种面向对象的设计方案具有更高的可维护性和扩展性,
特别适用于大型复杂系统开发项目。

在编程理念上存在差异,并体现在抽象层次上。就编程抽象程度而言,在概念模型上有明显区别,并且功能实现方面也有所不同。任何基于面向对象的技术所完成的功能都能通过传统过程式方法实现,并没有哪一种方法在解决问题方面存在绝对的优势地位。然而就应用范围而言,并非所有的专业程序员都选择仅仅依靠传统的过程式方法来完成工作;当需要处理大型项目时,则倾向于采用面向对象的方法;例如,在开发Windows操作系统或者涉及多人协作的项目时,在设计界面交互类软件时也是如此。Python语言提供了支持传统过程式与面向对象并存的编程范式。本书将仅限于介绍并不过多探讨这种高级技术

对于长度超过百行的程序而言,在不进行合理的功能分区的情况下其可读性会显著下降。解决这一挑战的最佳方案是将整个软件系统划分为若干个相对独立的功能块每个功能块负责实现一个小规模的功能目标。不论是基于过程的方法还是基于对象的方法对系统的功能进行合理划分并以模块化的方式组织代码是一种通用的有效策略这种做法通常被称为‘模块化设计’

该模块化设计旨在利用函数或对象的封装功能来划分主程序与子程序,并明确子程序间的关系。该思考方法以函数与对象为基础,在功能块上进行规划与组织。通常包含以下两个主要要求:(1)主程序与其他子程序之间的接口及相互关系需明确定义;(2)各个子程序的功能应独立且完整。

(1)紧耦合:尽可能合理划分功能块,功能块内部耦合紧密。

(2)松耦合:模块间关系尽可能简单,功能块之间耦合度低。

为了衡量程序结构中各模块之间相互关联程度而引入的概念称为"耦合性"。

该指标取决于各模块间接口复杂性的高低以及调用方式的繁简程度。

在软件开发中发挥着重要作用的是"耦合性"这一概念。

当各个模块或系统之间的关联较为紧密时,则被称为"紧耦合"状态。

在实际应用中存在一个问题:如果更新某一个模块,则可能导致其他相关联的模块也随之发生变化。

反之,在这种情况下所采用的方式则被称为"松耦合"策略;一般而言,松 coup le d'application -based on message or protocol implementation.

使用函数仅作为模块化设计的一个必要但不足为奇的条件,在面对复杂的计算需求时需要特别谨慎地进行功能划分以确保系统的高效运行。一般而言,在实现特定功能或频繁调用的情况下,将一组代码逻辑整合成一个独立的功能块会提升效率与可重用性。

有时虽然采用函数与模块化设计可以让整个程序看起来更加冗长。但这些新增的封装代码具有显著的好处。这些封装代码为程序带来了层次分明的模块化结构,并且使得整个程序更具可读性。

5.函数的递归:

定义:
函数作为一种代码打包方式,在不同的应用场景中能够实现对其他程序或自身的调用机制。这种基于自身调用的行为模式被称为递归算法。如同一个人站在一个装满镜子的房间里,在镜面反射中不断呈现影像的状态就是递归的结果表现形式。在数学理论与计算机科学领域中,递归方法展现出强大的问题解决能力。

数学上有个经典的递归例子叫阶乘,阶乘通常定义如下:

n! = n(n - 1)(n-2)···(1)

为了完成这个程序,可以通过:一个简单的循环累积运算来计算阶乘。观察5!的具体计算过程,若移除5这一项,则需进行4!的计算;进一步地推导可知,n!=n×(n−1)!实际上这一递推关系式为阶乘提供了另一种表达方式

阶乘表达式

根据定义,0! 被设定为 1;而对于其他正整数 n 的阶乘,则被定义为其与 (n-1) 阶乘之积:即 n! = n \times (n-1)!。需要注意的是,在这种情况下,并非真正的循环结构而是通过不断调用更小规模的问题来解决当前问题的过程被称为递归;当递归到底层时,则需要一个明确给出结果的具体表达式。

阶乘的例子揭示了递归的两个关键特征。

  • (1) 包含至少一个或多个基例,这些基例无需进一步递归调用,它们是一个明确定义的表达式。
  • (2) 每个递归链都必须以至少一个或多个基例作为终止条件。

递归使用方法:
以阶乘计算为例

复制代码
        1. def func(n):

    
        2.     if n==0:
    
        3.         return 1
    
        4.     else:
    
        5.         return n * fact(n-1)
    
        6. num = eval(input("请输入一个正整数:"))
    
        7. print(func(num))

输出

请输入一个正整数:10
3628800

fact()函数在其定义内部调用自身,从而构成一个递归过程(例如,在第5行)。无限的递归运算可能会导致计算资源的耗尽,因此必须设计合适的基例来终止递归并返回正确结果。fact()函数通过if语句为n=0的情况设置了基例:当n等于0时,函数不再进行进一步的递归调用并直接返回数值1;而当n不等于0时,则通过连续的递归来计算并返回n乘以(n-1)阶乘的结果。

6.Python内置函数

Python解释器提供了68个内置函数,这些函数不需要引用库直接使用;

Python内置函数
7.函数库调用方式
  • 第一种引用函数库方法

该代码段用于导入指定的图书馆或模块。
在程序课程中调用全部所给的函数。
按照以下方式使用该课程要求的特定功能模块:
图书馆名称的功能模块名称(输入参数)

  • 第二种引用函数库方法

导入指定的一组函数:from <库名> import <函数名1, 函数名2, 函数名3···>
使用星号导入法:from <库Name> import * (此处*为通配符)

在调用这些功能时:

无需再明确指定库Name
按照以下方式书写:

()

两种函数调用风格各有其优势:第一种风格能够明确标注函数来源,在调用多个库时能提高代码可读性;第二种风格通过关键字直接引用库中的函数能使代码更加简洁明了,在单一场景下应用效果更为突出。

四:组合数据类型
组合数据类型分类
(一)集合类型及操作
1.集合类型定义:

该集合类型与数学中对应的集合概念一致;
该集合中各元素具有无序性,并且每个元素都是唯一的且互不相同;
该集合中的所有元素都无法被修改,并且它不是一个可变的数据类。

创建集合
以大括号 {} 形式表示集合元素,并将这些元素之间用逗号分隔开;
定义集合类型时可采用 {} 或 set() 的形式;
若需创建空集合,则应采用set()函数;
例如:

复制代码
        1. A = {"Climb",5201314,("python",123)}

    
        2. B = set("Climb,520,Climb")
    
        3. C = {"Climb",520,"Climb",520}
    
        4. print(A)
    
        5. print(B)
    
        6. print(C)

输出

{5201314, ‘Climb’, (‘python’, 123)}
{‘l’, ‘C’, ‘i’, ‘2’, ‘0’, ‘m’, ‘5’, ‘b’, ‘,’}
{520, ‘Climb’}

2.集合类型操作符:
操作符及应用 说明
A B(并) 返回一个新集合,包括在集合A和B中的所有元素
A - B(差) 返回一个新集合,包括在集合A但不在B中的元素
A & B(交) 返回一个新集合,包括同时在集合A和B中的元素
A ^ B(补) 返回一个新集合,包括集合A和B中的非相同元素
A <= B 或 A < B 返回True/False,判断A和B的子集关系
A >= B 或 A > B 返回True/False,判断A和B的包含关系

4个增强操作符

操作符及应用 说明
A = B 更新集合A,包括在集合A和B中的所有元素
S -= B 更新集合A,包括在集合A但不在B中的元素
S &= T 更新集合A,包括同时在集合A和B中的元素
S ^= B 更新集合A,包括集合A和B中的非相同元素
  • 集合类型应运场景: 包含关系比较;数据去重。
(二)序列类型及操作
1.序列类型定义:
  • 一维向量序列各元类型各异;
    类似数学有序集合:s₀,s₁,…,s_{n−₁};
    各元按序号排列并依序标定特定项

  • 涉及的序列类型有:字符串类、元组类以及列表类。

    • 这些序列遵循一致的索引规则,在正方向(从小到大)和逆方向(从大到小)上进行编号。
2.序列类型的通用操作符和函数
序列类型通用操作符和函数
  • 元组类型及操作:
    (1)元组作为一种不可变的序列类型,在创建后无法进行修改;
    (2)通过小括号 () 或 tuple() 函数可以创建元组,并且其内部元素之间需以逗号 , 分隔;
    (3)是否采用的小括号 () 是一种选择;
    (4)它继承了所有序列类型的基本操作功能。

  • 列表类型及操作:
    (1)列表是一种序列类型,在创建之后能够随时进行修改;
    (2)可以通过方括号 [] 或者list()构造,并使用逗号分隔开各个元素;
    (3)列表中的各个元素类型可以各异,并没有长度限制;
    (4)对于列表类型的常见操作函数和方法有详细的定义和应用说明。

列表类型特有操作函数及方法
3.序列类型应用场景:
复制代码
 元组用于元素不改变的应用场景,更多用于固定搭配场景;

    
  
    
 列表更加灵活,它是最常用的序列类型;
    
  
    
 最主要作用:表示一组有序数据,进而操作它们。
    
  
    
 元素遍历:for	item	in	ls;	 和  for	item	in	tp;
    
 数据保护:如果不希望数据被程序所改变,转换成元组类型
(三)字典类型及操作
1.字典类型定义:

映射是通过键(索引)与数据项之间的对应关系建立起来的;
该对象的内部颜色设置为蓝色;
外侧颜色被设定为红色;
字典类型可被视为基于"映射"的核心结构。

键作为数据索引的一种延伸,
字典由一系列键值对构成,
这些键值对之间并无特定顺序,
通常通过大括号{}或dict()函数构建,
各键值对以冒号分隔的形式排列:
<键1>:<值1>,
<键2>:<值2>,
…,
<键n>:<值n>

2.字典类型用法:

< 字典变量 > 被定义为一个包含多个 < 键1 > 至 < 键n > 以及相应 < 值1 > 至 < 值n > 的集合。
每个 < 值 > 被赋予为该 < 字典变量 > 在指定 < 键 > 位置上的对应取值。
每个 < 字典变量 > 在指定 < 键 > 位置上的对应取值将被赋予为某个特定的数值。
列表用于实现对 < 字典变量 > 进行索引操作或新增元素存储。

举例:

复制代码
        1. d = {"中国":"北京", "美国":"华盛顿", "法国":"巴黎"}

    
        2. print(d)
    
        3. d["中国"]

输出:

{‘中国’: ‘北京’, ‘美国’: ‘华盛顿’, ‘法国’: ‘巴黎’}
‘北京’

3.字典类型的函数及方法
字典类型的函数及方法

全部评论 (0)

还没有任何评论哟~