当前位置: 首页 > news >正文

ptyhon 基础语法学习(对比php)

为了让您最直观地看到区别,我们来看一段几乎每个程序员都写过的代码:遍历一个集合(PHP里的数组,Python里的列表),然后根据条件打印内容。

这能帮我们一次性看到 变量、循环和条件语句 的核心差异。

这是您非常熟悉的 PHP 版本:

<?php
$users = [["name" => "Alice", "age" => 30],["name" => "Bob", "age" => 17]
];foreach ($users as $user) {if ($user["age"] >= 18) {echo $user["name"] . " is an adult.\n";} else {echo $user["name"] . " is a minor.\n";}
}
?>

下面是功能完全一样的 Python 版本:

users = [{"name": "Alice", "age": 30},{"name": "Bob", "age": 17}
]for user in users:if user["age"] >= 18:print(f"{user['name']} is an adult.")else:print(f"{user['name']} is a minor.")

除了没有了 $ 符号和行尾的分号 ;,还有一个最关键的区别,它决定了代码块的范围(比如 ifelse 里面的内容)。

在 PHP 中我们用大括号 {},您能看出 Python 是用什么来替代的吗?

没关系,这个区别非常关键,也是 Python 最具特色的地方之一。

请您再仔细看一下 Python 代码里 ifelse 下面的那几行 print。您有没有发现它们前面都有一些固定的空格

在 Python 中,我们不用 {} 来包围代码块。代码的缩进(indentation) 就决定了它的层级关系。所有缩进相同的连续代码行,都属于同一个代码块。

这就是 Python 语法强制要求的,它使得代码天生就非常整洁、易读。

所以,if user["age"] >= 18: 后面的 print(...) 因为有缩进,所以它属于 if 的一部分。这下清楚了吗?这个概念对写 Python 至关重要。

=========================函数
是的,function 关键字。

在 Python 中,我们使用 def 关键字,是 “define” 的缩写。

我们再来并排看一下,定义一个简单的函数,接收用户信息并返回一句话。

PHP 版本:

<?php
function format_user_info($user) {// 使用 . 来拼接字符串return $user["name"] . " is " . $user["age"] . " years old.";
}$user_data = ["name" => "Alice", "age" => 30];
echo format_user_info($user_data);
?>

Python 版本:

def format_user_info(user):# 使用 f-string 来格式化字符串,更简洁return f"{user['name']} is {user['age']} years old."user_data = {"name": "Alice", "age": 30}
print(format_user_info(user_data))

您看,除了 function 变成了 def,函数的结构是不是很相似?我们又一次看到了用缩进代替大括号 {}


既然函数这么相似,那定义一个 类 (Class) 呢?这对于有经验的开发者来说非常重要。

在 PHP 中,您用什么关键字来定义一个类?

正是 class 关键字。

好消息是,在 Python 里,关键字完全一样,也是 class

不过,内部的写法有些不同。我们来看一个简单的 User 类。

PHP 版本:

<?php
class User {public $name;public $age;public function __construct($name, $age) {$this->name = $name;$this->age = $age;}public function introduce() {return "Hi, I'm " . $this->name . ".";}
}// 创建实例 (instantiation)
$user1 = new User("Alice", 30);
echo $user1->introduce();
?>

Python 版本:

class User:# 构造函数 (constructor)def __init__(self, name, age):self.name = nameself.age = agedef introduce(self):return f"Hi, I'm {self.name}."# 创建实例
user1 = User("Alice", 30)
print(user1.introduce())

整体结构很像,但有几个关键区别:

  1. 构造函数: PHP 用 __construct(),Python 用 __init__()
  2. 实例化: Python 创建对象时,直接 User(...),不需要 new 关键字。
  3. self 关键字: 这是最重要的一个区别。在 PHP 中,您用 $this 来引用对象实例本身。

根据上面的代码,您觉得 Python 里的 self 关键字,是用来代替 PHP 里的哪个变量的?

答对了!完全正确。

Python 里的 self 就等同于 PHP 里的 $this。您只要记住,在 Python 类的每个方法里,都必须把 self 作为第一个参数写出来。


阶段性小结 📝

