1. Python的特性和语法

更新於 發佈於 閱讀時間約 14 分鐘

千里之行始于足下。

大家好,我是茶桁,这里是我们《AI秘籍》的第一节,让我们先从Python来开始好好的打好基础。

第一堂课,我们先从最基础的Python特性开始,当然,还有一些基本语法。

上来就开始讲特性和语法,说明我们将会遗弃惯用的“环境搭建”等更基础的内容,那些内容网上已经很丰富了,一查一大堆,并且相对来说内容都比较独立,所以希望还不太会搭建开发环境的同学可以自己去搜索看看。或者,其实从我这篇《Apple M1的AI环境搭建》也能完全搭建起一个完整的Python开发环境。(Windows和Linux的同学就只能在网上搜索一下看看了。)

总体来说,Python语言的使用率越来越高,它不仅可以用于GUI开发、Web开发,还能进行数据预处理、数据探索性分析(EDA),更是进行数据挖掘、机器学习、深度学习等任务的首选语言。

基于Python的包也越来越丰富,各种优秀的库层出不穷。根据"Tiobe编程语言排行榜"的最新统计,Python结束了自己攀爬的势头,已经开始长期占据榜首。Python的发展势头让人们看到了它在各个领域都有着广阔的应用前景。

raw-image

得益于Python语言的简洁语法和高效开发能力,使得集成系统变得非常方便。

与此同时,Python相关的就业机会也非常丰富,待遇也相当优渥。

因此,无论从易用性、就业机会还是薪酬待遇来看,Python都是IT从业者必备的编程语言之一。

课程说明

  1. 本课程所使用语言为Python3
  2. 本课程将会有一些案例,用于辅助学习和理解知识点。
  3. 基本所有案例均使用Jupyter Notebook做演示
  4. 一些项目会用到软件工程和设计模式的思想。
  5. 本课程无任何文学色彩,重点在于简单通俗易懂。

接下来,让我们真实开始吧。

Python的两大特性

一句话总结,就是Python是一门动态的、强类型语言。

动态语言

在了解“动态语言”之前,我们先来了解一下“类型检查”。

类型检查是验证变量或表达式的数据类型是否符合语言规定的类型约束的过程。它用于确保程序在运行时不会出现类型错误,例如将一个字符串与一个整数相加或将一个数字与一个布尔值进行比较。类型检查旨在捕捉潜在的类型不匹配错误,并在编译时或运行时提供相应的警告或错误信息。

如果类型检查发生在程序运行阶段(运行时),则称为"动态类型语言"(dynamically typed languages)。常见的动态语言包括:

  • Python
  • JavaScript
  • Ruby
  • PHP
  • Lua
  • Perl
  • Shell脚本

有动态语言,则必然会有其相对的“静态语言”,常见的“静态类语言”包含:

  • C
  • C++
  • Java
  • C#
  • Swift
  • Kotlin
  • Rust
  • TypeScript

当然,这些都只是一部分常见的动态语言和静态类型语言,还有许多其他编程语言也属于这两个类别。在实际开发中,选择使用动态语言还是静态类型语言取决于项目的需求、开发团队的喜好和项目的规模等因素。每种类型的语言都有其独特的特点和适用场景,因此选择合适的语言是非常重要的。

强类型语言

强类型语言(Strongly Typed Language)要求在编程过程中严格定义和遵守数据类型规则。在强类型语言中,变量必须明确地声明其数据类型,并且在运行时不能隐式地改变数据类型。这意味着变量在使用之前必须进行类型转换,以确保数据的一致性和安全性。

在强类型语言中,编译器或解释器会对数据类型进行严格的检查,如果发现不符合类型规则的操作,就会报错并拒绝执行。这样可以防止一些潜在的类型错误,确保程序的稳定性和正确性。

强类型语言的主要特点包括:

  1. 静态类型检查:在编译时或解释时进行类型检查,检查数据类型是否匹配,避免类型不匹配的错误。
  2. 显式类型转换:在进行类型转换时,必须显式地指定转换的方式,例如强制类型转换。
  3. 不支持隐式类型转换:强类型语言不允许在不明确声明的情况下将一个数据类型隐式地转换为另一个数据类型。

这么说可能并不直接,我们来拿个示例,我们输入两行代码:

 a = 5
 a = a + 's'

然后我们会看到程序抛出TypeError异常:

raw-image

这个异常意思是不支持int变量str变量相加。

常见的强类型语言包括:

  • Java
  • C++
  • C#
  • Python
  • Swift
  • Kotlin
  • TypeScript
  • Rust
  • Pascal
  • Ada
  • Delphi

一样的,对应的就是弱类型语言。弱类型语言容易与其他类型混合计算,其代表是JavaScript。(有一说一,我还挺喜欢JS的这个特性的)

raw-image

弱类型语言包括:

  • JavaScript
  • PHP
  • Perl
  • Ruby
  • Tcl
  • Bash
  • AWK
  • MATLAB (在一些操作上可以被视为弱类型)

