17611538698
webmaster@21cto.com

Python从Zero到Hero(二)

资讯 0 2440 2018-03-08 12:02:33
maxresdefault.jpg

各位好,我们继续Python的学习。
 
上一篇,我们一起了解了Python的列表,字典等循环处理,想必大家已经学习到了,也体会到Python的简洁优雅。
 
下面,我们一起继续学习Python的迭代器Iteration,使用它来进行遍历数据结构。
 
For与迭代器 
 
我们已经学习完了Python基础,对列表List的迭代非常容易。Python开发者通常使用for循环。现在就开始一段代码:
 
bookshelf = [
 "传习录",
 "禅与摩托车修理技术",
 "Python 从Zero到Hero",
 "从零到一",
 ""
]
 
for book in bookshelf:
print(book)
 
现在我们将书架上的每本书,把它们的名字都依次打印了出来,非常简单直观,这就是Python的趣处。
 
对于Hash散列类数据结构 ,依然可以使用for循环,但我们得用到键(Key)。来看如下的代码:
 
dictionary = { "some_key":"some_value" }
 
for key in dictionary:
   print("%s --> %s" %(key, dictionary[key]))
   
#some_key --> some_value
 
上面就是如何使用散列数据结构的例子。对于dictionary中的每个key,我们可以通过print key和值的方式打印出来。
 
我们还有一种方法是使用 iteritems方法。代码请看如下:
 
dictionary = { "some_key":"some_value" }
 
for key, value in dictionary.items():
   print("%s --> %s" %(key, value))
 
# some_key --> some_value
 
上面这个例子的结果是一样的。
 
另外,聪明的你可能看到,我们在print语句中把两个参数命名为key和value,通过字面意思是键/值,但并不是必须叫这个名字,我们可以给它们起任意喜欢的名字。请看以下代码:
dictionary_ex = {
 "name": "Raymond",
 "nickname": "Luoyi",
 "nationality": "China",
 "age": 38
}
 
for attribute, value in dictionary_ex.items():
    print("My%s is %s" %(attribute, value))
   
# My name is Raymond
# My nickname is Luoyi
# My nationality is China
# My age is 38
 
您可以看到,我们使用attribute做为Dictionary键的参数,它也能够正常工作。是不是很棒呢!
 
类与对象
 
人类需要对象。对象就像是汽车、猫或自行车、洗衣机等等真实物体的表示。这些对象们共享两个主要特征:数据和行为。
 
汽车有数据,比如车轮数量,车门和座位数量,它还能够表现出来行为:可以加速、倒车、停止,显示还剩多少燃料,以及其它更多事情。
 
我们将数据识别为属性、行为和方法,这就称为面向对象编程。即:
 
数据->属性和行为->方法
 
类是创建一个对象的蓝图。在现实世界中,我们经常发现很多相同类型的对象,比如汽车,所有相同的品牌和型号都有一个引擎、车轮、车门等。每辆车都由同一序列蓝图构成的,并具有类似的组件。
 
Python面向对象编程模式:ON
 
和其它所有的面向对象编程语言一样,Python也有类和对象的概念。
一个类是一个蓝图,一个模型针对一个对象。
 
请让我再啰嗦一次。一个类只是一个模型,或者一个方法对定义属性或行为(就像我们本节第一段提到的理论)。例如,一个汽车的类它有自己的属性,定义什么样的对象是车。车轮的数量,汽车类型,座位数以及最高时速都是车的属性。
 
综合以上之思想,我们来看Python里声明类的语法:
 
class Vehicle:
  pass
 
我们用class语法来声明一个类Vehicle。就是这样,是不是很简单?
对象是类的一个实例。我们创建一个类的实例:
car = Vehicle()
print(car) #<__main__.Vehicle instanceat 0x7fb1de6c2638>
 
这里car就是一个对象,是类Vehicle的实例。
你应该会记得,我们的车辆具有4个属性:车轮数量、车辆类型、座位数量以及最高时速等。
 