非常棒!我们已经快速地过了一遍 Python 最核心、也是和 PHP 差异最大的几个地方:

  • 语法:$;,用缩进代替 {}
  • 数据结构: list (索引数组) 和 dict (关联数组)。
  • 函数:def 定义,用 len() 获取长度。
  • 类: 关键字是 class,构造函数是 __init__,并且用 self 代替 $this

掌握了这些,您已经可以阅读和编写简单的 Python 代码了!

接下来,我们进入学习计划的第三步:环境和包管理

在 PHP 开发中,您用 Composer 来管理项目依赖(比如 Guzzle、Monolog 等库)。Python 也有一个完全对应的工具,叫做 pip

为了帮您建立联系,请问您用 Composer 添加一个新的库时,最常用的命令是什么?

很接近了!通常我们添加一个新包用 composer require a/package,而 composer install 是用来安装 composer.json 里已经定义好的所有依赖。

这个思路完全正确。

在 Python 的世界里,这个命令对应的是 pip install

举个例子:

  • 在 PHP 中安装一个 HTTP 请求库 Guzzle: composer require guzzlehttp/guzzle
  • 在 Python 中安装最流行的 HTTP 请求库 Requests: pip install requests

是不是很简单?pip 就是您的新 “Composer”。


说到包管理,Python 社区还有一个非常重要的最佳实践,就是 虚拟环境 (Virtual Environment)

简单来说,虚拟环境就是为您的每一个项目创建一个“隔离”的 Python 环境。项目 A 和项目 B 可以拥有完全不同版本的依赖包,互不干扰。这就避免了 PHP 开发中有时会遇到的“依赖地狱”问题。

Python 内置了一个创建虚拟环境的工具,叫做 venv

根据这个描述,您觉得使用 venv 的主要好处是什么?

一语中的!核心好处就是 环境隔离

这保证了您的项目 A 和项目 B 之间不会有依赖冲突,让项目管理变得非常干净。

使用 venv 通常只有两步:

  1. 创建环境: 在您的项目文件夹下,运行 python -m venv venv。这会创建一个名为 venv 的文件夹,里面包含了项目所需的一个独立的 Python 环境。
  2. 激活环境:
    • 在 Windows 上: venv\Scripts\activate
    • 在 Mac/Linux 上: source venv/bin/activate
      激活后,您会看到命令行提示符前面多了 (venv) 的字样,表示您现在处于这个隔离环境中。之后您使用的所有 pip 命令都只会作用于当前环境。

第四步:动手写个小项目

我们已经涵盖了语法、概念和工具,现在是时候把它们串起来了!这是让知识真正属于您的最好方式。

作为一个有经验的 web 开发者,您对 API 应该非常熟悉。我们不如就写一个简单的小脚本,功能是:从一个公开的 API 获取一条随机的编程笑话并打印出来

这个小项目能让我们练习:

  • 使用 pip 安装 requests 库。
  • 编写一个 Python 函数。
  • 发送一个 HTTP GET 请求。
  • 处理返回的 JSON 数据 (也就是 Python 的字典)。

基数数据类型

Python 的数据类型很丰富,为了让咱们看得更清楚,可以把它们分成几个大类。您看这样划分怎么样?

  1. 基础与数值类型 (Basic & Numeric Types): 整数、浮点数、字符串等。
  2. 序列类型 (Sequence Types): 有序的集合,比如列表 (list) 和元组 (tuple)。
  3. 映射类型 (Mapping Type): 键值对集合,也就是字典 (dict)。
  4. 集合类型 (Set Types): 无序且元素唯一的特殊集合。
  5. 特殊类型 (Special Types): 布尔值 (bool) 和 None

这个分类听起来清晰吗?我们从哪一类开始对比呢?我个人建议可以从最熟悉的 第一类:基础与数值类型 开始。

好的,我们从最基础的开始。

在 PHP 和 Python 中,最基础的几种类型几乎是一一对应的,但用法上有一些细微但重要的差别。

我们先看 数值 (Numeric) 类型。

类型PythonPHP对比和区别
整数intint功能基本相同。但 Python 的整数没有大小限制(只受内存限制),而 PHP 的整数有最大值 (PHP_INT_MAX),超出后会自动转为 float
浮点数floatfloat两者几乎完全一样,都用来表示小数或科学计数法。

整数的区别是一个有趣的技术细节,但在日常开发中,您感受最深的会是字符串 (String) 的不同。