当然,对于这个划分其实并不是所有人都一致的,有些人还是会把Python归结为弱类型语言,而通常意义上,大家会把C++划分到弱类型。这里我们不去争论,仅仅记住动态/静态、弱类型/强类型的区别就行了。

基本语法

基本语法里,我们介绍一下Python的命名规则、缩进原则、特殊关键字和特殊运算符四个方面。

命名规则

Python的变量命名规则包括以下几条:

  1. 允许包括英文、数字以及下划线(_),不能以数字开头。
  2. 名称区分大小写,例如"myVar"和"myvar"是两个不同的变量。
  3. 以单下划线(_)开头的变量通常用作受保护的变量,表示应该将其视为私有,不建议直接访问。虽然Python没有严格的访问控制,但这是一种约定俗成的做法。
  4. 以双下划线(__)开头和结尾的变量是Python中的特殊标识符,具有特殊的意义,如类的私有成员或专用标识符。

Python的变量命名习惯一般遵守蛇形命名法(snake case):

  1. 一般变量命名使用小写字母,多个单词之间用下划线连接,例如:book_id、book_store_count。
  2. 类名首字母大写,如Python内置模块collections.abc中的Iterable类,我们自定义的Book类等。
  3. 类方法名也使用小写字母,多个单词之间用下划线连接,例如:get_store_count()。

与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编程中扮演着重要的角色。其中,TrueFalse用于表示布尔值的真和假,类似于Java中的truefalseNone表示空值,类似于Java中的null;Python使用not表示逻辑反操作,而Java使用!;Python使用and表示两个条件同时满足,Java使用&&;Python使用or表示两个条件满足其一,Java使用||;Python使用elif,而Java使用else if

还有一些比较特殊的关键字,例如:

  • del用于删除可迭代对象中的某个元素;
  • def用于定义函数;
  • 带有yield的关键字用于定义生成器(generator)函数;
  • globalnonlocal是在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来解决更复杂的问题。

好了,我是茶桁,咱们下节见。

