python是一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法。
对于我来说,学习 python 的首要原因是,python 是一种可以优雅编程的语言。它能够简单自然地写出代码和实现我的想法。
另一个原因是我们可以将 python 用在很多地方:人工智能、数据科学、web 开发和机器学习等都可以使用 python 来开发。quora、pinterest 和 spotify 都使用 python 来进行他们的后端 web 开发。那么让我们来学习一下 python 吧。
python 基础
1.变量
你可以把变量想象成一个用来存储值的单词。我们看个例子。
python 中定义一个变量并为它赋值是很容易的。假如你想存储数字 1 到变量 “one” ,让我们试试看:
one = 1超级简单吧?你只需要把值 1 分配给变量 “one” 。
two = 2some_number = 10000只要你想,你可以把任意的 值 赋给任何其他的 变量 。正如你从上面看到的那样,变量 “ two ” 存储整型变量 2 , 变量 “ some_number ” 存储 10000 。
除了整型,我们还可以使用布尔值(true/flase)、字符串、浮点型和其他数据类型。
# booleanstrue_boolean = truefalse_boolean = false# stringmy_name = leandro tk# floatbook_price = 15.802.控制流程:条件语句
“ if ” 使用一个表达式来判断一个语句是 true 还是 false ,如果是 true ,那么执行 if 内的代码,例子如下:
if true: print(hello python if)if 2 > 1: print(2 is greater than 1)2 比 1 大,所以 print 代码被执行。
当“ if ”里面的表达式是 false 时,“ else ” 语句将会执行。
if 1 > 2: print(1 is greater than 2)else: print(1 is not greater than 2)1 比 2 小,所以 “ else ” 里面的代码会执行。
你也可以使用 “ elif ” 语句:
if 1 > 2: print(1 is greater than 2)elif 2 > 1: print(1 is not greater than 2)else: print(1 is equal to 2)3. 循环和迭代
在 python 中,我们可以用不同的形式进行迭代。我会说下 while 和 for。
while 循环:当语句是 true 时,while 内部的代码块会执行。所以下面这段代码会打印出 1 到 10 。
num = 1while num %s %(key, dictionary[key]))# some_key --> some_value上面是如何在字典中使用 for 循环的例子。对于字典中的每个 key ,我们打印出 key 和 key 所对应的 value 。
另一种方式是使用 iteritems 方法。
dictionary = { some_key: some_value }for key, value in dictionary.items(): print(%s --> %s %(key, value))# some_key --> some_value我们命名两个参数为 key 和 value ,但是这不是必要的。我们可以随意命名。我们看下:
dictionary_tk = { name: leandro, nickname: tk, nationality: brazilian, age: 24}for attribute, value in dictionary_tk.items(): print(my %s is %s %(attribute, value))# my name is leandro# my nickname is tk# my nationality is brazilian# my age is 24可以看到我们使用了 attribute 作为字典中 key 的参数,这与使用 key 命名具有同样的效果。真是太棒了!
类&对象
一些理论:
对象是对现实世界实体的表示,如汽车、狗或自行车。 这些对象有两个共同的主要特征: 数据和 行为 。
汽车有 数据 ,如车轮的数量,车门的数量和座位的空间,并且它们可以表现出其行为:它们可以加速,停止,显示剩余多少燃料,以及许多其他的事情。
我们将 数据 看作是面向对象编程中的属性和行为。 又表示为:
数据→ 属性和行为 → 方法
而 类 是创建单个对象的蓝图。 在现实世界中,我们经常发现许多相同类型的对象。 比如说汽车。 所有的汽车都有相同的构造和模型(都有一个引擎,轮子,门等)。每辆车都是由同一套蓝图构造成的,并具有相同的组件。
python 面向对象编程模式:on
python,作为一种面向对象编程语言,存在这样的概念: 类 和 对象 。
一个类是一个蓝图,是对象的模型。
那么,一个类是一个模型,或者是一种定义 属性 和 行为 的方法(正如我们在理论部分讨论的那样)。举例来说,一个车辆 类 有它自己的 属性 来定义这个 对象 是个什么样的车辆。一辆车的属性有轮子数量,能源类型,座位容量和最大时速这些。
考虑到这一点,让我们来看看 python 的 类 的语法:
class vehicle: pass上边的代码,我们使用 class 语句 来定义一个类。是不是很容易?
对象是一个 类 的实例化,我们可以通过类名来进行实例化。
car = vehicle()print(car) # 在这里,car 是类 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这个 init 方法 。我们称之为构造函数。因此当我们在创建一个车辆 对象 时,可以定义这些 属性 。想象一下,我们喜欢 tesla model s ,所以我们想创建一个这种类型的 对象。 它有四个轮子,使用电能源,五座并且最大时时速是250千米(155英里)。我们开始创建这样一个 对象 :
tesla_model_s = vehicle(4, 'electric', 5, 250)四轮+电能源+五座+最大时速250千米。
所有的属性已经设置了。但我们该如何访问这些属性值呢?我们给对象发送消息以向其请求该值。我们称之为方法。它是对象的行为。让我们实现它:
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) # 4tesla_model_s.number_of_wheels = 2 # setting number of wheels to 2print(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封装: 隐藏信息
封装是一种限制直接访问对象数据和方法的机制。但与此同时,它使得在数据上操作更简单(对象的方法)。
“封装可被用于隐藏数据成员和成员函数。按照这个定义,封装意味着 对象的内部表示一般在对象定...