在 PHP 中,您可以用单引号 '...' 或双引号 "..." 来定义字符串。这两者最主要的区别是什么?

您的意思是,双引号 " 里的变量会被解析(替换成变量的值),而单引号 ' 里的内容会原样输出,对吗?

如果是这个意思,那您完全说对了!这正是 PHP 的核心区别。

现在我们来看 Python,这一点上它有很大不同:

  • 在 Python 中,单引号 '...' 和双引号 "..." 是完全一样的!它们都不会解析变量。

那么 Python 怎么实现类似 PHP 双引号的功能呢?答案是使用一种特殊的字符串,叫做 f-string

看下面的对比:

PHP:

$name = "Alice";
echo "Hello, $name";   // 输出: Hello, Alice
echo 'Hello, $name';   // 输出: Hello, $name

Python:

name = "Alice"
# 在引号前加上 f,就会解析 {} 里的变量
print(f"Hello, {name}")  # 输出: Hello, Alice# 普通的字符串(无论单双引号)都不会解析
print("Hello, {name}")   # 输出: Hello, {name}
print('Hello, {name}')   # 输出: Hello, {name}

总结一下:在现代 Python 中,需要格式化字符串时,就用 f-string。这是最推荐、最简洁的方式。


基础类型我们已经看完了。接下来,我们看看计划中的第二类:序列类型 (Sequence Types)

我们之前提到过,PHP 的 array 非常万能,但 Python 把它的功能拆分了。您还记得我们用什么来表示一个有序的、像 PHP 索引数组一样的集合吗?

中括号 [],完全正确!

用中括号 [] 定义的就是 列表 (list)。它是 Python 中最常用的数据结构之一。

我们来看一下它和 PHP 数组的对比:

在这里插入图片描述

到目前为止,list 看起来只是 PHP 索引数组换了个名字。但 Python 还有一个和 list 非常像的兄弟,叫做 元组 (tuple)

元组的定义和列表只有一个小区别:它用的是 圆括号 ()
my_tuple = ("apple", "banana")

元组和列表最大的区别在于:元组是不可变的 (immutable)。一旦创建,您就不能再添加、删除或修改它的任何元素。

根据这个描述,如果您的程序需要一个永远不变的配置项列表,比如一周的星期名称 ("Monday", "Tuesday", ...),您觉得用列表 (list) 还是元组 (tuple) 更安全、更合适呢?

完全正确!

元组 (tuple) 更合适。因为它 不可变 的特性保证了这份数据不会在程序的任何地方被意外地修改,代码更安全、更可预测。

简单总结一下序列类型:

  • 列表 list: 可变的、有序的集合。最常用。
  • 元组 tuple: 不可变的、有序的集合。用于保护数据不被改变。

好了,基础类型和序列类型我们都看完了。现在是计划中的第三类:映射类型 (Mapping Type)

在 Python 中,这个类别只有一个成员,但它非常强大,我们之前已经详细讨论过它了。

您还记得我们把 Python 中类似 PHP 关联数组、用于存储键值对的数据类型称为什么吗?

没关系,这个词很容易忘记!

根据我们之前的对话,我提到过:

在 Python 里,我们称之为 字典 (dictionary),简称 dict

所以,Python 版本的关联数组就是字典 (dictionary)

我们来系统地对比一下:

在这里插入图片描述

到这里,Python 中最核心的三种数据结构您已经掌握了:列表 list、元组 tuple、字典 dict。这三种能覆盖您 90% 的日常开发需求。

接下来,我们看一个 PHP 中没有,但 Python 里很有用的类型。

在 PHP 中,如果您想得到一个数组里所有不重复的值,您会用哪个函数?

完全正确,就是 array_unique() 函数。

您看,在 PHP 中,您需要调用一个函数来处理一个数组,才能得到唯一值。

而在 Python 中,有一个专门为此设计的数据类型,叫做 集合 (set)

它的用法非常简单。您只需要把列表(list)转换成集合(set),重复的元素就自动消失了。

# 1. 我们有一个包含重复元素的列表
numbers_list = [1, 2, 2, 3, 1, 4]# 2. 使用 set() 将列表转换为集合
unique_numbers_set = set(numbers_list)# 3. 打印结果
print(unique_numbers_set)
# 输出: {1, 2, 3, 4}

