深入 Python:变量与数据类型的奥秘

news2025/3/4 5:35:07

在 Python 编程的世界里,变量和数据类型是构建程序大厦的基石。它们看似简单,却蕴含着无尽的奥秘和强大的功能。今天,就让我们一起深入探索 Python 中变量与数据类型的奇妙世界。

常量和表达式:数学世界的 Python 映射

在 Python 中,常量是指在程序运行过程中值不会发生改变的量。虽然 Python 不像其他一些语言那样有专门的常量声明语法,但我们通常约定使用全大写字母来表示常量,例如PI = 3.14159。这就好比我们在数学中定义圆周率,无论在程序的哪个部分使用,PI的值都固定为3.14159。

表达式则是由常量、变量、运算符和函数调用等组成的式子,它会根据运算符的优先级进行计算并返回一个结果。以2 + 3 * 4这个简单的算术表达式为例,根据数学运算规则,乘法的优先级高于加法。所以,Python 会先计算3 * 4,结果为12,然后再将2与12相加,最终得到14。在复杂的科学计算中,可能会遇到像(2.5 + 3.7) * (4.2 - 1.8) / 2这样的表达式。首先,计算括号内的内容,2.5 + 3.7 = 6.2,4.2 - 1.8 = 2.4。然后,进行乘法运算6.2 * 2.4 = 14.88,最后进行除法运算14.88 / 2 = 7.44。这些常量和表达式是我们在 Python 中进行数学运算和逻辑处理的基础工具。

一,变量和类型:程序中的灵动舞者

变量

1. 变量的定义

在 Python 中,变量是存储数据的容器。你可以把变量看作是一个标签,它指向内存中存储的数据。变量不需要事先声明类型,在赋值时会自动确定类型。

示例代码

# 定义一个整数变量
num = 10
# 定义一个字符串变量
name = "Alice"
2. 变量的命名规则
  • 变量名只能包含字母、数字和下划线。
  • 变量名不能以数字开头。
  • 变量名区分大小写。
  • 变量名不能使用 Python 的关键字(如ifelsefor等)。
# 合法的变量名
age = 20
student_name = "Bob"

# 不合法的变量名
# 以数字开头
# 123num = 10  

# 使用关键字
# if = 5  
3. 变量的赋值

在 Python 中,使用等号(=)来给变量赋值。可以一次给多个变量赋值,也可以交换两个变量的值。

示例代码

# 一次给多个变量赋值
a, b, c = 1, 2, 3
print(a, b, c)

# 交换两个变量的值
x = 10
y = 20
x, y = y, x
print(x, y)

 

# 整数转浮点数
num_int = 10
num_float = float(num_int)
print(num_float)  # 10.0

# 浮点数转整数
num_float = 3.14
num_int = int(num_float)
print(num_int)  # 3

# 整数转字符串
num_int = 20
str_num = str(num_int)
print(str_num)  # '20'

 

变量的类型:丰富多彩的数据容器

类型分类具体类型描述可变性
数值类型int整数类型,可表示任意大小的整数不可变
数值类型float浮点数类型,用于表示小数不可变
数值类型complex复数类型,由实部和虚部组成不可变
数值类型bool布尔类型,只有 True 和 False 两个值不可变
序列类型str字符串类型,用于表示文本不可变
序列类型list列表类型,有序、可包含不同类型元素的集合可变
序列类型tuple元组类型,有序集合,元素不能修改不可变
集合类型set集合类型,无序、元素唯一的集合可变
集合类型frozenset冻结集合类型,无序、元素唯一且不可变的集合不可变
映射类型dict字典类型,由键值对组成,键必须唯一可变
二进制类型bytes不可变的字节序列不可变
二进制类型bytearray可变的字节序列可变
二进制类型memoryview用于访问其他二进制对象的内存可变
特殊类型NoneType只有一个值 None,通常用于表示空值或未定义的值不可变
其他内置类型range表示不可变的整数序列,通常用于循环不可变
其他内置类型slice用于指定切片操作的对象不可变
其他内置类型ellipsis由 ... 表示,主要用于 NumPy 等库中多维数组切片不可变

 

数值类型

