6、抽象、更加抽象
作者:@houkai
本文为作者原创,转载请注明出处:https://www.cnblogs.com/houkai/p/3478779.html
抽象(函数)
创建函数:def 函数名(参数):即可,如需返回值,函数中包含return语句。
记录函数:如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,称为文档字符串。
若要使用函数修改外部变量值,可以返回值赋予该变量,也可以使用列表传参。
C/C++中的参数叫做位置参数,Python不仅支持位置参数(它们的位置很重要,比他们的名字更重要),还支持关键字参数。关键字参数可以明确每个参数的作用,使每个参数的含义变得清晰,而且弄错顺序程序也不受影响;另外使用关键字参数在函数中可以给参数提供默认值。
>>> def hello(greeting='hello',name='houkai'): print (greeting,name)
位置和关键字参数是可以联合使用的,要把位置参数放在前面就可以了。
收集参数,*参数名表示将所有剩下的参数放在元组中。**参数名可以收集关键字参数放在字典中。
作用域:globals函数获取全局变量值,locals返回局部变量的字典,vars函数返回含局部变量的所有变量字典。
如果在函数内声明(如果存在则直接使用)全局变量,使用global标示符。
递归调用中的经典应用:阶乘和幂
>>> def factorial(n): if n==1: return 1 else: return n*factorial(n-1) >>> factorial(5) 120 >>> def power(x,n): if n==0: return 1 else: return x*power(x,n-1) >>> power(2,3) 8
这里的相似之处是n时的结果可以通过n-1时的结果来构建。
二分查找
seq=[1,2,3,4,5,6,7,8,9] >>> def search(seq,number,lower=0,upper=None): if upper is None:upper = len(seq)-1 if lower == upper: assert number == seq[upper] return upper else: middle = (lower+upper)//2 if number > seq[middle]: return search(seq,number,middle+1,upper) else: return search(seq,number,lower,middle) >>> search(seq,4) 3
更加抽象(类)
多态,同样的方法会根据调用对象类型的不同而产生不同行为。
封装,不同的对象具有独立的空间,相关独立。
继承,维护程序开发的结构性与简洁。
类的定义,class name:即可,使用s = name(),创建了对象。
_xxx不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
__xxx双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以
__xxx___ 定义的是特列方法。像__init__之类的
类变量紧接在类名后面定义,相当于java和c++的static变量;实例变量在__init__里定义,相当于java和c++的普通变量。
是否为类的对象,isinstance函数;是否是继承关系,issubclass函数;
是否含有变量hasattr(x,’name’),是否有函数hasattr(x,’__name__’),所有特性用__dict__特性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架