首先,什么是Python?根据其创建者Guido van Rossum的说法,Python是:
“高级编程语言及其核心设计哲学全都与代码可读性和一种语法有关,该语法使程序员可以用几行代码表达概念。”
对我而言,学习Python的第一个原因是它实际上是一种漂亮的 编程语言。编写代码并表达我的想法是很自然的。
另一个原因是我们可以通过多种方式在Python中使用编码:数据科学,Web开发和机器学习在这里大放异彩。Quora,Pinterest和Spotify都使用Python进行后端Web开发。因此,让我们学习一下。
基础
1.变量
您可以将变量视为存储值的单词。就那么简单。
在Python中,定义变量并为其设置值确实很容易。假设您要将数字1存储在名为“ one”的变量中。我们开始做吧:
one = 1
那有多简单?您刚刚将值1分配给变量“ one”。
two = 2
some_number = 10000
您可以将任何其他值分配给所需的其他变量。如上表所示,变量“ two ”存储整数2,而“ some_number ”存储10,000。
除了整数,我们还可以使用布尔值(真/假),字符串,浮点数和许多其他数据类型。
# booleans
true_boolean = True
false_boolean = False
# string
my_name = "Leandro Tk"
# float
book_price = 15.80
2.控制流:条件语句
“ If ”使用表达式评估语句是True还是False。如果为True,则执行“ if”语句中的内容。例如:
if True:
print("Hello Python If")
if 2 > 1:
print("2 is greater than 1")
2大于1,因此将执行“打印”代码。
如果“ if ”表达式为false,则将执行“ else ”语句。
if 1 > 2:
print("1 is greater than 2")
else:
print("1 is not greater than 2")
1不大于2,因此将执行“ else ”语句中的代码。
您还可以使用“ elif ”语句:
如果 1 > 2:
打印(“ 1大于2”)
elif 2 > 1:
打印(“ 1不大于2”)
其他:
打印(“ 1等于2”)
3.循环/迭代器
在Python中,我们可以以不同的形式进行迭代。我将谈论两个:while 和for。
While Looping:当语句为True时,将执行块中的代码。因此,此代码将打印从1到10的数字。
num = 1
while num <= 10:
print(num)
num += 1
在同时循环需要一个“循环条件。如果它保持True,它将继续迭代。在这个例子中,当num
是11
在循环条件等号False
。
另一个基本的代码可以更好地理解它:
loop_condition = 真
while loop_condition:
打印(“循环条件保持:%s” %(loop_condition))
loop_condition = 错误
该循环条件是True
如此它保持迭代-直到我们把它设置为False
。
对于循环:您将变量“ num ”应用于该块,“ for ”语句将为您进行迭代。此代码将打印与while代码相同的内容:从1到10。
for i in range(1, 11):
print(i)
看到?很简单。范围从开始1
一直到11
第th个元素(10
是10
th个元素)。
列表:收藏| 数组| 数据结构
假设您要将整数1存储在变量中。但也许现在您想存储2和3、4、5…
我是否还有另一种方式可以存储我想要的所有整数,但不能存储数百万个变量?您猜对了–确实存在另一种存储方式。
List
是一个集合,可用于存储值列表(例如所需的这些整数)。因此,让我们使用它:
my_integers = [1, 2, 3, 4, 5]
真的很简单。我们创建了一个数组并将其存储在my_integer上。
但是也许您在问:“如何从这个数组中获取价值?”
好问题。List
有一个叫index的概念。第一个元素的索引为0(零)。第二个为1,依此类推。你明白了。
为了更加清楚,我们可以用其索引表示数组和每个元素。我可以画出来:
使用Python语法,也很容易理解:
my_integers = [5, 7, 1, 3, 4]
print(my_integers[0]) # 5
print(my_integers[1]) # 7
print(my_integers[4]) # 4
想象一下,您不想存储整数。您只想存储字符串,例如您的亲戚名字列表。我的看起来像这样:
relatives_names = [
“俊明”,
“朱莉安娜”,
“ Yuji”,
“布鲁诺”,
“ Kaio”
]
打印(relatives_names [ 4 ])#Kaio
它的工作方式与整数相同。真好
我们刚刚了解了Lists
索引如何工作。但是我仍然需要向您展示如何向List
数据结构添加元素(将项目添加到列表)。
向a添加新值的最常见方法List
是append
。让我们看看它是如何工作的:
bookshelf = []
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
非常简单。您只需要应用元素(例如“有效工程师”)作为append
参数。
好吧,关于Lists
。让我们谈谈另一种数据结构。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:553215015
词典:键值数据结构
现在我们知道它们Lists
是用整数索引的。但是,如果我们不想使用整数作为索引怎么办?我们可以使用的某些数据结构是数字,字符串或其他类型的索引。
让我们了解Dictionary
数据结构。Dictionary
是键值对的集合。看起来是这样的:
dictionary_example = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
该键是指向索引 值。我们如何获得Dictionary
价值?您猜对了-使用键。让我们尝试一下:
dictionary_tk = {
"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”和我的真实整数年龄:
dictionary_tk = {
“ name”:“ Leandro”,
“昵称”:“ Tk”,
“国籍”:“巴西”,
“年龄”:24
}
print(“我的名字是%s” %(dictionary_tk [ “ name” ]))#我的名字是Leandro
print(“但是你可以叫我%s” %(dictionary_tk [ “ nickname” ]))#但是你可以叫我Tk
print(“而且我是%i和%s” %(dictionary_tk [ “ age” ],dictionary_tk [ “国籍” ]))#而且我是巴西人
在这里,我们有一个键(年龄)值(24)对,使用string作为键,并使用integer作为值。
正如我们所做的那样Lists
,让我们学习如何向中添加元素Dictionary
。指向价值的关键 是 价值的重要部分Dictionary
。当我们谈论向其添加元素时,也是如此:
dictionary_tk = {
"name": "Leandro",
"nickname": "Tk",
"nationality": "Brazilian"
}
dictionary_tk['age'] = 24
print(dictionary_tk) # {'nationality': 'Brazilian', 'age': 24, 'nickname': 'Tk', 'name': 'Leandro'}
我们只需要给key赋一个值即可。这里没什么复杂的,对吧?Dictionary
迭代:遍历数据结构
正如我们在Python基础知识中所了解的那样,List
迭代非常简单。我们Python
开发人员通常使用For
循环。我们开始做吧:
bookshelf = [
"The Effective Engineer",
"The 4 hours work week",
"Zero to One",
"Lean Startup",
"Hooked"
]
for book in bookshelf:
print(book)
因此,对于书架中的每本书,我们(可以使用它来做所有事情)打印它。非常简单直观。那是Python。
对于散列数据结构,我们也可以使用for
循环,但是我们应用了key
:
dictionary = { "some_key": "some_value" }
for key in dictionary:
print("%s --> %s" %(key, dictionary[key]))
# some_key --> some_value
这是一个如何使用它的示例。对于每一个key
在dictionary
我们print
的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作为的参数Dictionary
key
,并且可以正常工作。大!
类和对象
一点理论:
对象代表现实世界中的对象,例如汽车,狗或自行车。对象具有两个主要特征:数据和行为。
汽车具有数据,例如车轮数量,门数量和座位容量。它们还表现出一些行为:它们可以加速,停止,显示还剩多少燃料以及许多其他事情。
我们确定数据的属性和行为的方法在面向对象的编程。再次:
数据→属性和行为→方法
而一个类是从中创建单个对象的蓝图。在现实世界中,我们经常发现许多具有相同类型的对象。像汽车。相同的品牌和型号(都具有发动机,车轮,门等)。每辆汽车都是根据相同的蓝图建造的,具有相同的组件。
Python面向对象的编程模式:ON
Python作为一种面向对象的编程语言,具有以下概念:class和object。
类是一个蓝图,是其对象的模型。
同样,一个类只是一个模型,或者是一种定义属性和行为的方式(正如我们在理论部分所讨论的)。例如,车辆类具有其自己的属性,这些属性定义什么对象是车辆。车轮数量,油箱类型,座位容量和最大速度都是车辆的属性。
考虑到这一点,让我们看一下类的Python语法:
class Vehicle:
pass
这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
这是两个方法的实现:number_of_wheels和set_number_of_wheels。我们称之为getter
&setter
。因为第一个获取属性值,第二个为属性设置新值。
在Python中,我们可以使用@property
(decorators
)定义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
封装:隐藏信息
封装是一种限制直接访问对象的数据和方法的机制。但是,与此同时,它有助于对该数据(对象的方法)进行操作。
封装可以用来隐藏数据成员和成员函数。在这种定义下,封装意味着对象的内部表示通常在对象定义之外的视图中是隐藏的。” —维基百科
对象的所有内部表示都从外部隐藏。只有对象可以与其内部数据进行交互。
首先,我们需要了解public
和non-public
实例变量和方法的工作。
公共实例变量
对于Python类,我们可以public instance variable
在构造函数方法中初始化。让我们看看这个:
在构造方法中:
class Person:
def __init__(self, first_name):
self.first_name = first_name
在这里,我们将first_name
值作为参数应用到public instance variable
。
tk = Person('TK')
print(tk.first_name) # => TK
在班级内:
class Person:
first_name = 'TK'
继承:行为和特征
某些对象有一些共同点:它们的行为和特征。
例如,我从父亲那里继承了一些特征和行为。我继承了他的眼睛和头发作为特征,继承了他的不耐烦和内向作为行为。
在面向对象的编程中,类可以从另一个类继承通用特征(数据)和行为(方法)。
在这里还是要推荐下我自己建的Python开发学习群:553215015,群里都是学Python开发的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!