PHP、Python和Shell的语法对比
都是动态解释型的脚本语言。PHP常用于Web开发,Python常用于科学计算,Shell常用于系统脚本。本文中Python版本默认都是Python3
包管理
PHP有composer包管理工具,有自动加载机制,有一次和多次之分,即存在require_once和include_once。 Python有setup-tools和pip模块管理工具,使用时需要需要import或from A import B,无需担心多次引入。 Shell使用source命令或.引入其他文件
基础语法
PHP类似C语言风格,Python则是独树一帜的强制性的缩进风格,{}用冒号代替,一起的同级缩进,按先后顺序执行。 Shell的也是独树一帜的风格,没有冒号。
PHP语句结尾必须分号结束,Python的分号可以省略,Shell结尾的分号也可以省略。
PHP注释和C语言相似,Python多行使用三个引号,Shell多行注释使用heredoc
PHP和Shell中单引号不解析变量,双引号解析变量,Python中都不解析变量
PHP中变量定义和引用都要加$,Shell中定义不加,引用加,Python中定义和引用都不加。
数据类型
Shell中默认都是字符串,定义数字,需要使用declare声明,数字计算需要使用$((1+1))或$[1+1]等形式
PHP和Shell中整型都有大小限制,一般2字节或4字节,而Python中可以到28字节,长度几乎没有限制,这也是常用于科学计算的原因。
字符串连接方式不同,PHP中使用.,Shell中默认所有字符都是字符串,所以无需连接符,Python中使用加号或空格连接。 Python和Shell都支持字符串切片,而PHP可以使用substr函数实现
PHP和Shell支持索引数组和关联数组,Python支持列表和字典,而且支持列表切片。数组一般以逗号分隔,但Shell中数组以空格分隔,()包裹。
Python中()表示tuple(读踏破,而不是提欧珀),元组是只读版的列表,[]表是列表,{}表示集合或字典,类似JS中对象的写法。 Python中处理这些数据结构都有相应的函数
Python中数组表示各个元素类型都相同的列表,numpy中有数组。
PHP中有===,表示类型和值都一样,Python没有这样的比较,默认都是类型一样才再比较值,即仅有==,类型比较可以用type
Python中,字符串和数字不能直接拼接,需要使用str转换
Python中基础类型,数字,字符串,元组都是只读的,"1" is "1"会返回False,is用于身份比较,即比较id返回的值
其他
Python中for语句没有PHP中那种类似C语言的风格for(i=0;i<10;i++),需要使用for i in range(1,20),shell中可使用 for ((i=1; i
$v),Python中可以使用for i, v in enumerate(list1), Shell中可使用for i in $(seq 1 ${#array[*]}),通过${array[$[$i-1]]}获取元素的值
其他很多高级特性,都大同小异,这里不再说明
PHP代码:<?php
function compute($i, $j=0, $operator="min"){
return in_array($operator, ["min", "max"]) ? $operator($i,$j) : false;
}
if(true){
//test
/*
这是多行注释
这是多行注释
这是多行注释
*/
$test="hello php";
echo "$test:".$test;
echo compute(2, 3);
echo compute(4, 0, "max");
}
?>
<?php if(true): ?>
<!--test-->
<!--
这是多行注释
会显示在HTML文档中
-->
test
<?php endif;?>
Shell代码:function compute(){
if [ $# -ne 3 ]; then
echo "please input 3 numbers" && exit 1
fi
if [ "$3" == "min" ]; then
echo $(($1 > $2 ? $2 : $1))
else
echo $(($1 > $2 ? $1 : $2))
fi
}
if [ 1 ]; then
#test
: <<EOT
这是多行注释
这是多行注释
这是多行注释
EOT
test="hello shell"
test2=${test:0:2}
echo "$test":${test}
fi
compute 2 3 min
compute 2 3 max
Python代码:def compute(i, j=0, operator="min"):
if operator == "min":
print(min(i, j))
else:
print(max(i,j))
compute(j=8, i=3)
if True:
# hello
"""
这是多行注释
这是多行注释
这是多行注释
"""
test="hello python"
test2=test[0:2]
print("test" ":"+test)