网站建设系统长春网站建设

南宁市创知电子科技有限公司 2026/09/09 19:10:36

格式化输出的三种类型不太明白,不定长参数的打包与解包,分不清一颗星和两颗星,以及解包的时候如何解包?,递归函数中的循环不太会,类与对象的关系不太明白,在方法体中,有时分不清类成员与实例成员的区别?

这些都是Python学习中的常见困惑,我来逐一解释清楚:

一、格式化输出的三种类型

1.% 格式化(传统方法)

name="张三"age=20print("姓名:%s,年龄:%d"%(name,age))# 常用占位符:%s字符串,%d整数,%f浮点数

2.str.format()(Python 2.6+)

name="张三"age=20print("姓名:{},年龄:{}".format(name,age))print("姓名:{name},年龄:{age}".format(name=name,age=age))

3.f-string(Python 3.6+ 推荐)

name="张三"age=20print(f"姓名:{name},年龄:{age}")print(f"明年年龄:{age+1}")

二、不定长参数的打包与解包

单星 * 的作用

# 1. 打包:将多个位置参数打包成元组deffunc(*args):# args是元组print(args)func(1,2,3)# 输出:(1, 2, 3)# 2. 解包:将可迭代对象解包为位置参数defadd(a,b,c):returna+b+c numbers=[1,2,3]print(add(*numbers))# 等价于 add(1, 2, 3)

双星 ** 的作用

# 1. 打包:将多个关键字参数打包成字典deffunc(**kwargs):# kwargs是字典print(kwargs)func(name="张三",age=20)# 输出:{'name': '张三', 'age': 20}# 2. 解包:将字典解包为关键字参数defperson(name,age):print(f"{name}今年{age}岁")info={"name":"张三","age":20}person(**info)# 等价于 person(name="张三", age=20)

综合示例

deffunc(a,b,*args,**kwargs):print(f"a={a}, b={b}")print(f"args={args}")# 多余的位置参数print(f"kwargs={kwargs}")# 多余的关键字参数func(1,2,3,4,5,x=10,y=20)# a=1, b=2# args=(3, 4, 5)# kwargs={'x': 10, 'y': 20}

三、递归函数的循环理解

递归三要素

deffactorial(n):# 1. 基本情况(终止条件)ifn==1:return1# 2. 递归调用(向基本情况靠近)# 3. 返回值处理returnn*factorial(n-1)

理解递归调用栈

defcountdown(n):ifn<=0:print("结束!")else:print(f"当前值:{n}")countdown(n-1)# 递归调用print(f"返回层:{n}")countdown(3)# 输出:# 当前值:3# 当前值:2# 当前值:1# 结束!# 返回层:1# 返回层:2# 返回层:3

四、类与对象的关系

比喻理解

  • = 设计图纸(描述)
  • 对象= 根据图纸建造的房子(具体实例)
# 类:描述学生这类事物的共同特征classStudent:# 类属性:所有学生共享的属性school="XX大学"def__init__(self,name,age):# 实例属性:每个学生特有的self.name=name# 实例属性self.age=age# 实例属性# 对象:具体的学生stu1=Student("张三",20)# stu1是一个对象stu2=Student("李四",21)# stu2是另一个对象

五、类成员 vs 实例成员

关键区别

classMyClass:# 类属性:所有实例共享class_attr="我是类属性"def__init__(self,value):# 实例属性:每个实例独有self.instance_attr=value# 实例方法:操作实例属性definstance_method(self):print(f"访问实例属性:{self.instance_attr}")print(f"访问类属性:{self.class_attr}")@classmethoddefclass_method(cls):print(f"类方法访问类属性:{cls.class_attr}")# print(self.instance_attr) # 错误!不能访问实例属性# 测试obj1=MyClass("对象1")obj2=MyClass("对象2")# 类属性访问print(MyClass.class_attr)# 通过类访问print(obj1.class_attr)# 通过对象访问print(obj2.class_attr)# 所有对象看到的值一样# 修改类属性(影响所有实例)MyClass.class_attr="修改后的类属性"print(obj1.class_attr)# 输出:修改后的类属性print(obj2.class_attr)# 输出:修改后的类属性# 实例属性访问print(obj1.instance_attr)# 输出:对象1print(obj2.instance_attr)# 输出:对象2# 修改实例属性(只影响当前实例)obj1.instance_attr="修改对象1"print(obj1.instance_attr)# 输出:修改对象1print(obj2.instance_attr)# 输出:对象2(不变)

记忆技巧

特征类成员实例成员
定义位置类内部,方法外部__init__或实例方法内
访问方式类名.属性self.属性self.属性
存储位置类对象中实例对象中
修改影响影响所有实例只影响当前实例
内存消耗一份,所有实例共享每个实例单独存储

练习建议

  1. 写代码验证:创建类,修改类属性和实例属性,观察变化
  2. 画图理解:画出类和对象的内存关系图
  3. 实际应用:用类表示现实事物(如学生、汽车)

需要我针对某个点进一步解释吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

塘沽网站建设吉林省建设厅网站

Excalidraw如何优化首屏渲染性能?懒加载策略解析在如今远程协作日益频繁的背景下,轻量、高效的在线白板工具成为团队沟通和创意表达的重要载体。Excalidraw 以其

2026/06/30 14:18:09

都江堰网站建设长春网站建设

Chrome网页搜索替换插件:智能文本编辑的革命性工具【免费下载链接】chrome-extensions-searchReplace项目地址: https://gitcode.com/g

2026/06/30 14:04:38

怎么建设网站南通网站建设

一劳永逸的Yuedu书源数据备份全攻略【免费下载链接】Yuedu📚「阅读」APP 精品书源(网络小说)项目地址: https://gitcode.com/g

2026/06/30 09:55:17

门户网站建设长沙企业网站建设

第一章:大模型训练显存爆炸的根源剖析在深度学习模型日益庞大的今天,显存管理已成为制约大模型训练效率的核心瓶颈。显存“爆炸”并非硬件故障,而是由于模型参数、梯度

2026/06/30 12:23:01

宝安网站建设福田网站建设

Firebase Admin PHP SDK:企业级后端开发的终极解决方案【免费下载链接】firebase-phpUnofficial Firebase Admin SDK for PH

2026/06/30 12:30:02

天津网站建设大庆网站建设

GPT-OSS-20B 与 ChatGPT:一场关于控制、成本与智能的深度对话在企业开始将大模型嵌入核心业务流程的今天,一个看似简单却日益关键的问题浮现出来:

2026/06/30 11:12:54

公司的网站建设网站建设培训

Qwen3Guard-Gen-8B与OrientDB图数据库整合:关系网络分析在当今AI内容爆发式增长的背景下,社交平台、智能客服和在线教育等高交互系统正面临前所未有的安全

2026/06/30 14:18:39

牡丹江网站建设网站建设 重庆

电池超级电容混合储能系统能量管理超级电容matlab simulink储能模型仿真,能量管理蓄电池充放电模型 相关参考。最近在搞混合储能系统仿真,发现Matlab Simu

2026/06/30 14:18:39

无锡网站建设商务网站建设

在Windows系统中,全局描述符表(GDT)和局部描述符表(LDT)都是用于内存段管理的机制,但它们在系统中的作用

2026/06/30 10:46:52