【Python使用】嘿马python基础入门全体系教程第9篇:拆包、交换变量的值,引用(一)【附代码文档】

举报
程序员一诺python 发表于 2025/09/05 16:10:57 2025/09/05
【摘要】 1.Python函数高级特性包括匿名函数(lambda语法格式、与普通函数区别、应用场景、参数形式)。2. 文件操作涵盖文件打开关闭、文件读写(write写数据、readlines读数据)。3. 面向对象编程包括类和对象(类定义、对象创建、类对象关系)、类构成、self关键字、对象属性操作、构造方法__init__、字符串方法__str__、多继承、子类重写、多态概念及应用、类

🏆🏆🏆教程全知识点简介:1.Python函数高级特性包括匿名函数(lambda语法格式、与普通函数区别、应用场景、参数形式)。2. 文件操作涵盖文件打开关闭、文件读写(write写数据、readlines读数据)。3. 面向对象编程包括类和对象(类定义、对象创建、类对象关系)、类构成、self关键字、对象属性操作、构造方法__init__、字符串方法__str__、多继承、子类重写、多态概念及应用、类属性和实例属性、静态方法和类方法。4. 异常处理涵盖异常传递(try嵌套、函数嵌套调用)、自定义异常抛出。5. 模块系统包括Python模块概念、import导入机制、学生管理系统应用。6. 计算机基础涉及计算机组成、硬件系统、程序处理机制、编程语言概念、Python介绍、解释器作用。7. Python语法基础包括注释分类、输出(格式化输出、转义字符、结束符)、输入语法、数据类型转换、运算符(算数运算符)。8. 控制流程涵盖判断语句(if语句、if-else、if-elif-else、三目运算、if嵌套)、循环语句(while循环、for循环、break和continue)。9. 数据容器包括字符串操作(rfind、partition、splitlines、isalpha、isdigit)、列表(列表格式、相关操作、循环遍历、嵌套)、元组、字典(键值访问)、公共方法、容器类型转换、推导式(列表推导式、多for循环)。10. 函数进阶涵盖函数返回值、函数文档说明、函数嵌套调用、变量作用域(局部变量、全局变量、global关键字)、拆包和变量交换、引用概念、可变不可变类型、函数使用注意事项


📚📚👉👉👉git仓库code.zip 直接get:   https://gitee.com/yinuo112/Backend/blob/master/Python/嘿马python基础入门全体系教程/note.md    🍅🍅

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

拆包、交换变量的值

<1> 对返回的数据直接拆包1>

def get_my_info():
    high = 178
    weight = 100
    age = 18
    return high, weight, age




# result = get_my_info()




# print(result)



my_high, my_weight, my_age = get_my_info()
print(my_high)
print(my_weight)
print(my_age)

总结:

  • 拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
  • 除了对元组拆包之外,还可以对列表、字典等拆包
In [17]: a, b = (11, 22)
  In [18]: a
  Out[18]: 11
  In [19]: b
  Out[19]: 22

  In [20]: a, b = [11, 22]
  In [21]: a
  Out[21]: 11
  In [22]: b
  Out[22]: 22

  In [23]: a, b = {"m":11, "n":22}  # 取出来的是key,而不是键值对
  In [24]: a
  Out[24]: 'm'
  In [25]: b
  Out[25]: 'n'

<2> 交换2个变量的值2>

[Python Package Index]

# 第1种方式




# a = 4




# b = 5




# c = 0




#




# c = a




# a = b




# b = c




#




# print(a)




# print(b)





# 第2种方式




# a = 4




# b = 5




# a = a+b  # a=9, b=5




# b = a-b  # a=9, b=4




# a = a-b  # a=5, b=4




# print(a)




# print(b)





# 第3种方式


a, b = 4, 5
a, b = b, a

print(a)
print(b)

引用(一)

想一想

[Starlette 文档]

>>> a = 1
>>> b = a
>>> b
1
>>> a = 2
>>> a
2
请问此时b的值为多少?
>>> a = [1, 2]
>>> b = a
>>> b
[1, 2]
>>> a.append(3)
>>> a
[1, 2, 3]
请问此时b的值又是多少?

引用

在python中,值是靠引用来传递来的。

** 可以用id()来判断两个变量是否为同一个值的引用。** 可以将id值理解为那块内存的地址标示。

>>> a = 1
>>> b = a
>>> id(a) 
13033816
>>> id(b)   # 注意两个变量的id值相同
13033816
>>> a = 2
>>> id(a)   # 注意a的id值已经变了
13033792
>>> id(b)   # b的id值依旧
13033816
>>> a = [1, 2]
>>> b = a
>>> id(a)
139935018544808
>>> id(b)
139935018544808
>>> a.append(3)
>>> a
[1, 2, 3]
>>> id(a)
139935018544808
>>> id(b)       # 注意a与b始终指向同一个地址
139935018544808

总结:

  • 之前为了更好的理解变量,咱们可以把a=100理解为变量a中存放了100,事实上变量a存储是100的引用(可理解为在内存中的一个编号)

引用(二)