1. int(整数类型)
  • 描述:用于表示整数,可正可负,没有小数部分。在 Python 3 里,int 类型能表示任意大小的整数,不受位数限制,这使得处理大数值时非常方便。
  • 使用场景:常用于计数、索引、表示数量等,例如循环中的计数器、列表的索引等。
  • 示例
    a = 10
    b = -20
    c = 12345678901234567890  # 可以表示极大的整数
    2. float(浮点数类型)
  • 描述:用于表示带有小数部分的数字,遵循 IEEE 754 标准。浮点数在内存中的存储存在一定的精度问题,这是由于二进制无法精确表示某些十进制小数。
  • 使用场景:在需要处理小数的场景中使用,如科学计算、金融计算(但在金融领域需注意精度问题)等。
  • 示例
    x = 3.14
    y = -0.5
    3. complex(复数类型)
  • 描述:由实部和虚部组成,虚部以 j 或 J 结尾。在数学和科学计算中,复数常用于处理交流电、信号处理等领域。
  • 使用场景:在涉及复数运算的科学和工程计算中使用。
  • 示例
    z = 2 + 3j
    w = -1 - 0.5j
    4. bool(布尔类型)
  • 描述:只有两个值,即 True 和 False,常用于条件判断和逻辑运算。
  • 使用场景:在 if 语句、while 循环等条件控制结构中使用,用于决定程序的执行流程。
  • 示例
    is_valid = True
    has_error = False

    序列类型

    1. str(字符串类型)
  • 描述:由零个或多个字符组成的不可变序列,用于表示文本数据。可以使用单引号(')、双引号(")或三引号(''' 或 """)来定义。三引号可以用于定义多行字符串。
  • 使用场景:用于存储和处理文本信息,如用户输入、文件内容、网页文本等。
  • 示例
    single_quote_str = 'Hello'
    double_quote_str = "World"
    multi_line_str = '''This is a 
    multi - line string.'''
    2. list(列表类型)
  • 描述:可变的有序序列,可包含任意类型的元素,使用方括号定义。列表支持元素的添加、删除、修改等操作。
  • 使用场景:当需要存储多个元素,并且这些元素的数量和内容可能会动态变化时使用,如存储用户输入的一组数据、存储一组对象等。
  • 示例
    my_list = [1, 'apple', True]
    3. tuple(元组类型)
  • 描述:有序集合,元素不能修改,使用圆括号定义。元组在创建后,其元素的数量和值都不能改变。
  • 使用场景:当需要存储一组不可变的数据时使用,如函数返回多个值时可以使用元组,或者作为字典的键(因为键必须是不可变的)。
  • 示例
    my_tuple = (1, 2, 'hello')

    集合类型

    1. set(集合类型)
  • 描述:无序、元素唯一的集合,使用花括号或 set() 函数来创建。集合中的元素必须是不可变类型(如数字、字符串、元组等),因为集合会对元素进行哈希操作以实现快速查找和去重。
  • 使用场景:用于去重、判断元素是否存在、进行集合运算(如并集、交集、差集等)。
  • 示例
    my_set = {1, 2, 3, 3}  # 自动去重,实际为 {1, 2, 3}
    2. frozenset(冻结集合类型)
  • 描述:无序、元素唯一且不可变的集合,使用 frozenset() 函数创建。一旦创建,不能对其进行添加、删除元素等修改操作。
  • 使用场景:可以作为字典的键,或者在需要不可变集合的场景中使用。
  • 示例
    frozen = frozenset([1, 2, 3])

    映射类型

    dict(字典类型)
  • 描述:由键值对组成,键必须唯一,使用花括号定义。字典是无序的(Python 3.7 及以后版本保证插入顺序),键必须是不可变类型(如数字、字符串、元组等),值可以是任意类型。
  • 使用场景:用于存储具有关联关系的数据,如存储用户信息(姓名 - 年龄、姓名 - 地址等)、配置信息等。
  • 示例
    my_dict = {'name': 'Alice', 'age': 20}

    二进制类型

    1. bytes(不可变字节序列)
  • 描述:用于存储二进制数据,是不可变的。字节对象中的每个元素是一个 0 到 255 之间的整数。
  • 使用场景:在处理文件、网络数据等二进制数据时使用,如读取二进制文件、发送网络请求等。
  • 示例
    b = b'hello'
    2. bytearray(可变字节序列)
  • 描述:与 bytes 类似,但它是可变的,可以对其中的元素进行修改。
  • 使用场景:当需要对二进制数据进行修改时使用,如在处理二进制文件时进行数据的替换、插入等操作。
  • 示例
    ba = bytearray(b'hello')
    ba[0] = 72  # 将第一个字符替换为 'H'
    3. memoryview(内存视图)
  • 描述:用于访问其他二进制对象的内存,提供了一种无需复制数据就可以操作二进制数据的方式,提高了内存使用效率。
  • 使用场景:在处理大型二进制数据时,避免数据的复制,提高性能,如在 NumPy 数组操作中可能会用到。
  • 示例
    data = bytearray(b'abc')
    mv = memoryview(data)

    特殊类型

    NoneType
  • 描述:只有一个值 None,通常用于表示空值或未定义的值。在函数没有显式返回值时,默认返回 None
  • 使用场景:用于初始化变量,表示变量还没有被赋予有意义的值,或者作为函数的默认返回值。
  • 示例
    result = None

    其他内置类型

    1. range
  • 描述:表示不可变的整数序列,通常用于循环。可以指定起始值、结束值和步长。
  • 使用场景:在 for 循环中生成一系列整数,控制循环的次数。
  • 示例
    for i in range(0, 5):
        print(i)
    2. slice
  • 描述:用于指定切片操作的对象,可以通过 slice(start, stop, step) 来创建。切片操作可以用于序列类型(如列表、字符串、元组等)。
  • 使用场景:当需要对序列进行切片操作,并且切片的参数需要复用或动态生成时使用。
  • 示例
    my_list = [1, 2, 3, 4, 5]
    s = slice(1, 3)
    print(my_list[s])
    3. ellipsis
  • 描述:由 ... 表示,主要用于 NumPy 等库中多维数组切片,在 Python 内置中较少使用。它可以用来表示省略的维度。
  • 使用场景:在处理多维数组时,简化切片操作,特别是当数组维度较多时。
  • 示例
    import numpy as np
    arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    print(arr[..., 0])

动态类型特性

    在 Python , 一个变量是什么类型 , 是可以在 " 程序运行 " 过程中发生变化的 . 这个特性称为 " 动态类型 " 。
a = 10
print(type(a))
a = 'hello'
print(type(a))

运行结果:

<class ' int '>

<calss ' str '>

在程序执行过程中 , a 的类型刚开始是 int, 后面变成了 str。
C++/Java 这样的语言则不允许这样的操作 . 一个变量定义后类型就是固定的了 . 这种特性则称为 " 静态类型 ".
动态类型特性是一把双刃剑
  • 对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型).
  • 对于大型程序, 则提高了模块之间的交互成本. (程序猿 A 提供的代码难以被 B 理解)

二,操作符深度剖析

运算符类型

运算符

描述

算术运算符

+

加法,用于两个操作数相加,也可拼接列表

-

减法,从第一个操作数中减去第二个操作数

*

乘法,使两个操作数相乘,还能重复字符串

/

除法,返回两个操作数相除的商,结果为浮点数

//

整除,得到商的整数部分

%

取模,获取两个操作数相除的余数

**

幂运算,第一个操作数作为底数,第二个作为指数

,相当于数学的根号

比较运算符

==

判断两个操作数是否相等

!=

判断两个操作数是否不相等

>

判断第一个操作数是否大于第二个操作数

<

判断第一个操作数是否小于第二个操作数

>=

判断第一个操作数是否大于或等于第二个操作数

<=

判断第一个操作数是否小于或等于第二个操作数

逻辑运算符

and

与运算,仅当两个操作数都为True时,结果才为True,相当于C语言‘&&’(逻辑与)

or

或运算,只要两个操作数中有一个为True,结果即为True,相当于C语言'||'(逻辑或)

not

非运算,对操作数的布尔值取反,相当于C语言'!'(逻辑非)

赋值运算符

=

简单赋值,将右侧的值赋给左侧的变量

+=

加法赋值,把变量自身与右侧的值相加,并将结果重新赋给该变量

-=

减法赋值,从变量自身减去右侧的值,再将结果重新赋给该变量

*=

乘法赋值,将变量自身与右侧的值相乘,结果重新赋给该变量

/=

除法赋值,变量自身除以右侧的值,结果(浮点数)重新赋给该变量

//=

整除赋值,变量自身进行整除运算,结果重新赋给该变量

%=

取模赋值,变量自身与右侧的值进行取模运算,结果重新赋给该变量

**=

幂赋值,变量自身作为底数,右侧的值作为指数进行幂运算,结果重新赋给该变量

位运算符

&

按位与,对两个操作数的每个二进制位进行与运算,这里跟C语言也是类似的

|

按位或,对两个操作数的每个二进制位进行或运算,这里跟C语言也是类似的

^

按位异或,对两个操作数的每个二进制位进行异或运算,这里跟C语言也是类似的

~

按位取反,对操作数的每个二进制位进行取反操作,这里跟C语言也是类似的

<<

左移,将操作数的二进制位向左移动指定的位数,这里跟C语言也是类似的

>>

右移,将操作数的二进制位向右移动指定的位数,这里跟C语言也是类似的

成员运算符

in

判断值是否在序列中,若在则返回True

not in

判断值是否不在序列中,若不在则返回True

身份运算符

is

判断两个对象是否为同一对象,若是则返回True

is not

判断两个对象是否不是同一对象,若不是则返回True

1.算术运算符

加法(+)

  • 功能:用于两个数值相加,得出它们的总和;若操作数为列表等序列类型,可实现拼接操作。
  • 注意事项:当不同类型数据相加时,可能会引发类型错误,例如数字与字符串直接相加(除字符串与数字用+拼接的特定情况)。
  • 示例

数值相加:result = 3 + 5,result的值为8。

列表拼接:list1 = [1, 2]; list2 = [3, 4]

new_list = list1 + list2,new_list的值为[1, 2, 3, 4]。


减法(-)

  • 功能:从第一个数值中减去第二个数值,得到差值。
  • 注意事项:确保操作数类型为数值型,否则会报错。
  • 示例

result = 7 - 3,result的值为4。


乘法(*)

  • 功能:实现两个数值相乘,得到乘积;若一个操作数为字符串,另一个为整数,则将字符串重复指定次数。
  • 注意事项:同样要保证操作数类型匹配,不能用非数值或非字符串与整数进行不恰当的乘法操作。
  • 示例

数值相乘:result = 4 * 6,result的值为24。

字符串重复:new_string = "Hello" * 3,new_string的值为"HelloHelloHello"。


除法(/)

  • 功能:将第一个数值除以第二个数值,返回一个浮点数结果。
  • 注意事项:除数不能为零,否则会触发ZeroDivisionError异常。
  • 示例

result = 10 / 3,result的值为3.3333333333333335。


整除(//)

  • 功能:执行除法运算并返回商的整数部分,舍去小数部分。
  • 注意事项:除数不能为零,且结果为整数类型。
  • 示例

result = 10 // 3,result的值为3。


取模(%)

  • 功能:返回两个数值相除后的余数。
  • 注意事项:除数不能为零,常用于判断一个数能否被另一个数整除等场景。
  • 示例

result = 10 % 3,result的值为1。


幂运算(**)

  • 功能:将第一个数值作为底数,第二个数值作为指数,计算幂次方。
  • 注意事项:操作数需为数值类型,且指数为负数时,结果为底数的倒数的正数次幂。
  • 示例

result = 2 ** 3,result的值为8。


2.比较运算符

等于(==)

  • 功能:判断两个操作数的值是否相等,返回布尔值True或False。
  • 注意事项:比较时会考虑数据类型,不同类型数据比较可能得出不符合预期的结果,例如"5" == 5为False。
  • 示例

result1 = 5 == 5,result1为True;result2 = 5 == 3,result2为False。


不等于(!=)

  • 功能:判断两个操作数的值是否不相等,返回布尔值True或False。
  • 注意事项:同样要注意数据类型对比较结果的影响。
  • 示例

result1 = 5 != 3,result1为True;result2 = 5 != 5,result2为False。


大于(>)

  • 功能:判断第一个操作数是否大于第二个操作数,返回布尔值True或False。
  • 注意事项:操作数应为可比较类型,例如数值类型或相同类型的序列等。
  • 示例

result1 = 7 > 5,result1为True;result2 = 5 > 7,result2为False。


小于(<)

  • 功能:判断第一个操作数是否小于第二个操作数,返回布尔值True或False。
  • 注意事项:与大于运算符类似,需注意操作数类型。
  • 示例

result1 = 3 < 5,result1为True;result2 = 5 < 3,result2为False。


大于等于(>=)

  • 功能:判断第一个操作数是否大于或等于第二个操作数,返回布尔值True或False。
  • 注意事项:操作数类型需兼容比较。
  • 示例

result1 = 5 >= 5,result1为True;result2 = 3 >= 5,result2为False。


小于等于(<=)

  • 功能:判断第一个操作数是否小于或等于第二个操作数,返回布尔值True或False。
  • 注意事项:注意操作数类型匹配。
  • 示例

result1 = 5 <= 5,result1为True;result2 = 7 <= 5,result2为False。


3.逻辑运算符

与(and)

  • 功能:当两个操作数都为True时,返回True;否则返回False,常用于组合多个条件判断。
  • 注意事项:操作数应为布尔类型或可转换为布尔类型的数据,例如数值类型中,0 被视为False,非 0 视为True;空字符串、空列表等空数据结构视为False,非空视为True。
  • 示例

result1 = (5 > 3) and (2 < 4),result1为True。

result2 = (5 > 3) and (2 > 4),result2为False。


或(or)

  • 功能:只要两个操作数中有一个为True,就返回True;只有当两个操作数都为False时,才返回False。
  • 注意事项:与and运算符类似,操作数需为布尔类型或可转换为布尔类型。
  • 示例

result1 = (5 > 3) or (2 > 4),result1为True。

result2 = (2 > 4) or (1 > 3),result2为False。


非(not)

  • 功能:对操作数的布尔值进行取反,True变为False,False变为True。
  • 注意事项:操作数需为可转换为布尔类型的数据。
  • 示例

result1 = not (5 > 3),result1为False。

result2 = not (2 > 4),result2为True。


4.赋值运算符

简单赋值(=)

  • 功能:将右侧的值赋给左侧的变量,创建或更新变量的值。
  • 注意事项:变量名需符合 Python 命名规则,且左侧必须是合法变量名。
  • 示例

x = 5,此时变量x的值为5。


加法赋值(+=)

  • 功能:将变量自身与右侧的值相加,并将结果重新赋给该变量,是x = x + value的简写形式。
  • 注意事项:变量需先定义,且操作数类型需兼容加法运算。
  • 示例

x = 3; x += 2,执行后x的值变为5。


减法赋值(-=)

  • 功能:从变量自身减去右侧的值,并将结果重新赋给该变量,即x = x - value的简写。
  • 注意事项:变量需先存在,操作数类型要满足减法运算要求。
  • 示例

x = 5; x -= 2,执行后x的值变为3。


乘法赋值(*=)

  • 功能:将变量自身与右侧的值相乘,并将结果重新赋给该变量,等同于x = x * value。
  • 注意事项:变量需已定义,操作数类型支持乘法运算。
  • 示例

x = 3; x *= 2,执行后x的值变为6。


除法赋值(/=)

  • 功能:将变量自身除以右侧的值,并将结果(浮点数)重新赋给该变量,即x = x / value。
  • 注意事项:变量需先定义,除数不能为零,且结果为浮点数类型。
  • 示例

x = 6; x /= 2,执行后x的值变为3.0。


整除赋值(//=)

  • 功能:将变量自身进行整除运算(除以右侧的值并取整数部分),并将结果重新赋给该变量,即x = x // value。
  • 注意事项:变量需已存在,除数不能为零,结果为整数类型。
  • 示例

x = 7; x //= 2,执行后x的值变为3。


取模赋值(%=)

  • 功能:将变量自身与右侧的值进行取模运算,并将结果重新赋给该变量,即x = x % value。
  • 注意事项:变量需先定义,除数不能为零。
  • 示例

x = 7; x %= 2,执行后x的值变为1。


幂赋值(**=)

  • 功能:将变量自身作为底数,右侧的值作为指数进行幂运算,并将结果重新赋给该变量,即x = x ** value。
  • 注意事项:变量需先定义,操作数类型需为数值型。
  • 示例

x = 2; x **= 3,执行后x的值变为8。


5.位运算符

按位与(&)

  • 功能:对两个操作数的每个二进制位进行与运算,只有当两个对应位都为 1 时,结果位才为 1,否则为 0。
  • 注意事项:操作数需为整数类型,常用于对二进制数据进行特定位操作。
  • 示例

a = 5(二进制101);b = 3(二进制011)。

result = a & b,result的值为1(二进制001)。


按位或(|)

  • 功能:对两个操作数的每个二进制位进行或运算,只要两个对应位中有一个为 1,结果位就为 1,否则为 0。
  • 注意事项:操作数应为整数类型。
  • 示例

a = 5(二进制101);b = 3(二进制011)。

result = a | b,result的值为7(二进制111)。


按位异或(^)

  • 功能:对两个操作数的每个二进制位进行异或运算,当两个对应位不同时,结果位为 1,相同时为 0。
  • 注意事项:操作数需为整数类型。
  • 示例

a = 5(二进制101);b = 3(二进制011)。

result = a ^ b,result的值为6(二进制110)。


按位取反(~)

  • 功能:对操作数的每个二进制位进行取反操作,0 变 1,1 变 0。在有符号整数系统中,取反结果需考虑符号位。
  • 注意事项:操作数为整数类型,取反结果的解读与整数的存储方式相关。
  • 示例

a = 5(二进制00000101)。

result = ~a,result的值为-6(二进制11111010,在有符号整数系统中)。


左移(<<)

  • 功能:将操作数的二进制位向左移动指定的位数,右侧空出的位用 0 填充,相当于对原数乘以 2 的移动位数次方。
  • 注意事项:操作数为整数类型,移动位数不能为负数。
  • 示例

a = 5(二进制101)。

result = a << 2,result的值为20(二进制10100)。


右移(>>)

  • 功能:将操作数的二进制位向右移动指定的位数,左侧空出的位根据原数的符号位进行填充(正数用 0,负数用 1),相当于对原数除以 2 的移动位数次方并向下取整。
  • 注意事项:操作数为整数类型,移动位数不能为负数。
  • 示例

a = 5(二进制101)。

result = a >> 1,result的值为2(二进制010)。


6.成员运算符

in

  • 功能:判断一个值是否存在于某个序列(如列表、元组、字符串等)中,如果存在则返回True,否则返回False。
  • 注意事项:第一个操作数为要查找的值,第二个操作数为序列类型数据。
  • 示例

result1 = 3 in [1, 2, 3],result1为True。

result2 = 4 in "Hello",result2为False。


not in

  • 功能:判断一个值是否不存在于某个序列中,如果不存在则返回True,否则返回False。
  • 注意事项:操作数类型要求与in运算符一致。
  • 示例

result1 = 4 not in [1, 2, 3],result1为True。

result2 = 'l' not in "Hello",result2为False。


7.身份运算符

is

  • 功能:判断两个对象是否为同一对象,即它们在内存中是否具有相同的地址,返回布尔值True或False。
  • 注意事项:比较的是对象的身份,而不仅仅是值相等,例如两个值相同但独立创建的列表,用is比较为False。
  • 示例

a = [1, 2, 3]

b = a

result = a is b,result为True。


is not

  • 功能:判断两个对象是否不是同一对象,即它们在内存中的地址不同,返回布尔值True或False。
  • 注意事项:与is运算符相反,关注对象地址的差异。
  • 示例

a = [1, 2, 3]

b = [1, 2, 3]

result = a is not b,result为True,因为a和b虽然值相同,但为不同的列表对象。

三,注释规范指南

在 Python 中,注释是代码中用于解释代码功能、用途、实现思路等信息的文本内容,它不会被 Python 解释器执行。合理使用注释能够提高代码的可读性和可维护性,方便开发者自己以及其他人员理解代码。Python 支持两种类型的注释:单行注释多行注释

单行注释

  • 语法:以井号(#)开头,从 # 开始到行尾的所有内容都会被视为注释。
  • 示例
    # 这是一个单行注释,用于计算两个数的和
    a = 5
    b = 3
    result = a + b  # 计算 a 和 b 的和并存储在 result 变量中
    print(result)
  • 使用场景
    • 解释代码功能:在代码行上方或旁边添加注释,说明这行代码或代码块的功能。例如,在一个复杂的数学计算或函数调用前,用注释简要说明其目的。
    • 临时禁用代码:当你想要暂时不执行某行代码,但又不想删除它时,可以在该行代码前添加 # 将其注释掉。
# num = 10  # 暂时禁用这行代码

多行注释

1. 使用多个单行注释
  • 语法:在需要注释的每一行前面都加上 #
  • 示例
    # 以下代码用于创建一个简单的列表
    # 并对列表中的元素进行求和操作
    my_list = [1, 2, 3, 4, 5]
    total = sum(my_list)
    print(total)

  • 使用场景:当需要注释的内容较多,但逻辑上是逐行说明时,使用多个单行注释较为合适。
2. 使用三引号字符串
  • 语法:使用三单引号(''')或三双引号(""")将需要注释的内容括起来。
  • 示例
    '''
    这个函数用于计算两个数的乘积
    参数:
        a: 第一个数
        b: 第二个数
    返回值:
        两个数的乘积
    '''
    def multiply(a, b):
        return a * b
    
    """
    这里也可以使用三双引号进行多行注释
    下面调用 multiply 函数进行测试
    """
    result = multiply(3, 4)
    print(result)
  • 使用场景
    • 函数和类的文档字符串:在函数或类的定义下方,使用三引号字符串作为文档字符串(docstring),用于描述函数或类的功能、参数、返回值等信息。可以通过 __doc__ 属性访问这些文档字符串。
      def add(a, b):
          """
          计算两个数的和
          :param a: 第一个数
          :param b: 第二个数
          :return: 两个数的和
          """
          return a + b
      
      print(add.__doc__)  # 输出函数的文档字符串
    • 大段注释内容:当需要注释一大段文本时,使用三引号字符串更方便,无需在每行前面都添加 #

