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

合肥欧派水泥预制品厂 2026/09/09 18:29:46

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

这些都是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. 实际应用:用类表示现实事物(如学生、汽车)

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

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

珠海网站建设孝感网站建设

母亲与孩子相处的真相:2025 年 12 月 27 日妈妈说话不吼,娃遇事不慌(甚至能反过来劝你“淡定”)妈妈柔声细语,娃见谁都笑

2026/06/30 12:51:03

无锡网站建设三亚网站建设

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等

2026/06/30 12:24:01

网站建设策划书娄底网站建设

第一章:Dify 1.11.1补丁升级概述Dify 1.11.1 是一次面向稳定性的补丁版本更新,主要聚焦于修复已知的安全漏洞、优化系统性能以及提升多租户环境下的资源隔离能

2026/06/30 10:32:50

福州网站建设宝安网站建设

LangChain 表达式语言(LCEL)的推出,标志着 AI 应用开发从“脚本时代”进入了“声明式编排时代”。很多人初看 LCEL,以为它只是

2026/06/30 11:28:25

建设部网站徐汇网站建设

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:M

2026/06/30 11:43:57

徐汇网站建设淮南网站建设

10分钟精通JByteMod-Beta:从零开始的Java字节码编辑实战【免费下载链接】JByteMod-BetaJava bytecode editor项目地址: https://gi

2026/06/30 13:28:06

潍坊网站建设黄浦网站建设

摘要1997年,“你有个伊妹儿(Email)。”这句广告词开启了中国企业的互联网沟通时代。从每分钟几十元的昂贵传真,到免费的数字信箱࿰

2026/06/30 12:55:03

网站建设计划书九江网站建设

AI故障预测系统告警策略:架构师如何设计“不吵人的预警”?5个实战技巧一、标题选项《告别告警轰炸!AI故障预测系统的“安静预警”设计指南》《架构师必看

2026/06/30 11:13:54

寿光网站建设嘉定网站建设

第一章:Shell脚本的基本语法和命令Shell脚本是Linux/Unix系统中自动化任务的核心工具,通过编写可执行的文本文件,用户能够组合命令、控制流程并处

2026/06/30 11:42:27