本文是AI研究学会整理的技术博客,
学习Python:从零到英雄
翻译|永恒每日校对如新|酱梨整理|菠萝姑娘
原始链接:
https://medium . freecodecamp . org/learning-python-from-zero-to-hero-120 ea 540 b 567
一、Python是什么?据其创始人吉多·范·罗苏姆说,
“Python是一种高级编程语言,它的核心设计思想是代码可读性和语法,允许程序员用几行代码表达自己的观点。”
对我来说,学习Python的第一个原因是,它其实是一门很优雅的编程语言,我可以很自然地编程,表达自己的想法。
另一个原因是,它可以在很多方面用于编程:数据科学、web开发和机器学习将通过它发光。Quora,Pinterest,Spotify都是用它做后台web开发。那我们一起来看看吧!
基础
1 .变量
您可以将变量视为存储值的字符。就这么简单。
您可以在Python中轻松定义变量并为其赋值。假设您想将数字1存储在一个名为“1”的变量中。让我们一起做吧:
一= 1
这有多简单?你只需要给变量“1”赋值1。
二= 2
some_number= 10000
你可以给任何其他变量赋值。如上表所示,变量“二”存储整数2,“某个数字”存储10000。
除了整数,我们还可以使用布尔(真/假)、字符串、浮点等数据类型。
2.控制流:条件语句
“如果”是判断一个陈述是真是假的表达方式。如果为真,执行“If”内部语句。例如:
ifTrue:打印(“你好Python If”)
if2 >。1:打印(“2大于1”)
2大于1,所以执行“打印”代码。
如果“If”语句为假,将执行“else”语句。
if1 >。2:
打印(“1大于2”)
else:
打印(“1不大于2”)
1不大于2,因此将执行“else”内部语句。
您也可以使用“elif”语句:
if1 >。2:
打印(1大于2)elif 2 > 2。1:
打印(“1不大于2”)
else:
打印(“1等于2”)
3.循环/迭代
Python中有多个循环方法,我就提两个:while和for。
While循环:当语句为真时,将执行内部代码块。所以代码会输出1到10。
num= 1
whilenum & lt。= 10:
打印(数量)
num+= 1
而循环需要“循环条件”,如果为真,则执行循环。在本例中,当
当数字为11时,周期条件为假。
另一个基本代码更容易理解:
循环条件=真
whileloop _ condition:
打印(“循环条件保持:% s”%(循环条件))循环条件=假
如果循环条件为真,则执行循环,直到循环条件设置为假。
For循环:您可以在块中使用“num”,并且“for”语句也将执行循环。该代码具有与while代码相同的输出(从1到10)。
fori inrange(1,11):
打印(I)
明白吗?很简单。从1开始到11,10是第十个元素。
列表:包|数组|数据结构
假设您想要将整数1存储为变量,但是现在您可能想要存储2、3、4、5以及更多。
我有没有其他方法可以存储所有我想要的整数而不是几百万个变量?你猜对了——其实还有另外一种储存方式。
排列成表格或列
是一个集合,可用于存储一系列值(就像您想要存储的这些整数一样)。那我们一起用吧:
my_integers = [1,2,3,4,5]
真的很简单。我们构造一个数组,并将其存储在my_integer中。
但也许你会问,“我如何得到这个数组中的值?”好问题!
列表中有一个索引概念。第一个元素的索引是0。第二个元素是1,以此类推,你就明白了。
为了表达清楚,我们可以用一个索引来表示数组和每个元素。我会画画:
Python语言的使用也很容易理解:
my_integers = [5,7,1,3,4]打印(my_integers[0]) # 5
print(my_integers[1]) # 7
打印(my_integers[4]) # 4
如果你不想存储整数,你想存储字符串,就像你亲戚的名字的集合。我的是这样的:
亲戚_姓名= [
“Toshiaki”,
“朱莉安娜”,
《玉记》、
“布鲁诺”,
“凯奥”
]打印(亲戚_姓名[4]) #凯奥
它的操作方式与整数相同。太棒了!
我们只是在学习如何有效地使用索引,但是我仍然需要告诉您如何向数据结构中添加一个元素(向列表中添加一个项目)。
向列表中添加新值的最常见方式是追加,让我们看看它是如何工作的:
书架=[]书架。追加(“有效工程师”)书架。追加(“每周工作4小时”)
印刷(书架[0]) #有效的工程师
印刷(书架[1])# 4小时工作制
追加超级简单。您只需要将此元素用作参数(有效工程师)。这部分就够了。下面说说下一个数据结构。
字典:键值数据结构
现在我们都知道列表是用整数做索引的,但是如果不想用整数做索引呢?我们可以使用的数据结构是数字、字符串或其他索引类型。
我们来看看字典的数据结构。
词典_示例= {
“key 1”:“value 1”,
“key 2”:“value 2”,
" key3": "value3"}
字典是键值对的集合,值的索引指向键。我们如何获得字典中的值?你猜对了-用钥匙。让我们一起试试:
dictionary_tk = {
“名字”:“Leandro”,
“昵称”:“Tk”、“国籍”:“巴西人”
}
print("我的名字是%s"%(dictionary_tk["name"])) #我的名字是Leandro
print("但是你可以叫我% s " %(dictionary _ tk[" nickname "])#但是你可以叫我Tk
print("顺便说一下,我是% s " %(dictionary _ tk[" nationality "]))#顺便说一下,我是巴西人
我构建了一个关于我的字典,包括我的名字,昵称和国籍。这些属性都是字典键。正如我们学习了如何使用索引来获取列表一样,我们也使用索引来获取存储在字典中的值。例如,我输出一条关于我的语句,它使用存储在字典中的所有属性。很简单吧?另一件伟大的事情是,我们可以用任何东西作为价值。在我构造的字典里,我要加一个关键字“age”,我的实整数年龄也在里面:
dictionary_tk = {
“名字”:“Leandro”,
“昵称”:“Tk”,
“国籍”:“巴西人”,
【年龄】:24
}
print("我的名字是%s"%(dictionary_tk["name"])) #我的名字是Leandro
print("但是你可以叫我% s " %(dictionary _ tk[" nickname "])#但是你可以叫我Tk
印刷体(“顺便说一下,我是%i和% s”%(dictionary_tk[“年龄”],dictionary _ tk[“国籍”])) #顺便说一下,我是巴西人
这里,我们有一组键(年龄)值(24)对,其中键是字符串类型,值是整数类型。就像我们处理列表一样,让我们学习如何向字典中添加元素。很大一部分字典都是关键值。当我们谈到给字典添加元素时,
dictionary_tk = {
“名字”:“Leandro”,
“昵称”:“Tk”,
“国籍”:“巴西人”
}dictionary_tk['age'] = 24
print(dictionary_tk) # { '国籍':'巴西','年龄':24,'昵称':' tk ','姓名':' Leandro'}
我们只需要给字典中的关键字赋值。这里没什么复杂的吧?
循环:在数据结构中循环
正如我们在Python的基础部分所学的,列表循环很简单。Python开发人员通常使用for循环。让我们开始吧:
书架= [
“高效工程师”,
“每周工作4小时”,
“零比一”,
“精益创业”,
“上钩了”
]
书架上的书:
印刷(书籍)
对于书架上的每一本书,我们都可以把它打印出来。非常简单直观,这就是Python。
对于散列数据结构,我们也可以使用For循环,但是我们需要使用键。
字典= { "some_key": "some_value"}
forkeyin字典:
打印(" %s ->;%s"%(key,dictionary[key])# some _ key-& gt;某些值(_ s)
这是一个如何使用它的例子。对于字典中的每个键,我们将输出该键及其对应的值。另一种方法是使用iteritems方法。我们确实命名了两个参数键和值,但这不是必需的。我们可以随意命名。让我们来看看:
dictionary_tk = {
“名字”:“Leandro”,
“昵称”:“Tk”,
“国籍”:“巴西人”,
【年龄】:24
}
forattribute,value in dictionary _ tk . items():print(" My % s是%s"%(attribute,value)) #我的名字是Leandro
#我的昵称是Tk
#我的国籍是巴西
#我的年龄是24
我们可以把我们使用的属性作为字典键的一个参数,它就能正常运行。精彩!
班级
一点理论
对象代表真实世界的实体,如汽车、小狗或自行车。对象有两个主要特征:数据和行为。
汽车是有数据的,比如车轮数量,车门,座位容量。它们也有可显示的行为:加速、停车、显示剩余燃料和其他东西。
在面向对象的过程中,我们把数据看成属性,把行为看成方法。同样,数据->:属性,行为->:方法。从构建的单个对象来看,类就是模型。在现实生活中,我们经常会发现很多同类型的实体,比如汽车。型号和形状都一样(而且都有发动机,轮子,门等。).每辆车都使用相同的型号和部件。
PythON的面向对象编程模式:ON
Python作为一种面向对象的编程语言,具有类和对象的概念。类是对象的模型。类只是一个模型,或者定义属性和行为的方法(正如我们在理论部分所讨论的)。例如,车辆类有自己的属性来定义哪些对象是车辆。车轮数量、油箱类型、座位数量、最快速度都是汽车的属性。有了这些,让我们来看看Python中类的语法:
classVehicle:
通过
我们通过类声明来定义类——就是这样,很简单!对象是类的实例。我们通过命名类来构造一个实例。
汽车=车辆()
print(car)# & lt;__main__。0x7fb1de6c2638 >处的车辆实例。
在这里,汽车是车辆类的对象(或实例)。请记住,我们的车辆类别有四个属性:车轮数量、油箱类型、座位数量和最快速度。当我们构造一个车辆对象时,我们需要设置这些属性。所以在这里,我们需要定义我们的类,它在初始化时可以接收数据。
classVehicle:def__init__(self,车轮数量,油箱类型,座位容量,最大速度):
self . number _ of _ wheels = number _ of _ wheels
self.type_of_tank = type_of_tank
self .座位容量=座位容量
self . maximum _ velocity = maximum _ velocity
我们将使用init方法。我们称之为施工方法。因此,当我们构建一个车辆实体时,我们可以定义这些属性。假设我们都喜欢特斯拉S型,想构造一个这种类型的物体。它是电动的,有四个轮子和五个座位,最大速度为250公里/小时(155英里/小时)。让我们创建这样一个对象:
特斯拉_车型_s=车辆(4,“电动”,5,250)
设置所有属性:四轮+电动“油箱式”+五个座位+最快速度250km/h,但是我们如何得到这些属性的值呢?我们向对象发送一条消息来查询属性值,我们称之为方法,它是对象的行为。让我们一起实现它:
classVehicle:def__init__(self,车轮数量,油箱类型,座位容量,最大速度):
self . number _ of _ wheels = number _ of _ wheels
self.type_of_tank = type_of_tank
self .座位容量=座位容量
self . maximum _ velocity = maximum _ velocity
defnumber_of_wheels(self):
returnself.number_of_wheels
defset_number_of_wheels(self,number):
self.number_of_wheels = number
包括两种方法:轮数和轮数的设置。我们被称为getter和setter,因为前者获取属性值,而后者获取属性的新值。
在Python中,我们可以这样做:用@ property(decorator)定义getter和setter。看看代码:
classVehicle:def__init__(self,车轮数量,油箱类型,座位容量,最大速度):
self . number _ of _ wheels = number _ of _ wheels
self.type_of_tank = type_of_tank
self . seating _ capacity = seating _ capacity
self . max _ velocity = max _ velocity @ property
defnumber_of_wheels(self):
return self . number _ of _ wheels @ number _ of _ wheels . setter
defnumber_of_wheels(self,number):
self.number_of_wheels = number
此外,我们可以将这些方法用作属性:
特斯拉_model_s =车辆(4,‘电动’,5,250)打印(特斯拉_model_s.number_of_wheels) # 4
Tesla _ model _ s . number _ of _ wheels = 2 #将车轮数量设置为2
打印(Tesla _ model _ s . number _ of _ wheels)# 2
这和定义方法有点不一样,定义方法和属性的作用是一样的。例如,当我们设置新的轮子数量时,我们不会将2作为参数,而是将number_of_wheels的值设置为2。这是getter和setter方法的代码形式。但是对于其他的,我们也可以用一些方法,比如“制造噪音”。让我们来看看:
classVehicle:def__init__(self,车轮数量,油箱类型,座位容量,最大速度):
self . number _ of _ wheels = number _ of _ wheels
self.type_of_tank = type_of_tank
self .座位容量=座位容量
self . maximum _ velocity = maximum _ velocity
defmake _ noise(self):print(' VRUuuuuum ')
当我们调用这个方法时,它会返回一个“VRRRRUUUUM”的字符串。
特斯拉_model_s = Vehicle(4,' electric ',5,250)特斯拉_ model _ s . make _ noise()# VRUuuuuum
封装:隐藏信息
封装机制不允许直接访问对象的数据和方法,但同时提供对数据和方法的操作。
“封装可以用来隐藏数据成员和函数成员。在这个定义下,封装意味着对象的内部表示通常对对象的外部是隐藏的”。-维基百科
对象的内部表示对外界是隐藏的,只有对象才能接触到它的内部数据。首先,我们需要了解公共和非公共实例变量和方法是如何工作的。
公共实例变量
对于Python类,我们以结构化的方式初始化公共实例变量。让我们来看看:
classPerson:def__init__(self,first_name):
self.first_name = first_name
在结构方法中,我们使用first_name的值作为公共实例变量的声明。
tk =人(' tk ')打印(TK . first _ name)# = & gt;坦克
在类中,我们不需要声明first_name,实例对象会有一个class属性,用初始化为TK。
tk = Person()print(tk . first _ name)# = >;坦克
太棒了!现在我们知道我们可以使用公共实例变量和类属性。公共部分另一个有趣的地方是我们可以管理变量的值。这是什么意思?对象可以管理和设置其变量值。
为了记住Person类,我们想为它的名字设置另一个值:
tk =人(' TK')tk.first_name = '凯奥'
print(tk.first_name) # = >凯奥
首先,我们只是将kaio分配给实例变量first_name,并更新其值。很简单,因为是公共变量,所以可以这么做。
非公共实例变量
我们这里不使用“私有”这个术语,因为Python中没有真正的私有属性(一般没有不必要的工作量)。——PEP 8
就像公共实例变量一样,我们可以用构造函数或在类中定义非公共实例变量。语法差异如下:非公共实例变量在变量名前使用下划线。
“在Python中,不存在不能在对象内部之外获得‘私有’实例变量的情况。但是在Python代码中,总是遵循一个习惯:变量名要加下划线前缀(比如_spam),名字一般作为API的非公开部分(无论是函数、方法还是数据成员)”-Python软件基金会
有这样一个例子:
classPerson:def__init__(self,first_name,email):
self.first_name = first_name
自我。_email = email
你见过邮件变量吗?它展示了我们如何定义一个非公共变量:
tk= Person('TK ',' tk@mail.com')print(tk。_电子邮件)# tk@mail.com
我们可以获取并更新它。非公共变量只是一种习惯,应该被视为API的非公共部分。所以我们使用一种方法,允许我们在一个类中定义它。一起实现以下两种方法:email和update_email,有助于进一步理解:
classPerson:def__init__(self,first_name,email):
self.first_name = first_name
自我。_email = email
删除电子邮件(自我,新电子邮件):
自我。_email = new_email
defemail(自我):
returnself。电子邮件(_ e)
现在我们可以使用方法更新和获取非公共变量。让我们来看看:
tk = Person('TK ',' tk@mail.com ')
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
1.我们用TK和tk@mail.com初始化一个新对象的名字和电子邮件。
2.使用方法获取非公共变量,然后输出电子邮件。
3.试着在我们班外面设置一个新的电子邮件。
4.我们需要把非公共变量作为API的非公共部分。
5.用我们的示例方法更新非公共变量。
6.成功!我们可以用help方法在类中更新它。
公共方法
我们可以在类外使用公共方法
classPerson:def__init__(self,first_name,age):
self.first_name = first_name
自我。_age =年龄
defshow_age(自我):
returnself。年龄(_ e)
让我们一起来测试一下:
tk = Person('TK ',25)print(TK . show _ age())# = & gt;25
太好了-没问题!
非公开方法
对于非公开的方法,我们做不到。一起实现同一个Person类,但是现在我们将下划线非公有方法,即show_age。
classPerson:def__init__(self,first_name,age):
self.first_name = first_name
自我。_age =年龄
def_show_age(自我):
returnself。年龄(_ e)
现在将通过对象调用此方法:
tk = Person('TK ',25)print(tk。_ show _ age())# = & gt;25
我们可以得到它并更新它。非公共方法只是一种习惯,应该被视为API的非公共部分。下面是一个关于它的使用的例子:
classPerson:def__init__(self,first_name,age):
self.first_name = first_name
自我。_age =年龄
defshow_age(自我):
returnself。_get_age()
def_get_age(自我):
returnself。_agetk = Person('TK ',25)print(TK . show _ age())# = & gt;25
这里我们有一个公共方法叫做show_age,它可以被我们的对象使用(在类之外),而_get_age只能在类定义部分使用(在show_age方法中)。还是那句话,这只是习惯问题。
包摘要
通过封装,我们可以确保对象的内部表示对外部是隐藏的。
遗传:行为和特征
有些物体有一些共同之处:行为和特征
比如我继承了父亲的一些行为和特点。我遗传了他的眼睛和头发作为特征,他的急躁和内向作为行为。
在面向对象编程中,一个类可以继承另一个类的共同特征(数据)和行为(方法)。
让我们看看另一个例子,并用Python实现它。
假设有一辆车,它的属性是:车轮数,座位数,最快速度。我们可以说电动汽车继承了普通汽车的这些相同属性。
classCar:def__init__(自身,车轮数量,座位容量,最大速度):
self . number _ of _ wheels = number _ of _ wheels
self . seating _ capacity = seating _ capacity
self . maximum _ velocity = maximum _ velocity
实现了我们的汽车类别:
my_car = Car(4,5,250)
打印(my_car.number_of_wheels)
打印(my _ car.seating _ capacity)
打印(my_car.maximum_velocity)
一旦初始化,我们就可以使用所有构造的实例变量。非常好!在Python中,我们可以把父类作为子类的参数。电动车可以继承我们的车。
classElectricCar(Car):def _ _ init _ _(自身,车轮数,座位容量,最大速度):Car。__init__(自身、车轮数量、座位容量、最大速度)
就这么简单。我们不需要实现任何其他方法,因为这个类已经有了这些方法(继承自car类)。我们来证明一下:
my_electric_car = ElectricCar(4,5,250)print(my _ electric _ car . number _ of _ wheels)# = >四
print(my _ electric _ car . search _ capacity)# = >五
print(my _ electric _ car . maximum _ velocity)# = >250
非常漂亮!
仅此而已!
我们已经了解了很多Python的基础知识:
Python的变量如何工作Python条件声明如何实现Python循环如何实现如何使用List:Collection|Array字典键值对集合如何利用这些数据结构实现循环对象和类属性作为对象的数据方法作为对象的行为使用Python的getters和setters和property装饰器封装:隐藏信息继承:行为和特性恭喜!你已经完成了关于Python的困难部分。
如果你想学习完整的Python课程,并学习更多的编程技巧和项目构建,建议尝试一个月的Python训练营部分
更多关于我日志学习和编程精通的故事和帖子,可以关注我发布的《文艺复兴开发者》。
玩得开心,不断学习,不断编程!
我的Instagram,Twitter,GithubLinkdle。
想继续查看本文的相关链接和参考文献?
戳链接:
http://www.gair.link/page/TextTranslation/830
AI研究会每天更新激动人心的内容。点击文章结尾[阅读原文]观看更多精彩内容:
良心推荐:20周学习计算机科学的经验(有资源)
多目标跟踪器:用OpenCV (C++/Python)进行多目标跟踪
为计算机视觉生成大的、合成的、标记的和真实的数据集
为了纪念保罗·艾伦,他的科技界还有哪些大人物值得相信?
等你翻译:
自动文本提取
用四种卷积神经网络轻松分类时装图像
利用SKIL和YOLO构建产品级目标检测系统
25个鼓舞人心的开源机器学习项目
额外额外额外~
如果想获得更多AI领域相关的学习资源,可以去AI研究会的资源板块下载。
所有资源现在在有限的时间内都是免费的。欢迎来到社区资源中心
(http://www.gair.link/page/resources)下载~
1.《python入门 新手必看:手把手教你入门 Python》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《python入门 新手必看:手把手教你入门 Python》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1154949.html