注释的最佳实践

  • 适度注释:注释应该简洁明了,避免过多无用的注释。如果代码本身已经很清晰,就不需要额外的注释。
  • 保持更新:当代码发生变化时,要及时更新相应的注释,确保注释与代码的实际功能一致。
  • 使用规范格式:对于函数和类的文档字符串,建议遵循一定的规范格式,如 reStructuredText 或 Google 风格,方便生成文档。例如,Google 风格的文档字符串示例如下:
    def calculate_average(numbers):
        """计算列表中数字的平均值。
    
        Args:
            numbers (list): 包含数字的列表。
    
        Returns:
            float: 列表中数字的平均值。
        """
        if not numbers:
            return 0
        return sum(numbers) / len(numbers)

    通过合理使用注释,可以让你的 Python 代码更易于理解和维护。

四,输入和输出全解析

输出

1. print() 函数

print() 是 Python 中最常用的输出函数,用于将指定的对象打印到标准输出(通常是控制台)。

基本用法

可以直接将要输出的内容作为参数传递给 print() 函数

print("Hello, World!")  # 输出字符串
print(123)  # 输出整数
print(3.14)  # 输出浮点数
输出多个对象

print() 函数可以同时输出多个对象,对象之间用逗号分隔,默认情况下会在对象之间添加一个空格。

