惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
博客园 - 司徒正美
V
Vulnerabilities – Threatpost
月光博客
月光博客
C
CXSECURITY Database RSS Feed - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Microsoft Azure Blog
Microsoft Azure Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Jina AI
Jina AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News: Ask HN
Hacker News: Ask HN
S
Security Affairs
V
Visual Studio Blog
Schneier on Security
Schneier on Security
T
Tailwind CSS Blog
Martin Fowler
Martin Fowler
V2EX - 技术
V2EX - 技术
博客园 - Franky
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
D
DataBreaches.Net
O
OpenAI News
Forbes - Security
Forbes - Security
云风的 BLOG
云风的 BLOG
Google Online Security Blog
Google Online Security Blog
博客园 - 三生石上(FineUI控件)
T
Tor Project blog
T
Tenable Blog
Latest news
Latest news
N
News and Events Feed by Topic
博客园_首页
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
美团技术团队
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
T
Threat Research - Cisco Blogs
SecWiki News
SecWiki News
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
1. Python的特性和语法 - 少数派
2023-08-02 · via 少数派

千里之行始于足下。

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

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

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

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

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

image-20230727185715840

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

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

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

课程说明

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

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

一句话总结,就是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异常:

image-20230727202715960

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

常见的强类型语言包括:

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

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

image-20230727203234464

弱类型语言包括:

  • 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来解决更复杂的问题。

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