Python基础10 反过头来看看

本文深入探讨Python中的对象概念,通过内置函数dir()和help()解析list类的各种属性及方法,介绍如何自定义运算符,以及如何利用Python强大的标准库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

 

从最初的“Hello World”,走到面向对象。该回过头来看看,教程中是否遗漏了什么。

我们之前提到一句话,"Everything is Object". 那么我们就深入体验一下这句话。

 

需要先要介绍两个内置函数,dir()help()

dir()用来查询一个类或者对象所有属性。你可以尝试一下

>>>print dir(list)

help()用来查询的说明文档。你可以尝试一下

>>>print help(list)

(list是Python内置的一个类,对应于我们之前讲解过的列表)

 

list是一个类

在上面以及看到,表是Python已经定义好的一个类。当我们新建一个表时,比如:

>>>nl = [1,2,5,3,5]

实际上,nl是类list的一个对象。

 

实验一些list的方法:

>>>print nl.count(5)       # 计数,看总共有多少个5

>>>print nl.index(3)       # 查询 nl 的第一个3的下标

>>>nl.append(6)            # 在 nl 的最后增添一个新元素6

>>>nl.sort()               # 对nl的元素排序

>>>print nl.pop()          # 从nl中去除最后一个元素,并将该元素返回。

>>>nl.remove(2)            # 从nl中去除第一个2

>>>nl.insert(0,9)          # 在下标为0的位置插入9

总之,list是一个类。每个列表都属于该类。

Python补充中有list常用方法的附录。

 

运算符是特殊方法

使用dir(list)的时候,能看到一个属性,是__add__()。从形式上看是特殊方法(下划线,下划线)。它特殊在哪呢?

这个方法定义了"+"运算符对于list对象的意义,两个list的对象相加时,会进行的操作。

>>>print [1,2,3] + [5,6,9]

 

运算符,比如+, -, >, <, 以及下标引用[start:end]等等,从根本上都是定义在类内部的方法

 

尝试一下

>>>print [1,2,3] - [3,4]

会有错误信息,说明该运算符“-”没有定义。现在我们继承list类,添加对"-"的定义

class superList(list):
    def __sub__(self, b):
        a = self[:]     # 这里,self是supeList的对象。由于superList继承于list,它可以利用和list[:]相同的引用方法来表示整个对象。
        b = b[:]        
        while len(b) > 0:
            element_b = b.pop()
            if element_b in a:
                a.remove(element_b)
        return a

print superList([1,2,3]) - superList([3,4])

内置函数len()用来返回list所包含的元素的总数。内置函数__sub__()定义了“-”的操作:从第一个表中去掉第二个表中出现的元素。如果__sub__()已经在父类中定义,你又在子类中定义了,那么子类的对象会参考子类的定义,而不会载入父类的定义。任何其他的属性也是这样。

(教程最后也会给出一个特殊方法的清单)

 

定义运算符对于复杂的对象非常有用。举例来说,人类有多个属性,比如姓名,年龄和身高。我们可以把人类的比较(>, <, =)定义成只看年龄。这样就可以根据自己的目的,将原本不存在的运算增加在对象上了。

 

下一步

希望你已经对Python有了一个基本了解。你可能跃跃欲试,要写一些程序练习一下。这会对你很有好处。

但是,Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象。我们已经看到了内置的比如说list,还有tuple等等。它们用起来很方便。在Python的标准库里,还有大量可以用于操作系统互动,Internet开发,多线程,文本处理的对象。而在所有的这些的这些的基础上,又有很多外部的库包,定义了更丰富的对象,比如numpy, tkinter, django等用于科学计算,GUI开发,web开发的库,定义了各种各样的对象。对于一般用户来说,使用这些库,要比自己去从头开始容易得多。我们要开始攀登巨人的肩膀了。

 

谢谢你的关注,

欢迎来到Python的世界。

 

总结

len() dir() help()

数据结构list(列表)是一个类。

运算符是方法

 