引用当做实参

  • 可变类型与不可变类型的变量分别作为函数参数时,会有什么不同吗?
  • Python有没有类似C语言中的指针传参呢?
def test1(b):  # 变量b一定是一个局部变量,就看它指向的是谁?可变还是不可变
    b += b  # += 是直接对b指向的空间进行修改,而不是让b指向一个新的
    # b = b+b  # xx = xx+yyy 先把=号右边的结果计算出来,然后让b指向这个新的地方,不管原来b指向谁
                # 现在b一定指向这个新的地方



# a = [11, 22]


a = 100
test1(a)
print(a)

总结:

  • Python中函数参数是引用传递(注意不是值传递)
  • 对于不可变类型,因变量不能修改,所以运算不会影响到变量自身
  • 而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量

可变、不可变类型

图片无法加载

总结

  • 所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变
  • 可变类型有: 列表、字典、集合
  • 不可变类型有: 数字、字符串、元组

函数使用注意事项

1. 自定义函数

[BeautifulSoup 文档]

无参数、无返回值

def 函数名():
    语句

无参数、有返回值

def 函数名():
    语句
    return 需要返回的数值

注意:

  • 一个函数到底有没有返回值,就看有没有return,因为只有return才可以返回数据
  • 在开发中往往根据需求来设计函数需不需要返回值
  • 函数中,可以有多个return语句,但是只要执行到一个return语句,那么就意味着这个函数的调用完成

有参数、无返回值

def 函数名(形参列表):
    语句

注意:

  • 在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收
  • 参数列表中变量的个数根据实际传递的数据的多少来确定

有参数、有返回值

def 函数名(形参列表):
    语句
    return 需要返回的数值

函数名不能重复

  • 如果在同一个程序中出现了多个相同函数名的函数,那么在调用函数时就会出现问题,所以要避免名字相同
  • 还有一点 不仅要避免函数名之间不能相同,还要避免 变量名和函数名相同的,否则都会出现问题
  • 详细的讲解在python就业班中进行学习,此阶段只要注意这些问题即可

2. 调用函数

调用的方式为:

函数名([实参列表])

[wxPython 文档]

调用时,到底写不写 实参

  • 如果调用的函数 在定义时有形参,那么在调用的时候就应该传递参数

调用时,实参的个数和先后顺序应该和定义函数中要求的一致

如果调用的函数有返回值,那么就可以用一个变量来进行保存这个值

3. 作用域

在一个函数中定义的变量,只能在本函数中用(局部变量)

在函数外定义的变量,可以在所有的函数中使用(全局变量)

函数应用:学生管理系统

```python import time import os

定一个列表,用来存储所有的学生信息(每个学生是一个字典)

info_list = []

def print_menu(): print("---------------------------") print(" 学生管理系统 V1.0") print(" 1:添加学生") print(" 2:删除学生") print(" 3:修改学生") print(" 4:查询学生") print(" 5:显示所有学生") print(" 6:退出系统") print("---------------------------")

def add_new_info(): """添加学生信息""" global info_list

new_name = input("请输入姓名:")
new_tel = input("请输入手机号:")
new_qq = input("请输入:")

for temp_info in info_list:
    if temp_info['name'] == new_name:
        print("此用户名已经被占用,请重新输入")
        return  # 如果一个函数只有return就相当于让函数结束,没有返回值

# 定义一个字典,用来存储用户的学生信息(这是一个字典)
info = {}

# 向字典中添加数据
info["name"] = new_name
info["tel"] = new_tel
info["qq"] = new_qq

# 向列表中添加这个字典
info_list.append(info)

def del_info(): """删除学生信息""" global info_list

del_num = int(input("请输入要删除的序号:"))
if 0 <= del_num < len(info_list):
    del_flag = input("你确定要删除么?yes or no")
    if del_flag == "yes":
        del info_list[del_num]
else:
    print("输入序号有误,请重新输入")

def modify_info(): """修改学生信息""" global info_list

modify_num = int(input("请输入要修改的序号:"))
if 0 <= modify_num < len(info_list):
    print("你要修改的信息是:")
    print("name:%s, tel:%s, :%s" % (info_list[modify_num]['name'],
        info_list[modify_num]['tel'],info_list[modify_num]['qq']))
    info_list[modify_num]['name'] = input("请输入新的姓名:")
    info_list[modify_num]['tel'] = input("请输入新的手机号:")
    info_list[modify_num]['qq'] = input("请输入新:")
else:
    print("输入序号有误,请重新输入")

def search_info(): """查询学生信息""" search_name = input("请输入要查询的学生姓名:") for temp_info in info_list: if temp_info['name'] == search_name: print("查询到的信息如下:") print("name:%s, tel:%s, :%s" % (temp_info['name'], temp_info['tel'], temp_info['qq'])) break else: print("没有您要找的信息....")

def print_all_info(): """遍历学生信息""" print("序号\t姓名\t\t手机号\t\t") i = 0 for temp in info_list: # temp是一个字典 print("%d\t%s\t\t%s\t\t%s" % (i, temp['name'], temp['tel'], temp['qq'])) i += 1

def main(): """用来控制整个流程""" while True: # 1. 打印功能 print

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。