留言
avatar-img
留言分享你的想法!
avatar-img
茶桁的沙龍
9會員
62內容數
从基础开始,再到Python,然后是CV、BI、NLP等相关技术。从头到尾详细的教授一边人工智能。
茶桁的沙龍的其他內容
2023/08/22
虽然是最后一节课了,但是本节课的任务却是一点也不轻松。相比较而言,如果你以后从事的是数据治理和分析工作,那么本节课的内容可能会是你在今后工作中用到的最多的内容。我们需要学习行列索引的操作,数据的处理,数据的合并,多层索引,时间序列,数据的分组聚合(重点)。最后,我们会有一个案例的展示。
Thumbnail
2023/08/22
虽然是最后一节课了,但是本节课的任务却是一点也不轻松。相比较而言,如果你以后从事的是数据治理和分析工作,那么本节课的内容可能会是你在今后工作中用到的最多的内容。我们需要学习行列索引的操作,数据的处理,数据的合并,多层索引,时间序列,数据的分组聚合(重点)。最后,我们会有一个案例的展示。
Thumbnail
2023/08/21
Hi,大家好。我是茶桁。 上一节课中,我们学习了matplotlib. 实际上,我们已经进入了数据可视化阶段。 可是在上一节课中,所有的数据都是我们固定写好的,包括两个电影的数据展示的案例(柱状图和直方图),都是我们将数据手动写成了数据列表,然后直接使用。 在我们平时的工作中,不太有那么多的机
Thumbnail
2023/08/21
Hi,大家好。我是茶桁。 上一节课中,我们学习了matplotlib. 实际上,我们已经进入了数据可视化阶段。 可是在上一节课中,所有的数据都是我们固定写好的,包括两个电影的数据展示的案例(柱状图和直方图),都是我们将数据手动写成了数据列表,然后直接使用。 在我们平时的工作中,不太有那么多的机
Thumbnail
2023/08/21
Hi, 大家好。我是茶桁。 在上一节课中,我们结束了Python正式的所有内容,但是咱们的Python课程还未结束。从这节课开始,我们要来学习一下Python的第三方库。 Python的生态非常完善也非常活跃,我们不太可能讲目前所有的第三方库全部都介绍一遍,只介绍几个有影响力并且和处理数据相关的
Thumbnail
2023/08/21
Hi, 大家好。我是茶桁。 在上一节课中,我们结束了Python正式的所有内容,但是咱们的Python课程还未结束。从这节课开始,我们要来学习一下Python的第三方库。 Python的生态非常完善也非常活跃,我们不太可能讲目前所有的第三方库全部都介绍一遍,只介绍几个有影响力并且和处理数据相关的
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這一篇主要來談談公司的團隊在於開發一套系統時,對於程式語言開發的初入者需要學些什麼樣的重要技能,對應到Python我們應該學哪些? 畢竟我們的時間、資源、精神都有限,不可能每一樣都學習到深入,所以我們需要的是正在業界的前輩所分享的經驗談,正好您也很幸運的看到這一篇,濃縮了軟體開發生涯中幾年的經驗,並
Thumbnail
這一篇主要來談談公司的團隊在於開發一套系統時,對於程式語言開發的初入者需要學些什麼樣的重要技能,對應到Python我們應該學哪些? 畢竟我們的時間、資源、精神都有限,不可能每一樣都學習到深入,所以我們需要的是正在業界的前輩所分享的經驗談,正好您也很幸運的看到這一篇,濃縮了軟體開發生涯中幾年的經驗,並
Thumbnail
Hi,你好。我是茶桁。 非常开心能够和再次见面,能够和大家一起来学习人工智能的这个课程部分。接下来我会给大家一个既内容充实又包含了一点点难度的这样的一个课程。 我希望上完我的课程之后,能够有所收获。能够收获到自己看本课程时期望的目标。 我们首先要有一个信任,你相信我基本上常见的我都是遇到过
Thumbnail
Hi,你好。我是茶桁。 非常开心能够和再次见面,能够和大家一起来学习人工智能的这个课程部分。接下来我会给大家一个既内容充实又包含了一点点难度的这样的一个课程。 我希望上完我的课程之后,能够有所收获。能够收获到自己看本课程时期望的目标。 我们首先要有一个信任,你相信我基本上常见的我都是遇到过
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 ✅ 在這裡可以學到什麼 這裡您可以學到業界開發的實戰
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 ✅ 在這裡可以學到什麼 這裡您可以學到業界開發的實戰
Thumbnail
為什麼要學Python? 我回不去了 全球工程師都在用! 根據 TIOBE調查 全球程式語言使用排名,Python連續好幾年第一名,代表最多人使用,選擇程式語言當然是要選最多人用的。 程式語言趨勢圖 Python可以做什麼? 這種事情問ChatGTP就好XD
Thumbnail
為什麼要學Python? 我回不去了 全球工程師都在用! 根據 TIOBE調查 全球程式語言使用排名,Python連續好幾年第一名,代表最多人使用,選擇程式語言當然是要選最多人用的。 程式語言趨勢圖 Python可以做什麼? 這種事情問ChatGTP就好XD
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
Python是一款多功能且易於學習的程式語言,廣泛用於Web開發、數據分析和人工智能。學習起來有其挑戰性,但初學者可在短時間內體驗到成就感。市場對Python需求旺盛,成為職場上的重要技能。我們的課程提供從Python到PHP的全面學習,並重點教授實戰技巧如爬蟲和資料視覺化。現是投身編程的絕佳時機。
Thumbnail
Python是一款多功能且易於學習的程式語言,廣泛用於Web開發、數據分析和人工智能。學習起來有其挑戰性,但初學者可在短時間內體驗到成就感。市場對Python需求旺盛,成為職場上的重要技能。我們的課程提供從Python到PHP的全面學習,並重點教授實戰技巧如爬蟲和資料視覺化。現是投身編程的絕佳時機。
Thumbnail
千里之行始于足下。 大家好,我是茶桁,这里是我们《AI秘籍》的第一节,让我们先从Python来开始好好的打好基础。 第一堂课,我们先从最基础的Python特性开始,当然,还有一些基本语法。 上来就开始讲特性和语法,说明我们将会遗弃惯用的“环境搭建”等更基础的内容,那些内容网上已经很丰富了,一查
Thumbnail
千里之行始于足下。 大家好,我是茶桁,这里是我们《AI秘籍》的第一节,让我们先从Python来开始好好的打好基础。 第一堂课,我们先从最基础的Python特性开始,当然,还有一些基本语法。 上来就开始讲特性和语法,说明我们将会遗弃惯用的“环境搭建”等更基础的内容,那些内容网上已经很丰富了,一查
Thumbnail
很多文章都說未來是人工智慧的時代,程式語言是必備能力,靠著一時腦熱蒐集了許多資訊,我想說學習不用很厲害才開始,只要有興趣就開始吧,就算用不到也沒關係!
Thumbnail
很多文章都說未來是人工智慧的時代,程式語言是必備能力,靠著一時腦熱蒐集了許多資訊,我想說學習不用很厲害才開始,只要有興趣就開始吧,就算用不到也沒關係!
Thumbnail
資訊時代下,學習程式蔚為風潮。許多行業需要跨領域人才,結合程式與專業知識做應用。 如果是初次想學程式,但是不確定興趣領域,又不知道要如何選擇,既期待又害怕受傷害的情形下,我會建議新手從「容易看得見成果」的方向去嘗試,往後是否能保持熱忱與興趣,其實很大的原因是由「成就感」所支撐的。
Thumbnail
資訊時代下,學習程式蔚為風潮。許多行業需要跨領域人才,結合程式與專業知識做應用。 如果是初次想學程式,但是不確定興趣領域,又不知道要如何選擇,既期待又害怕受傷害的情形下,我會建議新手從「容易看得見成果」的方向去嘗試,往後是否能保持熱忱與興趣,其實很大的原因是由「成就感」所支撐的。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News