转载于:https://www.cnblogs.com/vamei/archive/2012/06/02/2532274.html

### 关于视频播放速度翻倍导致时长变为1秒的原因 当视频播放速度被设置为两倍速时,其逻辑上的时间长度会缩短至原有时长的一半。这是由于播放器在单位时间内播放更多的帧数所造成的现象[^4]。如果原本的视频是以固定的帧率(例如30fps)录制,则加速播放意味着每秒钟需要显示更多数量的帧来完成同样的内容展示。 然而,在某些情况下,观察到的时间长度可能异常地减少到了极短的程度,比如仅剩一秒。这种错误通常源于以下几个方面: #### 原因分析 1. **元数据未同步更新** 当改变视频播放速率而没有相应调整文件中的持续时间和时间戳信息时,可能导致播放器读取不一致的数据并报告错误的整体时长。一些媒体容器格式依赖这些内部标记来决定如何呈现给定资源的实际运行周期[^5]。 2. **编码参数冲突** 使用工具重新封装或者转码过程中设置了不当选项也可能引发此类问题。例如通过FFmpeg命令行操作时不恰当地指定`-r`参数强制覆盖原始帧率设定,这可能会扰乱原有结构从而影响最终输出表现形式。 3. **缓冲机制失效** 如果前端框架未能有效管理本地缓存状态以及远程获取新片段之间的衔接关系,在极端条件下就可能出现短暂卡顿甚至完全停滞的现象;同样地,对于已经预设好特定节奏模式下的连续性破坏也会造成视觉上看似瞬间结束的效果。 --- ### 解决方案建议 针对上述提到的各种可能性,可以采取如下措施加以改善: #### 方法一:修正源素材属性 确保输入材料本身具备完整的描述字段,并且在整个转换流程里维持一致性。具体做法包括但不限于应用恰当的编解码库组合、保留原有的关键特性如宽高比例等方面的信息不变形失真。 ```bash ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output_fast.mp4 ``` 此脚本利用了FFmpeg内置滤镜功能(`setpts`)动态调节每一帧对应的时间位置值达到实际意义上的提速效果而不丢失任何细节部分。 #### 方法二:优化客户端行为模型 增强应用程序层面的设计考虑因素,特别是涉及到异步IO交互频繁场景下更需谨慎对待每一个环节间的过渡处理方式。以下是基于Vue.js环境的一个简单示范代码片段用于演示自定义进度条控制逻辑[^1]: ```javascript methods: { handleTimeUpdate(event){ const currentTime = this.$refs.video.currentTime; if(currentTime >= (this.totalDuration * 0.9)){ console.log('接近尾声'); // 可在此处执行额外业务动作 } }, } mounted(){ this.$nextTick(() => { this.$refs.video.addEventListener('timeupdate', this.handleTimeUpdate); }); }, beforeDestroy() { this.$refs.video.removeEventListener('timeupdate', this.handleTimeUpdate); } ``` 以上示例展示了监听HTMLMediaElement事件的方法之一以便及时响应用户操作意图进而提供更加个性化的馈服务体验。 #### 方法三:强化服务器端服务能力 考虑到网络状况波动不可避免的事实,预先做好充分准备显得尤为重要。可以通过实施HTTP Live Streaming(HLS)协议标准将大型多媒体文档分割成多个小型TS单元供按需索取使用,这样既能够缓解单次传输压力又能提高整体效率水平。 ```python import cv2 cap = cv2.VideoCapture('http://example.com/stream.m3u8') while(cap.isOpened()): ret, frame = cap.read() if not ret: break # 处理图像... pass ``` 这里给出了一段采用Python结合OpenCV库访问在线直播流的例子说明即使面对复杂的外部条件依然有机会找到合适的切入点解决问题[^3]。 --- ### 结论 综上所述,要彻底根除因为加快回放而导致表观总耗时时缩减过头的情况发生,就需要从源头抓起直至末端展现全程把控各个环节质量关口才能取得理想成效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值