享受Python和PHP动态类型检查语言的快感
前言
写这文章的时候特地查了资料,以确保我没有说错关于Python和PHP的类型机制。
所以这里放一张图,关于强弱类型与动态/静态类型检查的区分

从分类上看,PHP属于弱类型语言,而Python属于强类型语言,为什么可以把这两个语言放在一起呢,因为都是动态类型检查的,也就是定义变量时不用指定类型,解释器会根据赋值进行推断变量的数据类型。并且,最近在做Web和微信开发,同时在使用PHP和Python。
圈粉点
- 模块/库丰富,这个很好体现,在做Http请求这块,处理Json数据太方便了,构造Json结构字典/数组也超级方便(不仅是因为类型定义完全省略)
- 部署简单!跨平台成本真的低,本地(Windows系统)写完代码,测试通过,扔到服务器(Debian)上直接就可以运行(当然服务器上已经安装了Python环境),不用编译这点也很方便
黑点
- PHP变量最难受的就是哪个$符号,真的好别扭,感觉PHP写久了,键盘上的4键都坏了。
- Python最难受的是缩进,用IDE时,偶尔自动格式化代码会把某一块的缩进搞错了,代码多的时候,出了问题都很难找到,(不过Python一般很少一个模块内代码很多的,嘿嘿)
- PHP的设计怪怪的,我喜欢C#和Python这类按模块分类的设计,而不是PHP这样大部分功能都做成内置函数
比如PHP的Json解码是这样的:
$str = "Json代码"
$result = json_decode($str, true)
而Python是这样的:
import json
str = "Json代码"
result = json.loads(str)
两个代码展示的功能都是获取Json结构对应的数组,虽然PHP不用引入任何包/模块,但是就感觉很乱,我还是喜欢Python这样逻辑清晰的语言。
- 还有一个,PHP的类属性怎么用,好像没有读取器和存储器,查了一下解决方案,都挺麻烦的。像C#/Java这种就很方便,Python也有set/get的实现,操作也不复杂。例子:
from decimal import Decimal
class Fees(object):
def __init__(self):
"""Constructor"""
self._fee = None
@property
def fee(self):
"""
The fee property - the getter
"""
return self._fee
@fee.setter
def fee(self, value):
"""
The setter of the fee property
"""
if isinstance(value, str):
self._fee = Decimal(value)
elif isinstance(value, Decimal):
self._fee = value
if __name__ == "__main__":
f = Fees()
使用:
>>> f.fee
Decimal('1')
>>> f.fee = "2"
>>> f.get_fee()
Decimal('2')
这就相当的方便和舒服了。
由于时间关系,暂时写这些,后续我会在这篇文章中继续补充。
我的微信公众号:DealiAxy

享受Python和PHP动态类型检查语言的快感的更多相关文章
- Python进阶09 动态类型
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢TeaEra, 猫咪cat 动态类型(dynamic typing)是Pyth ...
- Python学习笔记整理(三)Python中的动态类型简介
Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...
- 介绍几款 Python 类型检查工具
近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心, ...
- 类型检查和鸭子类型 Duck typing in computer programming is an application of the duck test 鸭子测试 鸭子类型 指示编译器将类的类型检查安排在运行时而不是编译时 type checking can be specified to occur at run time rather than compile time.
Go所提供的面向对象功能十分简洁,但却兼具了类型检查和鸭子类型两者的有点,这是何等优秀的设计啊! Duck typing in computer programming is an applicati ...
- 理解Flow静态类型检查
一.为什么在JavaScript中使用静态类型 了解静态类型的最快方法是将其与动态类型进行对比. 有静态类型参数的语言被称为静态类型语言. 另一方面,有动态类型参数的语言被称为动态类型语言.核心区别是 ...
- Java中静态类型检查是如何进行的
以下内容来自维基百科,关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间 ...
- O-C相关-10-动态类型检查
10-动态类型检查 1.动态绑定 1)OC 中方法的调用不由编译器决定,而由运行时决定 2)OC 中没有方法调用,只有消息接收. 一般称消息为选择器 2.动态类型检查 对象在运行时获得类型的能力称为内 ...
- Python 语言特性:编译+解释、动态类型语言、动态语言
1. 解释性语言和编译性语言 1.1 定义 1.2 Python 属于编译型还是解释型? 1.3 收获 2. 动态类型语言 2.1 定义 2.2 比较 2. 动态语言(动态编程语言) 3.1 定义 3 ...
- Python基础系列讲解—动态类型语言的特点
前言 在C语言中变量所分配到的地址是内存空间中一个固定的位置,当我们改变变量值时, 对应内存空间中的值也相应改变.在Python中变量存储的机制是完全不一样的,当给一个变量赋值时首先解释器会给这个值分 ...
随机推荐
- Win下安装虚拟机(Linux)
**********************win下体验linux**************************************By熟知宇某 一.先说说win10和win8系统下的hyp ...
- MyBatis开发中解决返回字段不全的问题
场景重现: mybatis 在查询的时候,可以返回Map,但是一旦这个字段为空(null)的时候,map里就没有了.我用的是mysql数据库,除了在查询语句上做ifnull判断给它默认值外,有没的别的 ...
- ABAP字符串的加密与解密
FIEB_PASSWORD_DECRYPT:字符串解密:FIEB_PASSWORD_ENCRYPT:字符串加密.旧版本的可以用. PARAMETERS:str1 type char32 OBLIGAT ...
- Druid连接池
Druid 连接池简介 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.J ...
- 张高兴的 Windows 10 IoT 开发笔记:BMP180 气压传感器
注意:海拔高度仅供参考 GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/BMP180Demo
- win10 uwp json
本文讲的是关于在uwp使用json的简单使用,json应用很多,因为我只是写简单使用,说的东西可能不对或者不符合每个人的预期.如果觉得我有讲的不对的,就多多包含,或者直接关掉这篇文章,但是请勿生气或者 ...
- JS难点--组件开发
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #a5b2b9 } span.Apple-tab-span ...
- Linux中的各种软件安装
Linux下的软件形式 Linux上的软件有几种常见的方式 二进制发布包 软件包已经针对具体平台完成了编译和打包,解压后即可以使用,最多去改改配置文件,也是Linux上最通用和常见的软件包发布形式 例 ...
- 优先队列(存储结构数组)--Java实现
/*优先队列--是对队列的一种改进 *要存储的数据存在优先级--数值小的优先级高--在队头 *优先队列的实现 *1.数组:适合数据量小的情况(没有用rear+front实现) *优先队列头在items ...
- LeetCode 245. Shortest Word Distance III (最短单词距离之三) $
This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...