我的Python学习之旅:从基础到进阶

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Python是一门高级编程语言,以其简洁性和功能强大著称。本课程将带你深入理解Python的基础概念和核心特性,包括语法基础、数据类型、控制结构、函数、模块化编程、错误处理、文件操作和面向对象编程。通过详细的讲解和实例,帮助你构建坚实的Python编程基础,并在实践中不断进步。 记录自己学习 python 的过程。.zip

1. Python基础语法介绍

Python自1989年圣诞节由Guido van Rossum发起至今,经历了从初版到如今3.x版本的发展,不断演化为更高级和易于使用的编程语言。Python语言的设计哲学强调代码的可读性和简洁的语法,尤其是使用空格缩进的方式来定义代码块,而不是使用大括号或者关键字。这种语法不仅让Python代码显得更加清晰和优雅,也促进了代码的规范化。

在Python的基础语法中,需要了解的关键点包括变量赋值、基本数据类型、控制流语句(如if语句和循环),以及函数的定义和调用。例如,变量不需要明确声明类型,Python会在运行时自动推断;函数的定义则使用 def 关键字,并且每个语句都以冒号结束,其后的代码块通过缩进进行区分。

Python还提供了丰富的内置函数和数据结构,如列表(list)、字典(dict)和集合(set),这些都是构建Python程序不可或缺的部分。本章将带领初学者从零开始,逐步熟悉这些基本概念,为深入学习Python打下坚实的基础。

2. 主要数据类型讲解

Python语言以其丰富多样的数据类型而闻名,这些数据类型构成了编程的基石。在本章中,我们将深入探讨Python中的主要数据类型,理解它们的定义、特性和使用场景,为编程实践打下坚实的基础。

2.1 Python的基本数据类型

2.1.1 数字类型:整数和浮点数

Python支持多种数字类型,其中最常见的两种是整数(int)和浮点数(float)。

  • 整数 是没有小数部分的数字,它可以是任意大小的正数或负数,例如: -10 , 0 , 3 , 2000
  • 浮点数 是带有小数部分的数字,Python中的浮点数与现实世界中的实数相近,例如: -3.14 , 0.0 , 2.718

代码块可以演示如何创建和操作这两种类型的数字:

# 整数和浮点数的定义及基本操作
integer_value = 10          # 定义一个整数
float_value = 3.14          # 定义一个浮点数

print(integer_value + 5)    # 输出: 15
print(float_value * 2)      # 输出: 6.28
print(type(integer_value))  # 输出: <class 'int'>
print(type(float_value))    # 输出: <class 'float'>

在上述代码中,我们定义了两个变量 integer_value float_value ,分别赋值为一个整数和一个浮点数。通过 print 函数,我们输出了它们的值和类型。Python中数字的类型并不需要显式声明,而是根据赋值时的数值自动决定。

2.1.2 字符串:文本数据的处理

