news 2026/3/20 9:55:10

python初学时很多内容不懂,汇总

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python初学时很多内容不懂,汇总

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

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

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

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

2026趋势:AI驱动性能优化

AI正重构性能测试的底层逻辑‌ 到2026年&#xff0c;AI已不再是软件测试中的“辅助工具”&#xff0c;而是‌性能优化的决策中枢‌。传统基于固定脚本、人工调参、静态基线的性能测试模式&#xff0c;正被‌自适应、可解释、低成本的AI驱动体系‌全面取代。测试工程师的角色&a…

作者头像 李华
网站建设 2026/3/14 4:55:45

CFD:针对离散计算部分用OpenMP多线程化,如何选择最优线程数

文章目录一、基本原则二、实用估计方法方法 1&#xff1a;基于经验公式&#xff08;适用于均匀网格&#xff09;方法 2&#xff1a;基于内存带宽瓶颈估计方法 3&#xff1a;运行时自适应调优&#xff08;推荐&#xff09;三、OpenMP 设置建议四、额外建议总结在 OpenMP 并行化基…

作者头像 李华
网站建设 2026/3/16 13:01:02

网络安全核心技术一网打尽:从常见攻防手段到风险防范的全景图

伴随着互联网的发展&#xff0c;它已经成为我们生活中不可或缺的存在&#xff0c;无论是个人还是企业&#xff0c;都离不开互联网。正因为互联网得到了重视&#xff0c;网络安全问题也随之加剧&#xff0c;给我们的信息安全造成严重威胁&#xff0c;而想要有效规避这些风险&…

作者头像 李华
网站建设 2026/3/16 5:38:30

收藏!AI工程师分2派?一文分清传统算法与大模型应用,小白转行必看

提到AI工程师&#xff0c;不少人第一反应就是“写代码、调模型的技术大牛”。但其实AI工程师圈子里藏着两大核心分支——传统算法工程师和AI大模型应用开发工程师。简单来说&#xff0c;前者负责“让模型变聪明”&#xff0c;后者专注“让聪明的模型落地能用”&#xff0c;两者…

作者头像 李华