因此,我们创建车辆类时,我们设置了这些属性。我们定义类可以来接收这些数据,并进行初始化。如下之代码:
 
class Vehicle:
   def __init__(self, number_of_wheels, type_of_tank, seating_capacity,maximum_velocity):
       self.number_of_wheels = number_of_wheels
       self.type_of_tank = type_of_tank
       self.seating_capacity = seating_capacity
       self.maximum_velocity = maximum_velocity
 
在这里我们使用了init方法,在Python中将此名称的方法称为构造方法。当我们创建车辆对象时,我们就可以实例化一些属性。比如我们都喜欢Tesla Model S,也非常想拥有这种类型的车对象,它有4个轮子,以电池驱动,空间有5个座位,最高时速为250公里/小时。那么,让我们来创建这个车对象。
 
tesla_model_s = Vehicle(4, 'electric', 5,250)
 
即4轮,电动,5座,250公里/小时。
 
到此,Vehicle类的全部属性都已设置。但是我们的方法如何引用这些属性的值呢?
 
我们发送消息给对象,请它告诉我们属性的值。这种方法调用,被称为对象的行为。我们继续代码实现之:
 
class Vehicle:
   def __init__(self, number_of_wheels, type_of_tank, seating_capacity,maximum_velocity):
       self.number_of_wheels = number_of_wheels
       self.type_of_tank = type_of_tank
       self.seating_capacity = seating_capacity
       self.maximum_velocity = maximum_velocity
 
   def number_of_wheels(self):
       return self.number_of_wheels
 
   def set_number_of_wheels(self, number):
       self.number_of_wheels = number
 
各位可以看到,有两个方法被定义了,分别为number_of_wheels和set_number_of_wheels。我们称之为getter和setter,一个是用来获取属性的值,一个是为属性设置一个新值。
 
在Python中,我们可以用@property(修饰符)来实现getters和setters。请看以下代码:
 
class Vehicle:
   def __init__(self, number_of_wheels, type_of_tank, seating_capacity,maximum_velocity):
       self.number_of_wheels = number_of_wheels
       self.type_of_tank = type_of_tank
       self.seating_capacity = seating_capacity
       self.maximum_velocity = maximum_velocity
 
   @property
   def number_of_wheels(self):
       return self.number_of_wheels
 
   @number_of_wheels.setter
   def number_of_wheels(self, number):
       self.number_of_wheels = number
 
接下来,我们可以调用这些方法,让它们引用或设置属性。代码如下:
 
tesla_model_s = Vehicle(4, 'electric', 5,250)
print(tesla_model_s.number_of_wheels) # 4
tesla_model_s.number_of_wheels = 2 #setting number of wheels to 2
print(tesla_model_s.number_of_wheels) # 2
 
这和定义普通方法有些不一样,这些方法是为属性工作的。比如,当我们设置新的车轮数量时,我们不会使用两个参数,而是设置值2给number_of_wheels。
 
这是在Python中使用getter和setter的其中一种编码方法。还有其它方法,比如“make_noise”方法。我们来看这一段代码:
 
class Vehicle:
   def __init__(self, number_of_wheels, type_of_tank, seating_capacity,maximum_velocity):
       self.number_of_wheels = number_of_wheels
       self.type_of_tank = type_of_tank
       self.seating_capacity = seating_capacity
       self.maximum_velocity = maximum_velocity
 
   def make_noise(self):
       print('VRUUUUUUUM')
 
当我们调用这个方法,它会返一个字符串“VRRRRUUUUM”。
 
tesla_model_s = Vehicle(4, 'electric', 5,250)
tesla_model_s.make_noise() # VRUUUUUUUM
 
接下来的内容,我们继续来掌握如何将对象中数据和方法进行隐藏,这被称之为“封装”,然后还有一起学习“继承”的概念,都是挺有趣的事情,值得共同期待。
 
 

作者:21CTO社区
说明:本站Python开发系列文章之连载。


评论