字符串(str)是Python中用于表示文本的数据类型,它是由字符组成的不可变序列。字符串可以通过单引号( ' )、双引号( " )或三引号( ''' """ )定义。

# 字符串的定义及基本操作
greeting = "Hello, World!"  # 使用双引号定义字符串
print(len(greeting))        # 输出字符串长度: 13
print(greeting[0])          # 输出字符串第一个字符: H
print(greeting.upper())     # 将字符串转换为大写: HELLO, WORLD!
print(greeting.find('W'))   # 查找字符'W'在字符串中的索引: 7

在上述示例中,我们通过 len 函数得到了字符串的长度,使用下标操作符 [] 访问了特定位置的字符,使用了 upper 方法将所有字符转换为大写,以及使用 find 方法查找特定字符在字符串中的位置。这些操作展示了字符串处理的基本方法。

2.2 复合数据类型

2.2.1 列表:有序的数据集合

列表(list)是Python中一种可变的数据类型,它可以存储一系列有序的元素,并且允许重复。列表中的元素可以通过下标进行索引,而且列表支持切片、拼接、插入和删除等操作。

# 列表的定义及基本操作
fruits = ["apple", "banana", "cherry"]  # 定义一个列表
print(fruits[0])                         # 输出第一个元素: apple
fruits.append("orange")                  # 在列表末尾添加元素
print(fruits.pop(2))                     # 移除并返回索引为2的元素: cherry
print(fruits)                            # 输出当前列表: ['apple', 'banana', 'orange']

列表的创建十分简单,只需用方括号将元素包围起来,并用逗号分隔。通过 append 方法可以在列表末尾添加新元素,而 pop 方法则用于移除并返回指定索引位置的元素。这展示了列表的基本操作和动态特性。

2.2.2 元组:不可变的数据集合

元组(tuple)与列表类似,也是有序的数据集合,但一旦创建,就不能被修改。元组在很多方面用作不可变列表,通常用于保护数据不被意外更改。

# 元组的定义及基本操作
point = (10, 20)  # 定义一个元组
print(point[0])   # 输出第一个元素: 10
# 下面的操作会引发错误,因为元组是不可变的
# point.append(30)

在上述示例中,我们创建了一个包含两个元素的元组 point 。尝试使用 append 方法修改元组会引发错误,因为元组不支持修改操作,这是它与列表最主要的区别。

2.2.3 字典:键值对的数据结构

字典(dict)是一种存储键值对的数据结构。字典中的每个键值对都用冒号 : 分割,不同的对之间用逗号 , 分隔,整个字典被包括在花括号 {} 中。

# 字典的定义及基本操作
person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(person['name'])         # 输出键name对应的值: Alice
person['age'] = 26            # 修改键age对应的值
print(person.get('email'))    # 输出None,因为键email不存在
person['email'] = '***'
print(person.keys())          # 输出字典中所有的键
print(person.values())        # 输出字典中所有的值

字典提供了快速查找、添加和修改键值对的方法。通过键名可以访问其对应的值,使用 get 方法则可以在键不存在时返回默认值 None 。通过 keys values 方法可以分别获得字典中所有键和所有值的列表。

2.2.4 集合:无序且不重复的元素集

集合(set)是一个无序的不重复元素集。集合中的元素可以是任意数据类型,但是不能是可变类型(例如列表、字典等)。集合支持并集、交集、差集等集合操作。

# 集合的定义及基本操作
numbers = {1, 2, 3}
fruits = {"apple", "banana", "cherry"}

print(numbers.union(fruits))     # 输出两个集合的并集: {1, 2, 3, 'apple', 'cherry', 'banana'}
print(numbers.intersection(fruits))  # 输出两个集合的交集: set()
print(numbers.difference(fruits))    # 输出两个集合的差集: {1, 2, 3}

在上述代码中,我们创建了两个集合 numbers fruits ,然后使用 union intersection difference 方法分别得到了它们的并集、交集和差集。这些集合操作在处理去重、查找共同元素等问题时非常有用。

2.3 数据类型转换和操作

2.3.1 类型转换

在Python中,数据类型转换指的是将一种数据类型转换为另一种数据类型。这可以通过内置函数实现,例如 int() float() str() list() tuple() dict() set() 等。

# 类型转换示例
num_str = "123"
num = int(num_str)            # 将字符串转换为整数
print(type(num))              # 输出: <class 'int'>

float_num = float(num)        # 将整数转换为浮点数
print(type(float_num))        # 输出: <class 'float'>

str_num = str(float_num)      # 将浮点数转换为字符串
print(type(str_num))          # 输出: <class 'str'>

在上述代码中,我们首先定义了一个字符串 num_str 并将其转换为整数,接着将该整数转换为浮点数,并最终将浮点数转换回字符串。通过使用 type 函数,我们验证了转换后变量的数据类型。

2.3.2 数据类型相关操作函数

Python为每种数据类型提供了丰富的操作函数,这些函数能够帮助我们更好地处理不同类型的数据。例如字符串的 split() join() ,列表的 sort() reverse() 等。

# 数据类型操作函数示例
name = "Alice, Bob, Carol"
names = name.split(", ")      # 使用逗号加空格分割字符串
print(names)                  # 输出: ['Alice', 'Bob', 'Carol']

names.sort()                   # 对列表进行排序
print(names)                  # 输出排序后的列表: ['Alice', 'Bob', 'Carol']

sorted_names = sorted(names)   # 创建一个已排序的列表副本
print(sorted_names)           # 输出: ['Alice', 'Bob', 'Carol']

reversed_names = names[::-1]  # 使用切片操作反转列表
print(reversed_names)         # 输出: ['Carol', 'Bob', 'Alice']

在上述示例中,我们首先用 split() 函数按逗号加空格分割了一个字符串,并使用 sort() sorted() 函数对列表进行排序。我们还演示了如何使用切片语法 [::-1] 来创建一个反转的列表副本。这些操作显示了如何利用操作函数灵活地处理数据类型。

在本章中,我们详细讲解了Python的主要数据类型,包括基本数据类型(数字类型和字符串)以及复合数据类型(列表、元组、字典和集合)。我们通过具体示例学习了它们的定义、特性、以及常用的操作。通过实践,你能够更好地理解这些类型在实际编程中的应用,为掌握更高级的编程技巧打下坚实的基础。在下一章中,我们将继续深入了解控制结构和逻辑判断,这将帮助我们编写出能够处理复杂逻辑的Python代码。

3. 控制结构与逻辑判断

3.1 条件语句

在编程中,条件语句允许我们基于条件的真假来执行不同的代码块。Python中条件语句的实现主要依赖于 if elif else 关键字。理解这些语句是编写任何控制逻辑的基础。

3.1.1 if语句

if 语句是条件语句中最基本的部分,它允许我们定义一个条件,并在该条件为真时执行一段代码。其基本语法如下:

if condition:
    # do something if condition is True

其中 condition 是一个布尔表达式,它的结果是 True False 。以下是一个简单的例子:

x = 10
if x > 5:
    print("x is greater than 5")

3.1.2 elif和else语句

elif else 语句用于处理 if 语句不满足时的情况。 elif 是“else if”的缩写,用来检查多个条件。而 else 语句是 if 语句的逆向条件,当所有前面的 if elif 都不满足时, else 块将被执行。下面是一个 if-elif-else 的综合例子:

x = 5
if x < 0:
    print("x is negative")
elif x == 0:
    print("x is zero")
else:
    print("x is positive")

3.1.3 条件表达式

在Python中,条件表达式(也称为三元运算符)是一种简洁的构建条件表达式的方式,通常用于基于条件为变量赋予不同的值。其基本语法是:

a if condition else b

这里,如果 condition 为真,则表达式的结果是 a ;否则,结果是 b 。让我们通过一个例子来理解它:

max_value = x if x > y else y

如果 x 大于 y max_value 将被赋值为 x ,否则赋值为 y

3.2 循环语句

循环语句允许我们重复执行一段代码,直到给定的条件不再满足。在Python中,有 for 循环和 while 循环两种形式,它们在不同的场景下发挥作用。

3.2.1 for循环

for 循环用于遍历序列(如列表、元组、字典、集合或字符串)中的每个元素。基本语法如下:

for element in iterable:
    # do something with element

在每次迭代中, element 变量会被设置为序列中的下一个值,直到遍历完所有元素。下面是使用 for 循环遍历列表的例子:

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

3.2.2 while循环

while 循环会持续执行代码块,直到给定的条件变为 False 。基本语法如下:

while condition:
    # do something

condition True 时, while 循环体内的代码将被执行。一旦 condition 变为 False ,循环将终止。这个过程不断重复,直到条件不再满足。让我们看一个简单的例子:

count = 0
while count < 5:
    print(count)
    count += 1

3.2.3 循环控制语句:break和continue

Python提供了两个循环控制语句: break continue break 语句用于立即退出循环,即使循环条件没有变为 False 或循环体没有完全执行完毕。 continue 语句则是用来跳过当前循环的剩余代码,并继续执行下一次迭代。

for i in range(5):
    if i == 3:
        break  # Exit the loop when i is 3
    print(i)

在这个例子中, break 语句会在 i 等于3时执行,导致 for 循环立即停止。

for i in range(5):
    if i % 2 == 0:
        continue  # Skip the rest of the loop if i is even
    print(i)

在这个例子中,当 i 是偶数时, continue 语句会执行,跳过打印操作,直接进行下一次循环迭代。

3.3 逻辑判断

逻辑判断涉及布尔逻辑,它是处理复杂条件的基础。Python中的布尔逻辑和逻辑运算符是编写条件语句和循环语句的关键。

3.3.1 布尔逻辑

在Python中,布尔类型( bool )是 True False 。布尔值可以用在条件语句中,并通过逻辑运算符( and or not )组合来表达更复杂的条件。

3.3.2 逻辑运算符

逻辑运算符包括:

  • and :如果两个条件都是 True ,则整个表达式的结果是 True
  • or :如果至少有一个条件是 True ,则整个表达式的结果是 True
  • not :对布尔值取反,如果表达式为 True ,则 not 表达式的结果是 False

使用逻辑运算符的例子:

a = 5
b = 10
c = 15
if a < b and b < c:
    print("b is between a and c")

在这个例子中,只有当 b 小于 a b 小于 c 时,条件才为真,进而执行 print 语句。

这个章节的内容深化了读者对Python控制结构的理解,我们从条件语句到循环语句再到逻辑判断,每一个部分都详尽地阐述了其用法、特点以及实际应用案例。对于有志于深入学习Python的读者来说,本章内容是掌握编写有效Python代码不可或缺的基础。

4. 函数定义与使用

函数是Python编程中不可或缺的组件,它们帮助我们组织和复用代码。通过定义函数,我们能够将重复性的任务封装在独立的代码块中,提高了代码的可读性和可维护性。在这一章节中,我们将深入了解如何定义和使用函数,包括参数传递、返回值以及作用域的概念。

4.1 函数的定义与调用

4.1.1 def关键字和函数名

在Python中,函数通过关键字 def 来定义,紧接着是函数名和一对圆括号,括号内可以包含参数。函数体则以冒号开始,并且必须缩进。下面是一个简单的函数定义示例:

def greet(name):
    print(f"Hello, {name}!")

def 是定义函数的关键字, greet 是函数名, name 是形式参数。函数名 greet 用于后续调用此函数。

4.1.2 形式参数与实际参数

当调用函数时,我们需要提供实际参数(实参),它们会传递给函数内部的形式参数(形参)。例如:

greet("Alice")

在这里, "Alice" 是一个实际参数,它传递给了 greet 函数内部的形式参数 name

4.2 参数类型和返回值

4.2.1 位置参数

位置参数是最常见的参数类型,它们必须严格按照函数定义时的顺序传递。例如:

def add(a, b):
    return a + b

result = add(3, 4)

在上面的例子中, a b 是位置参数。

4.2.2 关键字参数

关键字参数允许在调用函数时使用参数名来指定实参,这样就不需要严格按照定义时的位置顺序传递参数。

def increment(value, step=1):
    return value + step

increment(step=2, value=5)

这里 step value 都是通过名称来传递的。

4.2.3 默认参数

在定义函数时,可以为参数指定默认值。如果调用者没有提供该参数,函数将使用默认值。

def greet(name, message="Hello"):
    print(f"{message}, {name}!")

greet("Bob")

如果不指定 message ,将默认使用 "Hello"

4.2.4 可变参数

有时候我们需要处理不确定数量的参数,这时可以使用可变参数 *args (位置参数)和 **kwargs (关键字参数)。

def sum_all(*args, **kwargs):
    total = 0
    for num in args:
        total += num
    for key in kwargs:
        total += kwargs[key]
    return total

sum_all(1, 2, 3, a=4, b=5)

*args 会收集所有未明确赋给形参的位置参数, **kwargs 会收集所有未明确赋给形参的关键字参数。

4.2.5 返回值和None

函数可以通过 return 语句返回值,如果函数没有明确返回值,则默认返回 None

def square(number):
    return number ** 2

result = square(4)
print(result)  # Output: 16

在上面的 square 函数中,返回了 number 的平方值。

4.3 函数的作用域和文档

4.3.1 局部作用域和全局作用域

在Python中,变量可以是局部的或全局的。局部变量仅在函数内部可用,而全局变量则在整个程序中都可用。

x = 10  # 全局变量

def function局部变量():
    y = 5
    print(x, y)

function局部变量()
print(x, y)  # 这将抛出一个错误,因为y是局部变量且不在作用域中

4.3.2 作用域解析

当我们在函数内引用变量时,Python会首先查找该变量是否为局部变量,若不是,则查找它是否为全局变量。如果两者都不是,Python会抛出一个 NameError

4.3.3 函数文档字符串(docstrings)

文档字符串是函数体内的第一行字符串,用于说明函数的功能,可以通过 __doc__ 属性访问。

def say_hello():
    """这是一个简单的函数,用于打印问候语。"""
    print("Hello!")

print(say_hello.__doc__)

在上面的例子中, "这是一个简单的函数,用于打印问候语。" 是函数 say_hello 的文档字符串。

5. 模块化编程技巧

模块化编程是提高代码复用性、可维护性和可读性的关键。在Python中,模块和包是组织代码的基石,它们不仅有助于将复杂的程序分解为更小的部分,还能在多个程序之间共享代码。本章将详细讲解如何创建和使用模块,以及如何利用Python强大的包系统。

5.1 模块的创建与使用

5.1.1 导入模块

在Python中,模块可以看作是一个包含Python定义和语句的文件。一个 .py 文件就是一个模块,模块名即为文件名。为了使用模块中的函数、类或变量,需要先导入模块。

导入模块的标准方法如下:

import module_name

其中 module_name 是模块文件名(不包含 .py 扩展名)。一旦导入,就可以使用模块中的所有公共名称。比如,使用标准库中的 math 模块进行数学计算:

import math
result = math.sqrt(16)
print(result)  # 输出: 4.0

5.1.2 创建自定义模块

创建自定义模块很简单,只需将Python代码保存到一个 .py 文件中即可。假设有一个名为 tools.py 的文件,内容如下:

# tools.py
def greet(name):
    return f"Hello, {name}!"

在一个Python脚本中,可以这样导入并使用它:

import tools
print(tools.greet("Alice"))  # 输出: Hello, Alice!

5.1.3 模块的命名空间

模块作为命名空间,有助于避免名称冲突。当导入一个模块时,不会自动导入该模块内的所有内容,这有助于防止命名空间污染。

例如:

# tools.py
def greet(name):
    return f"Hello, {name}!"

greeting = "Hi there!"

即便在另一个脚本中导入了 tools 模块, greeting 变量也不会影响到当前脚本的命名空间:

import tools

print(greeting)  # NameError: name 'greeting' is not defined
print(tools.greet("Bob"))  # 输出: Hello, Bob!

5.2 包的概念与结构

包是一种使用“点模块名称”来组织模块的方式。一个包可以包含多个模块,并且包内可以有嵌套的子包。

5.2.1 包的定义与初始化

包实际上是一个包含 __init__.py 文件的目录,这个文件可以是空的,用来标记Python可以将该目录视为包。目录内还可能包含其他模块或子包。

例如,创建一个名为 my_package 的包:

my_package/
    __init__.py
    module1.py
    module2.py

__init__.py 中,可以初始化包的属性和函数,当模块被导入时自动执行。

5.2.2 包内的模块组织

在包内部,模块可以按照功能或主题组织。例如,一个游戏项目可能包含如下结构:

game/
    __init__.py
    /characters
        __init__.py
        player.py
        enemy.py
    /utils
        __init__.py
        drawing.py
        config.py

5.2.3 包的导入和使用

导入包的语法与导入模块类似,但是需要使用点号 . 来指定路径:

from my_package.module1 import my_function
my_function()

5.3 标准库与第三方模块

5.3.1 Python标准库简介

Python的标准库是一组与Python解释器一起安装的模块和包,它们提供各种功能,无需额外安装。例如, os 模块可以与操作系统交互, random 模块可以生成随机数。

使用标准库可以简化许多常见的任务。例如,使用 random 模块生成一个随机整数:

import random
number = random.randint(1, 10)
print(number)

5.3.2 使用第三方模块

第三方模块由社区成员编写并提供给其他用户使用。它们经常用于网络编程、数据分析、机器学习等领域。在Python中,安装第三方模块通常使用 pip 工具。

例如,安装 requests 模块,用于处理HTTP请求:

pip install requests

安装完毕后,可以像使用标准库一样使用第三方模块:

import requests
response = requests.get('***')

5.3.3 虚拟环境和包管理工具

为了避免项目间的依赖冲突,推荐使用虚拟环境。Python通过 venv 模块提供虚拟环境支持,可以创建隔离的Python环境。

创建和激活虚拟环境:

# 创建虚拟环境
python -m venv myenv

# 激活虚拟环境(Windows)
myenv\Scripts\activate

# 激活虚拟环境(macOS/Linux)
source myenv/bin/activate

在虚拟环境中安装包:

pip install package_name

使用虚拟环境和 pip ,可以确保每个项目都有一个独立的依赖环境,从而避免版本冲突和依赖问题。

在这一章中,我们了解了模块化编程的基础知识,包括如何导入和使用模块、创建自定义模块、理解命名空间的概念,以及如何使用Python的标准库和第三方模块。模块化编程的实践,可以大幅提高开发效率和代码质量。接下来,我们将深入探讨Python的面向对象编程范式,将这一旅程带向新的高度。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Python是一门高级编程语言,以其简洁性和功能强大著称。本课程将带你深入理解Python的基础概念和核心特性,包括语法基础、数据类型、控制结构、函数、模块化编程、错误处理、文件操作和面向对象编程。通过详细的讲解和实例,帮助你构建坚实的Python编程基础,并在实践中不断进步。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值