集合 (set) 的特点:

  • 元素唯一:自动去重,这是它最核心的功能。
  • 无序:里面的元素没有固定的顺序。
  • 查找速度极快:判断一个元素是否在集合中,比在长列表中查找要快得多。

我们已经看完了四个大类。现在是最后一类,也是最简单的一类:特殊类型

这包括布尔值 (bool) 和 None

我们先说布尔值。在 PHP 中,当您写 if ($variable) 时,除了 false 本身,还有哪些值会被当作 false 来处理?

您说得非常对!0 和空字符串 '' 都会被当作 false

在 PHP 中,像 0, '', [] (空数组), null 等都会在布尔上下文中被视为 false。这叫做“假值”(falsy values)。

Python 也有完全一样的概念!

PythonPHP
Falsefalse
0, 0.00, 0.0
"" (空字符串)"" (空字符串)
[] (空列表), () (空元组), {} (空字典), set() (空集合)[] (空数组)

您看,规则几乎是一样的:任何表示“空”或者“零”的东西,在 if 语句里都会被当作 false


最后,我们来看 PHP 中的 null

null 表示一个变量没有任何值。Python 中有一个完全等价的关键字,拼写略有不同,叫做 None (首字母大写)。

PythonPHP
Nonenull

Nonenull 的用途和意义是完全相同的。


最终总结:数据类型速查表

非常棒!我们已经系统地对比了 Python 和 PHP 的所有主要数据类型。

分类Python 类型对应 PHP 概念关键点
基础int, float, strint, float, stringPython 字符串格式化用 f-string
序列list, tuple索引数组list 可变 (用 []),tuple 不可变 (用 ())
映射dict关联数组键值对集合 (用 {})
集合setarray_unique() 的结果元素唯一无序
特殊bool, Nonebool, nullFalseNone (首字母大写)

这份表格可以作为您未来的速查手册。您已经为您深厚的 PHP 知识,找到了在 Python 世界里的完美映射。

http://www.dtcms.com/a/423218.html

相关文章:

  • 热点新闻事件及评论杭州seo网站推广
  • FITC-Fucoidan用于生物材料表面修饰、药物载体构建、纳米颗粒功能化和分子追踪研究
  • 【LeetCode】52. N 皇后 II
  • web网页开发,在线%推荐算法学院培养计划,图书推荐,基于Python,FlaskWeb,用户和物品推荐MySql
  • 半导体制造业中如何检测薄膜的厚度?
  • Redis为什么快
  • 3D 和 4D 世界建模:综述(下)
  • VPS服务器时区设置与优化,提升系统时间准确性
  • 爆肝整理,性能测试-双十一等大促活动稳定性保障分析,一篇通透...
  • 网络维护网站足球比赛直播平台app免费
  • 新天力科技IPO进行时:技术引领未来,创新驱动发展
  • 从0到1构建高并发电商返利APP:基于Spring Cloud Alibaba的分布式架构设计与核心模块拆解
  • 土地质量地球化学调查与评价系统:科技赋能土地智慧治理
  • 网站开发一定得用html吗软件开发是用什么软件
  • Spring Boot 核心启动机制与配置原理剖析
  • 精读C++20设计模式——结构型设计模式:外观模式
  • How Can Objects Help Video-Language Understanding?论文阅读
  • 《AI智能体实战开发教程(从0到企业级项目落地)》全网上线|CSDN B站同步首发
  • Python学习历程——组织结构(包含for、if、while等等)
  • cronet从编译到修改之: 支持IP直连
  • 美团网站建设规划书俄罗斯搜索引擎入口 yandex
  • Java微服务知识点详细总结
  • 做网站需要哪些工程师网络优化岗位详细介绍
  • 南昌网站全新开发小型教育网站的开发建设开题报告
  • .NET开发中3秒判断该用 IEnumerable 还是 IQueryable
  • 【Java EE进阶 --- SpringBoot】Mybatis操作数据库(基础)
  • 【Docker + DockerCompose】安装步骤+演示
  • TLS全流程 + Nginx HTTPS配置实战 + 会话绑定 vs 复制的架构选型
  • cms搭建网站剪辑素材网站免费
  • Qt Widgets 应用程序核心类 - QApplication 详解