今天学的就没有昨天痛苦,上升了一个高度,重新了解了面向对象编程。刚接触的时候正好是面向对象这个概念刚兴起的时候,当时觉得也不过如此,没想到站这么快。世界之快,不过白驹过隙。抓住发展的尾巴,upup。
1. 用户输入
input(“String”),作用是向显示器输出String,并获取用户输入,保存为字符串。 #(Python2.7中:raw_input())
int(),用以将数字的字符串表示转换为数值表示,便于计算与比较。
%,求模运算符,将两个数相除并返回余数。常用来计算奇偶数,也用来控制循环。
2. while循环
for循环用于针对集合中的每一个元素的代码块,而while循环不断地运行,直到指定条件不满足为止。
while语句中只需检查标志的当前值是否为True,并将所有测试(包括将标志设置为False的事件)都放在其他地方,从而让程序变得更为简洁。
2.1. 循环中的控制语句
break:立刻退出任何循环,不再运行循环中余下的代码。
continue:返回循环开头,并根据条件测试结果决定是否继续执行。
2.2. while循环的功能
2.2.1 在列表之间移动元素
2.2.2 删除包含特定值的所有列表元素
2.2.3 使用用户输入来填充字典
#验证每个用户,并将经过验证的列表移到已验证列表中,直到没有未验证用户为止。 while unconfirmed_users: current_user = unconfirmed_users.pop() print("Verifying user:"+current_user.title()) confirmed_users.append(current_user) #删除列表中的特定元素 while "cat" in pets: pets.remove("cat") #设置一个标志,指出用户输入是否继续 responses = {} polling_active = True while polling_active: name = input("your name?") response = input("your response?") responses[name] = response #询问是否继续 repeat = imput("continue?(y/n)") if repeat == ‘n‘: polling_active = False #skip
3. 函数
def func(val): """函数注解""" run_code return n
其中的函数注解被称为文档字符串(docstring)的部分,描述函数是做什么的。文档字符串用三引号括起,Python使用它们来生成有关程序中函数的文档。
上述代码中的定义的函数func包括形参val,和返回值n,这些都是可选的,并非必要。
鉴于函数定义时可能包括多个形参,因此函数调用中也可能包含多个实参,向函数传递实参的方式有很多。
1. 位置实参:要求实参与形参顺序相同。
2. 关键字实参:其中每个实参都有变量名和值组成,还可以使用列表和字典。
3. 同时可以在函数定义语句中,给形参设定默认值,这样没有获得实参传递的形参会使用默认值进行运算。
#关键词实参传递 #与顺序无关,且等号两边无空格 describe_pet(animal_type=‘hamster‘, pet=‘harry‘) #给形参设定默认值 def describe_pet(pet_name, animal_type=‘dog‘):
其中函数接收实参的类型有很多,可以是数字,字符,列表,元组,字典等等复合形式。
在传递列表时,如要禁止函数所做的任何修改影响列表本身,可以将列表的副本传递给函数,如下:
#切片表示法[:]创建列表副本 function_name(list_name[:])
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。
def build_person(first_name, last_name, age=‘‘): """"返回一个字典,其中包含有关一个人的信息""" person = {‘first‘: first_name, ‘last‘: last_name} if age: person[‘age‘] = age return person
传递任意数量的实参
注意:
如果要让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将剩下的实参收集到最户一个形参中。
将函数储存在模块中
通过将函数存储在独立的文件中(.py),可隐藏程序代码的细节,将重点放在程序的高层逻辑上。还可以提高函数的重用。同时,将函数存储在独立文件中后,可与其他程序员共享这些文件而不是整个程序。
要让函数是可导入的,得首先创建模块。模块式扩展名为.py的文件,包含要导入到程序中的代码。即将def函数定义保存到外部独立的py文件。
函数导入方法:
from module import * from module import funcotion from module import function as func import module as mod from module import func0, func1, func2 #将函数和数据整洁的封装起来,让你能灵活高效地使用它们
4. 类
面向对象编程,类定义了一大类对象都有的通用行为。基于类创建对象被称为实例化,面向对象,面向现实世界。有点A/D转换的意思。
建立个Dog类
class Dog(): """一次模拟小狗的简单demo""" def __init__(self, name, age): """初始化属性name和age""" self.name = name self.age = age def sit(self): """模拟小狗被命令时蹲下""" print(self.name.title()+" is now sitting.") def roll_over(self): """模拟小狗被命令时打滚""" print(self.name.title()+" rolled pver!")
__init__()定义中包含三个形参:self、name、age。形参self必不可少,还必须位于其他形参的前面。因为Python调用__init__()这个方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
我们创建Dog实例时,Python会调用Dog类的方法__init__()。我们将通过实参向Dog()传递名字和年龄,self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参(name,age)提供值。
可以给属性指定默认值,来提高对象的丰富度。
同时创建实例后,尽量不要直接显式修改某属性的值,通过方法来实现对值的修改和递增操作。
class Car(): --skip-- def update_odometer(self, mileage): """ 将里程表读数设置为指定的值 禁止将里程表读数往回调 """ if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can‘t roll back an odometer!")
继承:
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类。新类称为子类。子类继承了其父类的所有属性和方法,同时可以定义自己的属性和方法。
class Car(): --skip-- class ElectricCar(Car): """电动汽车的独特之处""" def __init__(self, make, model, year): """初始化父类的属性""" super().__init__(make, model, year)
super()是一个特殊的函数,帮助Python将父类和子类关联起来。这行代让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超类(superclass)。
重写父类方法:
在子类中定义与父类方法同名的方法,这样Python就不会考虑这个父类方法,而只关注于你在子类中定义的相应方法。
实例用作属性:
即将一些属性和方法放到一个新的类中,包含在原始的类下,并且没有继承关系。
class Car(): --snip-- class Battery(): """模拟电动车电瓶""" def __init()__(self, battery_size=70): """初始化电瓶的属性""" self.battery_size = battery_size def describe_battery(self): """显示电瓶容量""" print("This car has a "+str(self.battey_size)+"-kWh battery.")
模拟实物:
活用类会让你进入程序员的另一个境界:解决上述问题时,你从较高的逻辑层面(而不是语法层面)考虑;你考虑的不是Python,而是如何用代码来表示实物。到了这种境界后,你经常会发现,现实世界的建模方法没有对错之分。有些方法的效率更高,但要找出效率最高的表示法,需要经过一定的实践。
导入类:
下面实例为一个汽车的实例:
"""一个可用于表示汽车的类""" class Car(): """一次模拟汽车的简单尝试""" def __init__(self, make, model, year): """初始化描述汽车的属性""" self.make = make self.model = model self.year = year self.odometer_reading = 0 def get_descriptive_name(self): """返回整洁的描述性名称""" long_name = str(self.year)+‘ ‘+self.make+‘ ‘+self.model return long_name.title() def read_odometer(self, mileage): """ 将里程表读数设置为指定的值 拒绝将里程表往回拨 """ if mileage >= self.odometer_reading: self.odometer_reading = mileage eles: print(‘You can‘t roll back an odometer!‘) def increment_odometer(self, miles): """将里程表读数增加指定的量""" self.odometer_reading+=miles
类的导入类似函数和库文件的导入,同时支持类的定义中使用外部导入的别的类。
小结:
今天学的很开心,花了两个多小时的时间来整理笔记,有点累,但也有收获。
以后代码要在Pycharm中编写、运行,这blog的代码编辑器真的费眼。
[Python日记-3] input-while循环-函数-类
原文:https://www.cnblogs.com/vilogy/p/12275973.html