Python编程基础教程:函数和模块的使用

发布于:2023-10-25 ⋅ 阅读:(75) ⋅ 点赞:(0)

作者:禅与计算机程序设计艺术

1.背景介绍

概述

“Python”是一种面向对象的、解释型的、动态语言,具有强大的功能特性及简单易用性。作为一种高级语言,它可以用来进行Web开发、科学计算、系统脚本等领域的快速开发,特别适合数据分析和机器学习方面的应用场景。在Python中有丰富的标准库和第三方库可供选择,也支持多种编程模式(面向过程、命令式、函数式),能够灵活应对各种项目需求。因此,掌握Python编程技术至关重要。

本教程将对Python编程中的一些基本语法知识、数据结构和算法、模块、类等关键概念进行讲解,并提供详实的代码实例帮助读者理解这些知识点的运用。希望通过本教程,读者能够了解到如何利用Python进行编程以及遇到的坑、技巧、注意事项等知识,从而在实际工作中有所收获。

本教程内容

本教程的内容包括:

  1. 函数概述
  2. 变量作用域
  3. 数据类型
  4. 流程控制
  5. 列表、字典和集合
  6. 文件I/O
  7. 模块和包管理
  8. 异常处理
  9. 输入输出
  10. 正则表达式

2.核心概念与联系

函数概述

函数就是封装好的代码片段,可以通过函数名调用执行该段代码。函数分为两大类:内置函数和自定义函数。内置函数指的是Python内置的函数,例如print()函数用于打印字符串;自定义函数则是在程序运行前定义的函数。自定义函数一般由用户自己编写,它的优点是可以提高代码的复用性和可维护性。

函数的基本形式如下:

def 函数名(参数):
    函数体
    return 返回值

其中函数名是用户定义的函数名称,参数是传递给函数的参数,函数体是函数要执行的逻辑语句,return返回值是函数执行结束后返回的值。函数可以有无数个参数,多个参数以逗号隔开即可。函数也可以没有参数。

函数声明:函数的声明语句的格式如下:

def function_name():
    '''
    function description and comments here...
    '''
    #function body goes here...
  • def关键字表示定义函数
  • function_name是函数的名称,命名规则遵循标识符的命名规范。
  • ()括号里列出了函数的参数,如果没有参数,则为空。
  • :冒号表示函数头部结束,后续跟着函数的说明注释和代码。

函数调用:函数的调用语句的格式如下:

function_name(argument1, argument2,...)
  • function_name是已定义的函数名。
  • argument1, argument2,...是函数所需的各个参数,个数不限。
  • 当函数有返回值时,可以直接赋值给一个变量。

函数参数:函数的参数有以下几种类型:

  • 位置参数:在调用函数时按顺序传入参数,需要指定参数的类型。
  • 默认参数:在定义函数时为参数设置默认值,调用函数时可以省略该参数,但如果未指定该参数,则会使用默认值。
  • 可变参数:定义时在参数名前加上一个星号*,表示这个位置的参数可以接受零个或多个值。
  • 关键字参数:关键字参数通过参数名指定参数值,在定义函数时在参数名前加上两个星号**,代表接收任意数量的关键字参数。

函数参数总结:

参数类型 描述
位置参数 指定位置参数的值。
默认参数 如果函数调用时没有给定参数,则使用默认值。
可变参数 可以传入任意多个参数,而且可以在函数内部通过一个元组接受。
关键字参数 通过参数名指定参数值,在调用时可使用任意顺序的关键字参数。
组合参数 将以上两种参数结合使用。
任意参数 以元组的形式传递任意数量的参数,参数名不要重复。
不定长参数 装饰器函数可以用*args来接收除关键字参数外的所有参数。
不定长关键字参数 装饰器函数可以用**kwargs来接收所有关键字参数。
函数注解 在函数定义中添加注解,能够让阅读者更容易理解函数的用法。

变量作用域

变量作用域是指变量在哪些区域或者范围内有效。Python 中存在全局变量和局部变量。

  • 全局变量:使用 global 关键字声明的变量拥有全局作用域,可以在整个程序范围内访问。

  • 局部变量:如果变量在函数体或其他作用域内声明,则拥有局部作用域,只能在当前函数体内访问,外部无法引用。

