Python教程:从零到大师
翻译:Summer 链接: https://pythoncaff.com/topics/104/python-tutorials-from-zero-to-master-suitable-for-experienced-developers
'它是一门高级编程语言, 它的核心设计理念是让所有代码变得更易阅读,并给开发者们提供一种“仅仅几行代码就能编写编程逻辑”的语法。
数据科学 web开发 机器学习
比如,Quora、Pinterest、Spotify,这些项目,都是使用python开发他们的后端。
基础
1. 变量
讲道理,变量是什么就不用特地解释了…大家都懂。
one = 1
some_number = 10000
true_boolean = True
false_boolean = False
# string
my_name = 'Leandro Tk'
# float
book_price = 15.80
2.流程控制: 分支语句
print('Hello Python If')
if 2 > 1:
print('2 is greater than 1')
当然,如果不满足条件,那么else就派上用场了!
如果,if后面跟着的逻辑表达式最终值是false,则会运行else里面的程序,如下:
print('1 is greater than 2')
else:
print('1 is not greater than 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. 循环 / 迭代器
while num <= 10:
print(num)
num += 1
while loop_condition:
print('Loop Condition keeps: %s' %(loop_condition))
loop_condition = False
range,代表从在循环里,它用于表示从x到n,如下,就是从1到11,第三个参数可空,意思是每次递进的加数,默认每循环一次给i加1,填2的话,就给i加2
print(i)
列表: 集合 | 数组 | 数据结构
List
是一个可以用来存储一列值的集合(比如你想要的这些整数)。那么让我们使用它:List
有一个叫做索引的概念。第一个元素获取索引 0 (零)。第二个取 1 ,依此类推。明白了吧。print(my_integers[0]) # 5
print(my_integers[1]) # 7
print(my_integers[4]) # 4
'Toshiaki',
'Juliana',
'Yuji',
'Bruno',
'Kaio'
]
print(relatives_names[4]) # Kaio
Lists
索引是如何工作的。但是我仍然需要告诉你如何将一个元素添加到 List
数据结构(一个项目到列表)。List
最常见的方法是 append
。让我们看看他是如何工作的:bookshelf.append('The Effective Engineer')
bookshelf.append('The 4 Hour Work Week')
print(bookshelf[0]) # The Effective Engineer
print(bookshelf[1]) # The 4 Hour Work Week
append
非常的简单。您只需要将元素(例如『 The Effective Engineer 』)作为『 append 』参数应用即可。Lists
到这里就结束了,让我们来谈谈另一个数据结构。字典: 键-值 数据结构
Lists
使用整数来索引. 但是如果我们不想使用整数来索引呢? 一些其他的数据结构可以使用数字,字符串或者其他的类型来做索引.Dictionary
数据结构. Dictionary
是一个键值对集合. 它长下面这样:'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
}
Dictionary
的值呢? 你猜对啦 --- 使用键. 试一下吧:'name': 'Leandro',
'nickname': 'Tk',
'nationality': 'Brazilian'
}
print('My name is %s' %(dictionary_tk['name'])) # My name is Leandro
print('But you can call me %s' %(dictionary_tk['nickname'])) # But you can call me Tk
print('And by the way I'm %s' %(dictionary_tk['nationality'])) # And by the way I'm Brazilian
Dictionary
. 我的名字, 昵称和国籍. 这些属性是Dictionary
的键.List
使用下标, 我们在这也使用下标 ( Dictionary
中的键的内容) 来访问存在 Dictionary
中的值.Dictionary
中的所有关于我的短语. 非常简单滴~?Dictionary
非常帅气的事情就是我们可以使用任何东西来做为字典的值.在我创建的Dictionary
中, 我想添加键为 'age' 且值为我的整数年龄进去:'name': 'Leandro',
'nickname': 'Tk',
'nationality': 'Brazilian',
'age': 24
}
print('My name is %s' %(dictionary_tk['name'])) # My name is Leandro
print('But you can call me %s' %(dictionary_tk['nickname'])) # But you can call me Tk
print('And by the way I'm %i and %s' %(dictionary_tk['age'], dictionary_tk['nationality'])) # And by the way I'm Brazilian
Lists
一样,让我们来学习如何在 Dictionary
中添加元素.在Dictionary
中, 一个键指向一个值是很重要的. 这就是为什么我们在添加元素的时候讨论它:'name': 'Leandro',
'nickname': 'Tk',
'nationality': 'Brazilian'
}
dictionary_tk['age'] = 24
print(dictionary_tk) # {'nationality': 'Brazilian', 'age': 24, 'nickname': 'Tk', 'name': 'Leandro'}
Dictionary
的键上. 一点也不复杂,484啊?迭代:循环Python中的数据结构
For
来循环迭代它. 现在让我们尝试一下:'The Effective Engineer',
'The 4 hours work week',
'Zero to One',
'Lean Startup',
'Hooked'
]
for book in bookshelf:
print(book)
书架
中的书
进行了for
操作,我们输出打印了其中的书
(当然你可以在循环中对它们做任何事情)。简单而又直观,这就是Python。for
循环进行迭代操作,但是此时我们则需要用到key
:for key in dictionary:
print('%s --> %s' %(key, dictionary[key]))
# some_key --> some_value
dictionary
变量我们使用for
循环操作其中的key
,接着我们打印输出他的key
以及其相对应匹配的value
值。iteritems
:for key, value in dictionary.items():
print('%s --> %s' %(key, value))
# some_key --> some_value
key
,value
,但这并不是必须的,你甚至可以给它们起任何一个名字^.^,让我们来看一下:'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
作为了Dictionary
的key
参数,代码运行十分正确。赞!类型与对象
一点基础理论:
Python 的面向对象编程模式:ON
考虑到这一点,让我们看看类的Python语法:
pass
print(car) # <__main__.Vehicle instance at 0x7fb1de6c2638>
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
tesla_model_s = Vehicle(4, 'electric', 5, 250)
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
获取
& 设置
. 因为第一个获取了属性值,然后第二个设置了一个新的属性值。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
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
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')
tesla_model_s.make_noise() # VRUUUUUUUM
封装:信息隐藏
'封装可以在定义中隐藏数据和函数成员,意味着从外部隐藏了对象定义中的内部描述“--- Wikipedia
Public 变量实例
def __init__(self, first_name):
self.first_name = first_name
print(tk.first_name) # => TK
first_name = 'TK'
print(tk.first_name) # => TK
tk.first_name = 'Kaio'
print(tk.first_name) # => Kaio
Non-public 变量实例
“在这里,我们不用'私有'来形容 ,因为在Python中没有真正“私有”的属性(避免了一般情况下不必要的工作)。”--- PEP 8
公共变量实例
一样,我们可以在构造函数或类内部定义非公共变量实例
。语法上的差异是:对于非公共变量实例
,我们在变量名前加一道下划线(_
)。“在Python中,无法从内部访问'私有’变量实例的对象是不存在的。但是,大多数Python代码遵循一个惯例:一个名字前有一道下划线的对象应该被认为是API中非公共的部分,例如 _spam
,无论它是一个函数、方法或是数据成员。” --- Python Software Foundation
def __init__(self, first_name, email):
self.first_name = first_name
self._email = email
email
变量了吗?这就是定义一个非公共变量
的方法。print(tk._email) # tk@mail.com
所谓 非公共变量
只是一个惯例,没有机制禁止我们从外部访问并更新它。但按照惯例,我们应该把它作为API中非公共的部分来对待。
email
和update_email
)来理解。def __init__(self, first_name, email):
self.first_name = first_name
self._email = email
def update_email(self, new_email):
self._email = new_email
def email(self):
return self._email
非公共变量
。print(tk.email()) # => tk@mail.com
tk._email = 'new_tk@mail.com'
print(tk.email()) # => tk@mail.com
tk.update_email('new_tk@mail.com')
print(tk.email()) # => new_tk@mail.com
我们以 first_name
TK 和email
tk@mail.com 初始化一个Person
对象。通过方法访问 非公共变量
email
,并打印出来。从类外部直接设置一个新的 email
。我们应该把 非公共变量
作为API中非公共的部分来对待。通过实例方法更新 非公共变量
email
。成功!我们可以通过预设的方法来更新它。
公共方法
公共方法
, 我们也可以在我们类的外部使用这些方法了:def __init__(self, first_name, age):
self.first_name = first_name
self._age = age
def show_age(self):
return self._age
print(tk.show_age()) # => 25
非公共方法
非公共方法
我们却无法做到这一点。我们先来实现一个同样的 Person
类,不过这回我们加个下划线(_
)来定义一个 show_age
的非公共方法
。def __init__(self, first_name, age):
self.first_name = first_name
self._age = age
def _show_age(self):
return self._age
非公共方法
:print(tk._show_age()) # => 25
我们可以访问并且更新它。 非公共方法
只是一类约定俗成的规定,并且应当被看做接口中的非公共部分。
def __init__(self, first_name, age):
self.first_name = first_name
self._age = age
def show_age(self):
return self._get_age()
def _get_age(self):
return self._age
tk = Person('TK', 25)
print(tk.show_age()) # => 25
_get_age
非公共方法
和一个show_age
公共方法
。show_age
可以由我们的对象调用(在类的外部)而_get_age
只能在我们类定义的内部使用(内部show_age
方法)。但是再次强调下,这只是个约定俗成的规定。封装总结
继承:行为和特征
def __init__(self, number_of_wheels, seating_capacity, maximum_velocity):
self.number_of_wheels = number_of_wheels
self.seating_capacity = seating_capacity
self.maximum_velocity = maximum_velocity
print(my_car.number_of_wheels)
print(my_car.seating_capacity)
print(my_car.maximum_velocity)
def __init__(self, number_of_wheels, seating_capacity, maximum_velocity):
Car.__init__(self, number_of_wheels, seating_capacity, maximum_velocity)
print(my_electric_car.number_of_wheels) # => 4
print(my_electric_car.seating_capacity) # => 5
print(my_electric_car.maximum_velocity) # => 250
就到这里!
变量 分支语句 循环语法 列表:集合 | 数组 字典:键值对的集合 如何迭代这些数据结构 对象和类 用属性作为对象的数据
用方法作为对象的行为 getters、setters 和 property 装饰器 封装:信息隐藏 继承:行为和特征