千里之行始于足下。
大家好,我是茶桁,这里是我们《AI秘籍》的第一节,让我们先从Python来开始好好的打好基础。
第一堂课,我们先从最基础的Python特性开始,当然,还有一些基本语法。
上来就开始讲特性和语法,说明我们将会遗弃惯用的“环境搭建”等更基础的内容,那些内容网上已经很丰富了,一查一大堆,并且相对来说内容都比较独立,所以希望还不太会搭建开发环境的同学可以自己去搜索看看。或者,其实从我这篇《Apple M1的AI环境搭建》也能完全搭建起一个完整的Python开发环境。(Windows和Linux的同学就只能在网上搜索一下看看了。)
总体来说,Python语言的使用率越来越高,它不仅可以用于GUI开发、Web开发,还能进行数据预处理、数据探索性分析(EDA),更是进行数据挖掘、机器学习、深度学习等任务的首选语言。
基于Python的包也越来越丰富,各种优秀的库层出不穷。根据"Tiobe编程语言排行榜"的最新统计,Python结束了自己攀爬的势头,已经开始长期占据榜首。Python的发展势头让人们看到了它在各个领域都有着广阔的应用前景。
得益于Python语言的简洁语法和高效开发能力,使得集成系统变得非常方便。
与此同时,Python相关的就业机会也非常丰富,待遇也相当优渥。
因此,无论从易用性、就业机会还是薪酬待遇来看,Python都是IT从业者必备的编程语言之一。
接下来,让我们真实开始吧。
一句话总结,就是Python是一门动态的、强类型语言。
在了解“动态语言”之前,我们先来了解一下“类型检查”。
类型检查是验证变量或表达式的数据类型是否符合语言规定的类型约束的过程。它用于确保程序在运行时不会出现类型错误,例如将一个字符串与一个整数相加或将一个数字与一个布尔值进行比较。类型检查旨在捕捉潜在的类型不匹配错误,并在编译时或运行时提供相应的警告或错误信息。
如果类型检查发生在程序运行阶段(运行时),则称为"动态类型语言"(dynamically typed languages)。常见的动态语言包括:
有动态语言,则必然会有其相对的“静态语言”,常见的“静态类语言”包含:
当然,这些都只是一部分常见的动态语言和静态类型语言,还有许多其他编程语言也属于这两个类别。在实际开发中,选择使用动态语言还是静态类型语言取决于项目的需求、开发团队的喜好和项目的规模等因素。每种类型的语言都有其独特的特点和适用场景,因此选择合适的语言是非常重要的。
强类型语言(Strongly Typed Language)要求在编程过程中严格定义和遵守数据类型规则。在强类型语言中,变量必须明确地声明其数据类型,并且在运行时不能隐式地改变数据类型。这意味着变量在使用之前必须进行类型转换,以确保数据的一致性和安全性。
在强类型语言中,编译器或解释器会对数据类型进行严格的检查,如果发现不符合类型规则的操作,就会报错并拒绝执行。这样可以防止一些潜在的类型错误,确保程序的稳定性和正确性。
强类型语言的主要特点包括:
这么说可能并不直接,我们来拿个示例,我们输入两行代码:
a = 5
a = a + 's'
然后我们会看到程序抛出TypeError异常:
这个异常意思是不支持int变量
和str变量
相加。
常见的强类型语言包括:
一样的,对应的就是弱类型语言。弱类型语言容易与其他类型混合计算,其代表是JavaScript。(有一说一,我还挺喜欢JS的这个特性的)
弱类型语言包括:
当然,对于这个划分其实并不是所有人都一致的,有些人还是会把Python归结为弱类型语言,而通常意义上,大家会把C++划分到弱类型。这里我们不去争论,仅仅记住动态/静态、弱类型/强类型的区别就行了。
基本语法里,我们介绍一下Python的命名规则、缩进原则、特殊关键字和特殊运算符四个方面。
Python的变量命名规则包括以下几条:
Python的变量命名习惯一般遵守蛇形命名法(snake case):
与Java的命名方法不同,Java通常使用驼峰命名法(camel case)来命名变量和方法名,其中第一个单词首字母小写,后续单词首字母大写,例如:myVar、getStoreCount()。而Python则更倾向于使用蛇形命名法。这是因为Python社区普遍认可了蛇形命名法,使得代码在风格上更加一致和易读。
Python最具特色的特点之一是使用缩进来表示代码的逻辑层次,而不是像Java和C++中使用{}。Python的缩进层级结构非常重要,它代表着代码的逻辑结构。
通常情况下,Python的缩进为4个空格字符。例如,在定义一个Book类并重写add方法来计算两本书的库存量时,代码如下所示:
class Book(object):
# 定义类的参数
def __init__(self, b_id, b_name, b_store_count):
self.b_id = b_id
self.b_name = b_name
self.b_store_count = b_store_count
# 重写加法操作
def __add__(self, book):
return self.b_store_count + book.b_store_count
# 创建两个Book类的实例
python_intro_book = Book(1, '金瓶梅', 100)
ml_intro_book = Book(2, '玉蒲团', 200)
# 求两本书的总销量
sales_cnt = python_intro_book + ml_intro_book
print(sales_cnt)
上述代码定义了一个Book类,包括初始化方法__init__
和重写的加法操作__add__
。通过这种缩进结构,我们可以清晰地看到代码的层次结构和逻辑。
在Python编码中,缩进格式、行间空行数、变量和等号之间的空格等都遵循PEP8(Python Enhancement Proposal 8)规范。可以使用autopep8
包来自动实现PEP8规范,保持代码的规范和易读性。
Python有35个关键字,这些关键字具有特殊的含义,不能用于自定义变量名,否则会引起语法错误。以下是Python的关键字列表:
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
这些关键字在Python编程中扮演着重要的角色。其中,True
和False
用于表示布尔值的真和假,类似于Java中的true
和false
;None
表示空值,类似于Java中的null
;Python使用not
表示逻辑反操作,而Java使用!
;Python使用and
表示两个条件同时满足,Java使用&&
;Python使用or
表示两个条件满足其一,Java使用||
;Python使用elif
,而Java使用else if
。
还有一些比较特殊的关键字,例如:
del
用于删除可迭代对象中的某个元素;def
用于定义函数;yield
的关键字用于定义生成器(generator)函数;global
和nonlocal
是在Python函数式编程的闭包场景中使用的。pass
关键字用于占位,当你在定义函数或类时暂时不想添加具体的实现时,可以使用pass
关键字。
这些关键字的具体用法将在后续文章中更详细地介绍。在此,先对它们有一个整体的认识即可。
Python的运算符包括:
+ - * ** / // % @
<< >> & | ^ ~ :=
< > <= >= == !=
大部分运算符在其他编程语言中也是常见的,不过这里重点介绍三个比较特殊的运算符://
、**
和:=
。
//
运算符用于两个数值相除并向下取整,类似于Python的math.floor()
功能:
print(5 // 2) # 输出: 2
print(5 // 4.5) # 输出: 1.0
**
运算符用于进行幂运算:
print(2 ** 3) # 输出: 8
:=
运算符是在Python 3.8版本中引入的,被形象地称为“海象运算符”。它可以在表达式中同时为变量赋值和比较:
n = len(a)
if n > 10:
print(f"{n}大于10")
可以用“海象运算符”简化为:
if (n := len(a)) > 10:
print(f"{n}大于10")
Python的比较运算符还支持链式比较,使得编码更加方便:
i = 3
print(1 < i < 3) # 输出: False
print(1 < i <= 3) # 输出: True
此外,运算符@
用于装饰器功能,本专栏会深入解释它的本质,并提供相关案例,帮助你学会使用装饰器。
在本文中,我们一起学习了Python这门功能强大的编程语言。Python的两大特性是动态语言和强类型语言。
动态语言意味着在运行时执行类型检查,而不是在编译时。这使得Python更加灵活和易于使用,允许我们在代码中动态创建和修改变量。Python的动态特性使其成为进行数据预处理、数据探索性分析、数据挖掘、机器学习和深度学习等任务的首选语言。
另一方面,强类型语言意味着变量的类型在声明时就已经确定,并且不能进行隐式类型转换。这确保了代码的稳定性和安全性,帮助我们避免一些常见的错误。
在Python的基本语法方面,我们学习了变量命名规则,缩进原则,特殊关键字和特殊运算符。Python的命名规则允许使用英文、数字和下划线,但不能以数字开头,并且区分大小写。特殊关键字包括Python的35个关键字,如if、else、for、while等等,它们有着特定的含义和用途。特殊运算符中,//用于整数除法,**用于幂运算,:=是在Python 3.8版本中引入的“海象运算符”,使得在表达式中同时为变量赋值和比较变得更加方便。
通过学习Python的特性和基本语法,我们已经具备了编写简单到复杂的程序的基础知识。Python的易用性、丰富的库和社区支持,使其成为一个优秀的编程语言,适用于各种应用场景。无论是初学者还是有经验的开发者,Python都是一个值得深入学习和探索的语言。
希望本文能够为读者提供了一个对Python的初步认识,并激发了你继续学习和研究的兴趣。在接下来的学习过程中,我们可以更深入地了解Python的各种功能和应用领域,并用Python来解决更复杂的问题。
好了,我是茶桁,咱们下节见。