局部变量和全局变量之间的区别如下:

变量类型 生命周期 访问方式
全局变量 整个程序期间都存在 使用全局变量名称就可以直接访问
局部变量 函数体执行完毕后销毁 需要使用 global 关键字才能访问

数据类型

Python 有五种基本的数据类型:

  • 整型(int):整数,如 1, -2, 3, 45, 0, etc。
  • 浮点型(float):浮点数,如 3.14, -9.01, 1e-10, etc。
  • 布尔型(bool):布尔值,只有两个值 True 和 False。
  • 字符型(str):字符串,如 "hello", 'world', "1 + 2 = 3"。
  • 空值(NoneType):空值,只有一个值 None。

Python 中的数据类型转换可以使用 type()isinstance() 方法实现。

数据类型 转换方法
整型 int(), str().isdigit() 判断是否为数字
浮点型 float(), str().replace(',', '.').isdigit() 判断是否为数字
布尔型 bool()
字符型 str()
空值 type(None)

流程控制

Python 中的流程控制有三种结构:条件语句(if...elif...else)、循环语句(for...in...while)、分支语句(try...except...finally)。

if...elif...else

条件语句是判断条件是否成立,然后根据条件结果决定是否执行相应的代码。Python 的条件语句由 if, elif(可选),else(可选) 三个关键字组成。

num = 10
if num > 0:
    print("Positive number")
elif num == 0:
    print("Zero")
else:
    print("Negative number")

示例代码中,首先判断 num 是否大于 0,如果是的话就输出 "Positive number",否则判断 num 是否等于 0,如果是的话就输出 "Zero",最后输出 "Negative number"。

for...in...while

循环语句允许迭代遍历某一数据集,比如列表、字典、集合,并按照一定顺序依次访问每一项。Python 的循环语句由 forinwhile 三个关键字组成。

for...in...range()

range() 函数用于生成一个整数序列,其中的元素从指定的第一个值(默认为0)开始,到指定的第二个值(不包括)结束,步长为 1(默认为1)。

for i in range(1, 10):
    print(i)

示例代码输出 1 到 9。

for...in...enumerate()

enumerate() 函数用于枚举某个可迭代对象,返回一个索引-元素对,也就是 (index, value) 的形式。

fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits):
    print(index+1, fruit)

示例代码输出 1 apple 2 banana 3 orange。

while...break...continue

while 循环用于一直循环执行某段代码,直到满足某个条件才退出循环。当满足条件时,可以通过 break 跳出循环,通过 continue 跳过剩余的语句执行下一次循环。

count = 0
while count < 5:
    count += 1
    if count % 2 == 0:
        continue
    else:
        print(count)
        if count == 3:
            break

示例代码中,先初始化 count 为 0,然后用 while 循环检查 count 是否小于 5,如果不是则继续执行 count += 1,如果是偶数,则用 continue 跳转到下一次循环;如果不是偶数,则输出 count 的值,并且判断 count 是否等于 3,如果是的话则用 break 终止循环。

try...except...finally

分支语句允许捕获并处理异常。Python 的分支语句由 tryexcept(可选),finally(可选) 三个关键字组成。

try...except

try 语句用于尝试执行一段代码,如果发生错误,则转入 except 语句进行处理,如果没有错误,则执行 except 语句之后的代码。

try:
    a = 1 / 0
    b = [1, 2, 3]
    c = b[3]
except ZeroDivisionError as e:
    print("division by zero:", e)
except IndexError as e:
    print("list index out of range:", e)
except Exception as e:
    print("unknown error:", e)

示例代码中,分别尝试除以 0、取不存在的元素、其他错误,并分别处理。

try...except...finally

finally 语句用于总是执行的语句,不管是否发生异常,都会执行该语句。

try:
    f = open('test.txt')
    data = f.read()
except IOError:
    print('File not found!')
except Exception as e:
    print('Error:', e)
finally:
    if f:
        f.close()