name = "Alice"
age = 20
print("Name:", name, "Age:", age)
自定义分隔符和结束符
  • sep 参数:用于指定多个对象之间的分隔符,默认值是一个空格。
  • end 参数:用于指定输出内容的结束符,默认值是换行符 \n
print("apple", "banana", "cherry", sep=", ")  # 输出: apple, banana, cherry
print("This is a line.", end=" ")
print("This is another line.")  # 两行内容会在同一行输出
格式化输出
  • 旧式格式化:使用 % 操作符进行格式化。
name = "Bob"
age = 25
print("My name is %s and I'm %d years old." % (name, age))
  • str.format() 方法:提供了更灵活的格式化方式。
name = "Charlie"
age = 30
print("My name is {} and I'm {} years old.".format(name, age))
# 还可以使用索引指定参数的位置
print("My name is {1} and I'm {0} years old.".format(age, name))
  • f - 字符串(Python 3.6+):在字符串前加上 f 或 F,可以在字符串中直接嵌入表达式。
name = "David"
age = 35
print(f"My name is {name} and I'm {age} years old.")
# 可以在花括号内使用表达式
print(f"The square of {age} is {age ** 2}")
2. 输出到文件

可以使用 open() 函数打开一个文件,并将 print() 函数的输出重定向到该文件。

