【Python】像计算机科学家一样思考Python

mac2026-08-22  0

目录

(十五)类和对象

实例

复制

调试

术语

(十六)类和函数

(十七)类和方法

打印对象(附:重要例子)

Time类 print_time函数

Time类 print_time方法

__init__方法

__str__方法

接口和实现

(十八)继承

类属性/实例属性

(十九)进阶小技巧(简化代码)

条件表达式

使用条件表达式改写if-else

使用条件表达式改写阶乘函数的递归版

使用条件表达式处理函数的可选参数

列表推导式

转为大写(字符串方法capitalize映射至元素)

只选择t中的大写元素,返回新列表(筛选)

生成器表达式

计数器(Counter)

defaultdict

命名元组

术语表

(二十)附:常见错误


API(Application Programming Interface,应用程序编程接口)

是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

例:当你在浏览器中输入www.facebook.com,一则请求会出现在Facebook的远程服务器上。一旦你的浏览器收到了响应,它就会解析代码、呈现出网页。对于浏览器来说(这也是所谓的客户端),Facebook的服务器就是一个应用程序编程接口。这意味着每当你在互联网上访问一个页面的时候,你都在与某个远程服务器的API发生交互。API并不完全等同于远程服务器——它其实是服务器的一部分,负责接收请求并发送响应。API是一种为客户提供服务的方式。

例:你是一家小企业,公司网站上有一个表格是用来给客户注册预约的。你想要凭借这些预约细节信息,让客户能够自动在谷歌日程上创建活动。API使用:这就意味着,你的网站服务器需要直接与谷歌服务器进行对话,在掌握既定细节信息的情况下,申请创建活动。之后,你的服务器就会接收到谷歌的响应并进行处理,然后将相关信息发送回浏览器,比如说向用户发送一个确认信息。此外,你的浏览器通常可以绕过自己的服务器,直接向谷歌服务器发送API请求。


(十五)类和对象

约定俗成地,类 首字母大写,且用单数。

已学如何用函数组织代码,下面学习如何用类组织代码和数据。附:基本代码及重要注释(如下)

class Point: #类的名称为Point '''Represents a point in 2-D space.''' #文档字符串,用于解释类的用途 #定义一个叫做Point的类将创建一个类对象(class object) #由于Point是定义在顶层的,所以它的全名是__main__.Point print(Point) #<class '__main__.Point'> #类对象就像是用来创建对象的工厂,可以像调用函数那样调用Point blank=Point() #返回值是一个Point对象的引用,将它赋值给blank print(blank) #<__main__.Point object at 0x0000025B9756DC50> #创建一个新对象的过程:类的实例化(instantiation),这个新对象叫做类的一个实例(instance) #打印实例print(blank),Python会告诉你它属于哪个类(如实例blank属于Point object), #以及它在内存中的存储地址(如0x0000025B9756DC50),前缀0x表示后面的数是以十六进制表示的 #每个对象都是某种类的实例,故“对象”与“实例”可以互换

实例

class Point: #类的名称为Point '''Represents a point in 2-D space.''' #文档字符串,用于解释类的用途 #定义一个叫做Point的类将创建一个类对象(class object) #由于Point是定义在顶层的,所以它的全名是__main__.Point print(Point) #<class '__main__.Point'> #类对象就像是用来创建对象的工厂,可以像调用函数那样调用Point blank=Point() #返回值是一个Point对象的引用,将它赋值给blank print(blank) #<__main__.Point object at 0x0000025B9756DC50> #创建一个新对象的过程:类的实例化(instantiation),这个新对象叫做类的一个实例(instance) #打印实例print(blank),Python会告诉你它属于哪个类(如实例blank属于Point object), #以及它在内存中的存储地址(如0x0000025B9756DC50),前缀0x表示后面的数是以十六进制表示的 #每个对象都是某种类的实例,故“对象”与“实例”可以互换;可以将实例作为参数传递 #使用“点标记法”为实例赋值 #其中,x和y称为“属性”(attributes) #即变量blank引用了Point类,这个类有了俩属性,每个属性都引用了一个浮点数 blank.x=3.0 blank.y=4.0 x=blank.x #变量x = blank.属性x (俩x不冲突) print(x)#blank.x意思为“前往blank引用的对象并获取x的值”

复制

 

调试

术语

 

(十六)类和函数

(十七)类和方法

 

打印对象(附:重要例子)

Time类 print_time函数

class Time: '''Represents the time of day''' def print_time(time): print('%.2d:%.2d:%.2d'%(time.hour,time.minute,time.second)) #想调用print_time()函数,必须把Time对象作为一个参数传给函数 start=Time() start.hour=9 start.minute=45 start.second=00 print_time(start) #09:45:00

Time类 print_time方法

#将print_time变成一个方法,只需将函数定义移到类定义里面(注意缩进 class Time: def print_time(time): print('%.2d:%.2d:%.2d'%(time.hour,time.minute,time.second)) start=Time() start.hour=9 start.minute=45 start.second=00 #调用方法一:使用函数的语法 Time.print_time(start) #Time类.print_time方法.start传递的参数 #调用方法二(更简洁):使用方法的语法 start.print_time() #start调用方法的对象,print_time方法名称 # >>>09:45:00

 

构造函数:__init__初始化方法

将在对象创建后自动被调用

 

__str__方法

 

接口和实现

 

(十八)继承

类属性/实例属性

 

 

(十九)进阶小技巧(简化代码)

条件表达式

使用条件表达式改写if-else

#条件表达式 #若x>0,则计算它的math.log;否则,抛出ValueError import math x=eval(input('请输入x:')) '''原代码(较麻烦) if x > 0: y = math.log(x) print(y) else: y = float('nan') print(y) ''' y=math.log(x) if x>0 else float('nan') print(y)

使用条件表达式改写阶乘函数的递归版

'''原代码 def factorial(n): if n==0: return 1 else: return n*factorial(n-1) print(factorial(3)) ''' def factorial(n): return 1 if n==0 else n*factorial(n-1) print(factorial(3))

使用条件表达式处理函数的可选参数

'''原代码 def __init__(self,name,contents=None): self.name=name if contents==None: contents=[] self.pouch_contents=contents ''' def __init__(self,name,contents=None): self.name=name self.pouch_contents=[] if contents == None else contents

列表推导式

转为大写(字符串方法capitalize映射至元素)

#转为大写(字符串方法capitalize映射至元素) '''原代码 def capitalize_all(t): res=[] for s in t: res.append(s.capitalize()) return res print(capitalize_all('aPp'))#['A', 'P', 'P'] ''' def capitalize_all(t): return [s.capitalize() for s in t] print(capitalize_all('aPp'))#['A', 'P', 'P']

只选择t中的大写元素,返回新列表(筛选)

#只选择t中的大写元素,返回新列表(筛选) '''原代码 def only_upper(t): res=[] for s in t: if s.isupper(): #别忘冒号 res.append(s) return res print(only_upper('App Pig'))#['A', 'P'] ''' def only_upper(t): return [s for s in t if s.isupper()] print(only_upper('App Pig'))#['A', 'P']

生成器表达式

计数器(Counter)

defaultdict

使得 当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值.

命名元组

术语表

 

(二十)附:常见错误

映射(map)

 

 

最新回复(0)