示例代码中,打开文件,读取内容,关闭文件,如果发生错误则打印提示信息,无论是否出错都会执行 finally 语句,释放资源。

列表、字典和集合

Python 提供了列表、字典和集合三种容器类型,用于存储和组织数据。

列表

列表是一种有序集合,元素之间用逗号分隔,且可以容纳不同类型的元素。列表支持数字索引和切片运算。

fruits = ['apple', 'banana', 'orange']
numbers = [1, 2, 3, 4, 5]
mixed = ['a', 1, 'b', {'x': 1}, lambda x: x+1]
创建列表

列表是创建后便可修改的对象,可以直接使用 [] 来表示。

empty_list = []
filled_list = list([1, 2, 3])

示例代码中,创建了一个空列表和一个初始值为 [1, 2, 3] 的列表。

添加元素

使用 append() 方法可以添加单个元素到列表末尾,使用 extend() 方法可以一次添加多个元素到列表末尾。

fruits.append('peach')
fruits.extend(['grape','mango'])
删除元素

使用 remove() 方法可以删除列表中某个值的第一次出现的元素,使用 pop() 方法可以删除指定位置的元素并返回值。

numbers.remove(3)
last_fruit = fruits.pop(-1)

示例代码中,移除列表 numbers 中的 3,弹出列表 fruits 末尾的元素。

更新元素

使用 insert() 方法可以插入指定位置的元素,使用 sort() 方法可以排序列表元素。

fruits.insert(1, 'pineapple')
fruits.sort()

示例代码中,在列表 fruits 中插入 'pineapple',并对列表 fruits 进行升序排列。

查询元素

使用 index() 方法可以查询某个值的第一次出现的索引,使用 count() 方法可以查询某个值的出现次数。

first_idx = numbers.index(2)
elem_cnt = fruits.count('banana')

示例代码中,获取列表 numbers 中第一个 2 的索引和列表 fruits 中 'banana' 的出现次数。

分片运算

列表支持切片运算,使用 [start:end:step] 的方式指定切片起始位置、结束位置和步长。

sublist = mixed[::2]

示例代码中,创建一个包含 mixed 中所有奇数索引的子列表。

字典

字典是一种映射关系表,由键和值组成,键必须是唯一的,值可以是相同类型或者不同类型。字典不记录元素的顺序。

student = {
    'name': 'John Doe',
    'age': 20,
   'score': {
       'math': 90,
        'english': 80
    }
}
创建字典

字典是创建后便可修改的对象,可以直接使用 {} 来表示。

empty_dict = {}
filled_dict = dict({'key1': 'value1', 'key2': 2})

示例代码中,创建了一个空字典和一个初始值为 { 'key1': 'value1', 'key2': 2 } 的字典。

添加元素

使用 update() 方法可以更新字典,如果键已存在,则覆盖旧值。

student['gender'] ='male'
student['score']['history'] = 85

示例代码中,向字典 student 添加新字段 'gender' 和新的键值对 'history:85'。

删除元素

使用 del 语句可以删除字典中的元素。

del student['age']
del student['score']['math']

示例代码中,删除字典 student 中键 'age' 和键'math'。

查询元素

使用 get() 方法可以查询某个键对应的值,如果不存在,则返回 None

name = student.get('name')
grade = student.get('grade', 'unknown')

示例代码中,获取字典 student 中键 'name' 的值,如果不存在则返回 'unknown'。

集合

集合是一个无序不重复集合,主要用于快速查找和删除重复元素。

nums = set([1, 2, 3, 3, 2, 1])
创建集合

集合也是创建后便可修改的对象,可以直接使用 set() 来表示。

empty_set = set()
filled_set = set({1, 2, 3})

示例代码中,创建了一个空集合和一个初始值为 {1, 2, 3} 的集合。

操作集合

集合的操作包括添加元素(add())、删除元素(remove())、求交集(intersection())、求并集(union())和差集(difference())。

nums.add(4)
nums.remove(2)
result = nums & {3, 4, 5}

示例代码中,向集合 nums 中添加 4、删除 2、求交集,得到 {3}

修改集合

集合不可修改,只能创建新集合来保存修改后的结果。

本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到