with open('output.txt', 'w') as f:
    print("This will be written to the file.", file=f)

输入

1. input() 函数

input() 函数用于从标准输入(通常是键盘)读取用户输入的内容,返回一个字符串类型的值。

基本用法
name = input("Please enter your name: ")
print(f"Hello, {name}!")
类型转换

由于 input() 函数返回的是字符串类型,如果需要输入其他类型的数据,需要进行类型转换。

    age_str = input("Please enter your age: ")
    age = int(age_str)  # 将输入的字符串转换为整数
    print(f"You are {age} years old.")
    2. 读取文件输入

    可以使用 open() 函数打开一个文件,并逐行读取文件内容。

    with open('input.txt', 'r') as f:
        for line in f:
            print(line.strip())  # 去除每行末尾的换行符并打印

    错误处理

    在进行输入操作时,可能会出现用户输入不符合预期的情况,需要进行错误处理。例如,当用户输入的内容无法转换为所需的类型时,可以使用 try - except 语句捕获异常。

    try:
        num_str = input("Please enter an integer: ")
        num = int(num_str)
        print(f"The square of {num} is {num ** 2}")
    except ValueError:
        print("Invalid input. Please enter a valid integer.")

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2309329.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    [Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)

    [Windows] 极限投屏_正式版 链接&#xff1a;https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future)&#xff1a; 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…

    C++初阶—list类

    第一章&#xff1a;list的介绍及使用 1.1 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指…

    【子网掩码计算器:Python + Tkinter 实现】

    子网掩码计算器&#xff1a;Python Tkinter 实现 引言代码功能概述代码实现思路1. 界面设计2. 功能实现3. 事件处理 子网掩码计算器实现步骤1. 导入必要的库2. 定义主窗口类 SubnetCalculatorApp3. 创建菜单栏4. 创建界面组件5. 判断 IP 地址类别6. 计算子网信息7. 其他功能函…

    入门基础项目(SpringBoot+Vue)

    文章目录 1. css布局相关2. JS3. Vue 脚手架搭建4. ElementUI4.1 引入ElementUI4.2 首页4.2.1 整体框架4.2.2 Aside-logo4.2.3 Aside-菜单4.2.4 Header-左侧4.2.5 Header-右侧4.2.6 iconfont 自定义图标4.2.7 完整代码 4.3 封装前后端交互工具 axios4.3.1 安装 axios4.3.2 /src…

    车载以太网-基于linux的ICMP协议

    对于车载以太网-ICMP的技术要求: /** ICMP报文格式解析* -----------------* ICMP协议用于网络诊断和错误报告,常见应用包括Ping测试。* ICMP报文结构包括:IP头部、ICMP头部和ICMP数据部分。* 下面详细介绍每个部分的结构、字段的作用以及如何解析它们。* * ICMP头部结构:*…

    虚拟机快照与linux的目录结构

    虚拟机快照是对虚拟机某一时刻状态的完整捕获&#xff0c;包括内存、磁盘、配置及虚拟硬件状态等&#xff0c;保存为独立文件。 其作用主要有数据备份恢复、方便系统测试实验、用于灾难恢复以及数据对比分析。具有快速创建和恢复、占用空间小、可多个快照并存的特点。在管理维…

    Unity小功能实现:鼠标点击移动物体

    1、功能描述 当玩家点击鼠标时&#xff0c;场景中的物体会移动到鼠标点击的位置。这个功能可以用于控制角色移动、放置物体等场景。 2、实现步骤 创建Unity项目&#xff1a;首先&#xff0c;打开Unity并创建一个新的3D项目。 添加3D物体&#xff1a;在场景中创建一个3D物体&am…

    算法题笔记(自用)——Python

    目录 一. 进制&位运算&ASCAII 二. format格式化输出 1. 基本用法 2. 位置参数 3. 格式化数字 4. 对齐和填充 5. 格式化二进制、八进制、十六进制 6. 格式化百分比 7. 格式化科学计数法 8. 格式化字符串字面量&#xff08;f-string&#xff09; 三. 字符串 使…

    爬虫系列之【数据解析之JSON】《三》

    目录 前置知识 一、 json.loads()&#xff1a;JSON 转 Python 数据 二、json.dump()&#xff1a;python数据 转 json 并写入文件 三、json.loads() &#xff1a;json 转 python数据 四、json.load() &#xff1a;json 转 python数据&#xff08;在文件操作中更方便&#xf…

    了解Java集合的概念和体系:Collection<T>、Collections与Stream的使用

    学习目标 本文知识是对集合层级的介绍&#xff0c;应用开发中实际使用的是他们的子级&#xff0c;感兴趣的小伙伴或者想深入了解有关Java集合知识的朋友可以选择阅读&#xff01; Stream的方法使用使用部分代码块内大多有两种实现方式&#xff0c;是为了更好的理解方法底层的代…

    进程优先级和进程切换 ─── linux第12课

    目录 Z(zombie)-僵尸进程 僵尸进程危害 孤儿进程 ​编辑 进程优先级 查看系统进程 用top命令更改已存在进程的nice&#xff1a; 其他概念 进程切换 进程如何切换 进程的调度 进程 内核数据结构 代码和数据 创建进程时 ,先创建内核数据结构 再加载代码和数据 进程退…

    光速解决phpstudy无法启动MySQL服务

    问题描述 在初步安装使用phpstudy时&#xff0c;会出现mysql服务启动失败的情况&#xff0c;具体表现为点击一键启动后&#xff0c;mysql启动又立即停止 原因及解决方法&#xff1a; phpstudy数据库无法启动有以下几个原因&#xff0c;可以看看自己是第几种&#xff1a; 服务名…

    txt 转 json 使用python语言

    需求: 把如下的txt文档转成json输出 代码 import jsondef txt_to_json(input_file, output_file):data_list []with open(input_file, r, encodingutf-8) as f:for line in f:# 分割数据并去除换行符parts line.strip().split(,)print(f"{parts}")print(type(par…

    Cargo, the Rust package manager, is not installed or is not on PATH.

    今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错&#xff0c;Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网&#xff1a;https://rustup.rs/# 下载&#xff1a;https://win.rustup.rs/x86_64 安装完成之后&#xff0c…

    JavaWeb个人笔记

    技术栈 前端 : HTML CSS JavaScript ES6 Nodejs npm vite vue3 router pinia axios element-plus 后端&#xff1a;HTTP xml Tomcat Servlet Request Response Cookie Sesssion Filter Listener MySQL JDBC Druid Jackson lombok jwt . HTML <!DOCTYPE html> 文档声…

    http报文的content-type参数和spring mvc传参问题

    很早之前博主聊过HTTP的报文结构以及其中和传参相关的重要参数content-type还有spring mvc&#xff0c;以前的三篇文章&#xff1a; HTTP与HTTPS协议详解&#xff1a;基础与安全机制-CSDN博客 详解Http的Content-Type_content-type application-CSDN博客 如何在Spring Boot中…

    14. LangChain项目实战1——基于公司制度RAG回答机器人

    教学视频&#xff1a; 12. 基于Gradio搭建基于公司制度RAG_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11VXRYTErZ/ 环境配置&#xff1a; python版本&#xff1a;3.10.8 服务器&#xff1a;Ubuntu 依赖包requirements.txt文件内容&#xff1a; aiofiles23.2.1 …

    FPGA开发,使用Deepseek V3还是R1(6):以滤波器为例

    以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

    JVM常用概念之垃圾回收设计与停顿

    在我们应用程序运行期间&#xff0c;我们是需要尽可能避免垃圾回收。 图1&#xff1a;不同垃圾回收器的设计&#xff08;黄色代表STW&#xff0c;绿色代表并发&#xff09; 实验 计算机配置 Hardware Overview:Model Name: MacBook ProModel Identifier: MacBookPro14,2Pro…

    uniapp-原生android插件开发摘要

    uni-app在App侧的原生扩展插件&#xff0c;支持使用java、object-c等原生语言编写&#xff0c;从HBuilderX 3.6起&#xff0c;新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…