一、 引言为什么选择浩如烟海的编程语言里头, 它靠着简洁的语法, 依靠强大的生态, 凭借极高的开发效率, 变成了现今世界上颇受欢迎的编程语言当中的一个。不管是人工智能领域, 还是数据分析范畴, 亦或是Web后端开发方面, 又或者是自动化脚本这块, 它都拥有着不可替代的位置。其所呈现的设计理念着重突出代码具备的可读性性能。其缔造者 Guido van 于 1991 年将这一语言予以发布之际, 便已然确立了一项核心观念:促使程序员能够借助更少数量的代码去表述复杂的逻辑思维。在该语言范畴内, 你并不需要如同在 C 或者 Java 之中那般去撰写大量的模板样式代码, 这便使得新手能够将更多的精力聚焦于“解决问题”这个行为本身, 而非被繁杂琐碎的语法规则所束缚羁绊。掀起 的交互式命令行的开启盖, 输入 这个, 你所能视见的是 的有着 《禅宗The Zen of》之称的相关内容:这篇文章将带您践行这些哲学系统掌握 的核心基础。二、 核心机制为, 解释型语言, 以及代码缩进, 其一, 是解释型语言的运作方式。它属于一门解释型语言, 这表明你所写下的 代码, 也就是.py 文件, 并不须如同 C 语言那般先经过编译成为机器码, 即 0 和 1, 而是依靠一个叫作 解释器 的程序, 于运行的时候逐行去读取、翻译而后执行。这样的机制带来了极大的便利, 代码能够在多系统上无缝跨平台运行, 像 macOS 和 Linux 等。2. 缩进 的灵魂大部分编程语言, 比方说C、Java这类, 它们借助大括号{}去明确代码块的范围。然而, 却别具一格地运用了缩进这种方式, 一般而言是4个空格, 从而展现出代码内在的层次架构。# 其他语言的写法伪代码 if (is_raining) { bring_umbrella(); } # Python 的写法 if is_raining: bring_umbrella()这种有着明确强制要求的缩进规定, 不但省却了数量众多的括号, 而且就连在物理层面上也确保了无论是谁写下的所有代码竟都具备着高度一致的视觉上的整洁程度呢。倘若你出现被视作缩进方面存在差错的情况, 那样就会径直致使拒绝对其行进执行这样的结果发生。三、 变量与底层内存模型1. 变量不需要声明类型在其中, 变量相较于一个固定大小的容器而言更像是粘贴于对象之上的“标签”。你无需提前声明变量的类型, 在代码步入运行的那一刻之际, 解释器会自行推断出变量的类型。这样的特性被称作动态类型。x 10 # x 现在是一个整数 (int) x Hello # x 现在变成了一个字符串 (str)这是合法的2. 万物皆对象在特定的世界当中, 数字、字符串, 甚至函数自身, 全部都是对象。当你写下 a 100 时, 于内存以内创建了一个叫100 的整数对象, 而后把变量名 a 当作一个标签关联到了这个对象上面。至关重要的是理解这一点, 要是我们接着写b a, 并非复制了一份100, 而是使得标签b也贴到了同一个对象100之上, 你能够借助id()函数来查看对象于内存里的地址:a 100 b a print(id(a) id(b)) # 输出 True说明它们指向内存中的同一个地方四、 基础数据类型全解给出了好几种极为强大的内置数据类型, 这些是构架所有繁杂程序的基础。1. 数字类型 ( Types)age 25 temperature 36.6 is_admin True2. 字符串 (str)以处理文本为用途的, 在其中使用频率处于较为靠前位置的数据类型里, 字符串是其中之一, 你能够运用单引号或者双引号去对其进行定义。字符串格式化 (f-)3.6 引入了 f-这是目前最优雅的字符串拼接方式name Alice age 30 greeting f你好我叫 {name}今年 {age} 岁。 print(greeting) # 输出你好我叫 Alice今年 30 岁。字符串切片 ()提供了一种极具表现力的方式来提取字符串的子串语法为起始位置 : 结束位置 : 步长text Python Programming print(text[0:6]) # 输出 Python (提取索引 0 到 5) print(text[-11:]) # 输出 Programming (从倒数第 11 个字符到结尾) print(text[::-1]) # 输出 gnimmargorP nohtyP (步长为-1实现字符串反转)五、 核心数据结构 (Data )在你有着存储多个数据这般要求之际, 单独的变量已经无法满足所需了。有着四种被内置起来的较为高级的数据结构被提供了出来。1. 列表 (List)集合里能把有序可变之它称作列表咧嘿, 任何类型对象皆可一股脑地安置于同一个给定列表里头, 列表靠方括号进行定义。fruits [apple, banana, cherry] fruits.append(orange) # 在末尾添加元素 fruits.insert(1, mango) # 在索引 1 的位置插入元素 popped_fruit fruits.pop()# 移除并返回最后一个元素动态数组构成了列表的底层, 它对索引访问、末尾追加操作的支持速度极为快速。2. 元组 (Tuple)元组跟列表极为相像, 不过存在着这么一个致其于死地的差异, 那便是: 元组是不许改变的。一旦予以创建之后, 你就不可以去对里面的元素进行修改、增添或者删除。元组借助圆括号来予以定义。coordinates (116.40, 39.90) # 经纬度通常是不应该被修改的 # coordinates[0] 100.00 # 这行代码会导致 TypeError 报错元组有着其存在的意义, 这个意义在于保护数据, 使其不会被意外地修改, 并且与此同时, 因为元组具有不可改变这样的特性, 所以在内存占用方面和处理速度方面, 元组相比于列表要略微更具优势。3. 字典 ()在所有数据结构里, 字典是最为强大的那个, 没有别的能与之相比。它存储数据所采用的方式是键值对, 也就是 Key-Value pairs。可以将它设想成一本新华字典, 借助查找拼音, 也就是 Key 的方式, 能够在瞬间找到与之对应的汉字解释, 也就是 Value。字典是运用大括号 {} 来进行定义的。user_info { username: coder_bob, age: 28, skills: [Python, SQL, Git] } # 访问数据 print(user_info[username]) # 输出: coder_bob # 修改或添加数据 user_info[email] bobexample.com字典的底层借助哈希表Hash Table达成, 这表明不管字典之中存有十个元素, 也许是十万个元素, 依据Key去查找Value时, 其速度基本上是同样快的。标点符号。4. 集合 (Set)集合是这样一种集合, 它没顺序, 且里面没有重复存在的元素, 要是你有一批数据需要去除重复的, 或者要做数学方面的交集、并集运算, 那集合就是最好的选择。# 去重应用 numbers [1, 2, 2, 3, 3, 4] unique_numbers set(numbers) # 结果为 {1, 2, 3, 4} # 集合运算 set_a {1, 2, 3} set_b {3, 4, 5} print(set_a set_b) # 交集{3} print(set_a | set_b) # 并集{1, 2, 3, 4, 5}六、 控制流让代码拥有逻辑在程序运行过程中, 常常会依据不一样的条件, 去执行有差异的代码, 不然就是反复地执行某特定代码, 如此一来, 掌控这种流动情况的语句就显得必不可少了。1. 条件判断 (if - elif - else)的条件判断语法极其直观score 85 if score 90: print(优秀) elif score 80: print(良好) elif score 60: print(及格) else: print(需要补考)True与False能够当作条件, 空列表、空字典{}此为一种特定形式、数字0、空字符串以及None, 在进行条件判断时, 它们都会被看作是False被称作Falsy值, 除此之外的其他情况均为True, 这就会让代码能够被编写得极为简洁:tasks [] if not tasks: # 更优雅的写法不需要写 if len(tasks) 0: print(今天没有任务)2. 循环结构 (for 与 while)for循环, 被用于对任何“可迭代对象”比如列表、字符串、字典等进行遍历:# 遍历列表 for hero in [Batman, Superman, Flash]: print(hero) # 结合 range() 函数生成数字序列循环 5 次 for i in range(5): print(f当前数字是{i})while 循环则在给定条件为真时持续执行countdown 3 while countdown 0: print(countdown) countdown - 1 print(发射)此外, 该循环还支持break, 也就是彻底跳出循环, 以及支持某关键字, 此关键字能跳过本次循环剩余代码, 进而直接进入下一次循环。七、 函数代码的模块化与复用一旦你的代码变得愈发冗长, 你便能够发觉某些逻辑被循环运用。到达此时就必须将它们封装成为函数 ()。函数恰似一个黑匣子, 你把输入参数给予它, 它为你予以处理, 接然后给你输出返回值。1. 定义基本函数使用 def 关键字定义函数def calculate_area(radius): 这是一个文档字符串(Docstring)用于说明函数的作用。 计算圆的面积并返回。 pi 3.14159 area pi * (radius ** 2) return area result calculate_area(5)2. 强大的参数机制的函数参数机制极其灵活def create_profile(name, age, countryChina): print(f{name}, {age}岁, 来自 {country}) create_profile(张三, 25) # 使用默认国家 create_profile(age30, name李四) # 关键字传参顺序无关紧要 create_profile(John, 40, countryUSA) # 覆盖默认参数3. 可变参数 (*args 与 )倘若没法确定函数将要接收的参数数量究竟有多少, 那么能够采用 *args 去接收任凭数量的位置参数把这些参数打包成元组, 运用**去接收任凭数量的关键字参数将这些参数打包成字典。def make_pizza(size, *toppings): print(f正在制作 {size} 寸披萨包含配料) for topping in toppings: print(f- {topping}) make_pizza(12, 芝士, 蘑菇, 意大利香肠)八、 面向对象编程 (OOP) 初探它属于一门具备多范式特性的语言, 对于面向对象编程有着全面的支持, 面向对象的关键核心思想在于, 把“数据属性”以及“处理数据的行为方法”整合在一起, 进而构建出一个“类Class”。class Dog: # 构造函数初始化方法在创建对象时自动调用 def __init__(self, name, breed): self.name name # 属性 self.breed breed # 属性 # 实例方法 def bark(self): print(f[{self.breed}] {self.name} 汪汪叫了起来) # 实例化根据 Dog 类创建一个具体的狗对象 my_dog Dog(旺财, 中华田园犬) my_dog.bark()九、 异常处理与文件读写1. 应对错误try -身处真实的世界里, 代码常常会碰到意外状况, 诸如网络断开, 文件不存在, 用户输入有误等现象。假如此类情况不予以处理, 程序接下来便会直接崩溃。可考虑运用try-块去捕获异常, 并以优雅的方式来处理异常。try: num int(input(请输入一个除数)) result 100 / num print(f结果是{result}) except ZeroDivisionError: print(错误除数不能为零) except ValueError: print(错误请输入有效的纯数字) finally: print(无论是否发生错误这行代码都会执行。)2. 文件操作上下文管理器 (with 语句)有读写文件这样常见的需求, 在相关操作里, 最佳实践是运用 with 关键字, with 叫“上下文管理器”, 它会在代码块执行完之后, 自动帮着关闭文件, 还能释放系统资源, 哪怕期间出现了异常也是如此。# 写入文件 with open(note.txt, w, encodingutf-8) as file: file.write(这是我的第一行笔记。\n) # 读取文件 with open(note.txt, r, encodingutf-8) as file: content file.read() print(文件内容如下) print(content)十、 写出优雅的进阶代码在新手掌握了基础语法之后, 新手以及老手之间的区别常常在于, 新手及老手能不能写出那样的代码, 什么样的代码, 就是那种, 符合语言习惯, 并且高度精炼的代码。1. 列表推导式 (List )要是你打算针对一个列表里的每一个元素予以处理, 进而生成一个全新的列表, 传统的书写方式得运用for循环以及.()组成。然而列表推导式能够把三四行代码精简成一行。# 传统写法找出 1-10 里的偶数并求平方 squares [] for i in range(1, 11): if i % 2 0: squares.append(i ** 2) # Pythonic 写法 squares [i ** 2 for i in range(1, 11) if i % 2 0] print(squares) # [4, 16, 36, 64, 100]2. 变量交换与解包 ()在别的语言里头, 将两个变量进行交换, 一般而言是需要借助一个临时变量的。在特定环境中, 仅仅只需一行便可达成:a 10 b 20 a, b b, a # 交换完成3. 枚举器当对列表展开遍历操作时, 要是同时萌生知晓元素的索引也就是序号以及具体内容的需求, 无需手动去撰写计数器变量, 而是选用内置的:names [Alice, Bob, Charlie] for index, name in enumerate(names, start1): print(f第 {index} 名是: {name})十一、 结语你的下一步行动恭喜你, 读到此地, 你已然架构了一个厚重的 知识网络。从最为根本的变量定义起始, 直至紧握控制流环节, 并进而领会面向对象以及异常处理, 你已然拥有了能够看懂大部分基础 代码的本事。可是, 编程属于那种特别特别依赖实践的工程技艺。阅读指南这仅仅是第一步, 若是想要真正地掌握它, 建议你马上着手开启下面这些实践:去官网下载并安装在那最新版, 把其安装成颇为好用点的代码编辑器呢像VS Code那种啰 去动手亲自敲代码, 别搞复制粘贴的状况, 依照本文中将代码片段逐个原样打一回, 去观察输出之后的结果哟 试着把里面所涉及的参数进行一下改变, 瞅瞅如果出现报错的情况, 那错误要显示出来的信息会呈现出什么样的模样呢 去构建小型项目, 要摆脱教程所给予的那种保护姿态矣, 试着搞创作形成玩游戏的猜数字, 要不就去写一个脚本用于帮你自动去对文件夹里头的图片进行重命名, 又或者弄出一个简单的命令行待办事项也就是To-Do List程序。世界的技术广阔无边, 然而这门语言已给你送上了通向那个世界的钥匙, 着手去敲击键盘, 迎接你的首个Hello, World! 呀, 代码的世界, 盼望着你的创造。