php、python、golang这三种语言的异同点

php、python、golang这三种语言的异同点

 

1 默认空值:python里的None等价于php里的null,
在 Go 中,任何类型在未初始化时都对应一个零值:布尔类型是 false ,整型是 0 ,字符串是 "" ,
而指针,函数,interface,slice,channel和map的零值都是 nil。

2 在函数传递参数方式:golang中map、slice、channel是按引用传递的。

首先必须理解的是,python中一切的传递都是引用(地址),无论是赋值还是函数调用,不存在值传递。

不可变对象(变量指向的内存的中的值不能够被改变)
当更改该对象时,由于所指向的内存中的值不可改变,所以会把原来的值复制到新的空间,然后变量指向这个新的地址。
python中数值类型(int和float),布尔型bool,字符串str,元组tuple都是不可变对象。

可变对象(变量指向的内存的中的值能够被改变)
python中列表list,字典dict,集合set都是可变对象。包括自定义的类对象也是可变对象。对于这4种类型的参数如果在函数里对参数进行修改,会改变变量在函数外部的数值。


php里参数要按引用传递要在参数前面加&

3获取变量在内存中的地址:
python中可以用id()函数,golang中可以在变量名前面加上&就可以获取变量在内存中的地址,并把内存地址赋给一个指针。
php中目前没有获取变量在内存中地址的方法。

4 引入外部文件
python和golang都是用import关键字, php除了保留了C/C++的include,还多了require,区别是require的文件不存在的时候会
抛出致命错误并停止运行。如果是只导入一次可以用include_once,require_once。另外php还支持命名空间导入外部类。
例如:use some\namespace\ClassA;

5 变量的赋值和拷贝:

python用等号赋值和给函数传递参数的时候默认都是按引用赋值的
python完全拷贝一个list,dict要用copy.deepcopy()

golang 变量赋值完全是按值传递,所以正常的赋值都是值拷贝,
当然如果类型里面嵌套的有指针,也是指针值的拷贝,
此时就会出现两个类型变量的内部有一部分是共享的。

php值传递赋值和引用赋值:
$a = 10; //值传递
$b = &$a; // 引用赋值

6 删除变量
python删除变量并释放内存
import gc
del X_train, X_test
gc.collect()
php里用unset()
golang是一门自带垃圾回收(gc)的语言,没有手动释放变量内存的方法。

7 变量作用域
php的变量在一个php文件里定义,被另外一个php文件include 以后,照样有效。
php 显式引用一个全局变量可以使用global关键字。

golang的全局变量作用域是当前的package,如果要被export到外部使用,需要使用首字母大写的命名方式。
python显式引用一个全局变量可以使用global关键字。

8 包的控制
php里有命名空间namespace,golang 里有package,python一般当前文件夹做为包名,当前文件名作为模块名。

 

9 代码的规范性
golang 里创建一个变量,但是未使用,运行的时候会报declared and not used的错误,这个方面有点像c++。
python和php没有这个问题。


10 数据结构方面:

golang里是有struct结构体和指针的。有点像c++。而python和php里面没有。使用指针可以指针可以提高内存使用效率,减少重复赋值开销。
golang里struct及其里面的元素的首字母要大写,不然很可能这个结构体在当前package外面会访问不到。
例如:
type Package struct {
ID bson.ObjectId `json:"id" bson:"_id"`
PackageName string `json:"packageName" bson:"packageName"`
}

11 运算符:

golang和python3可以使用:=声明变量并赋值使用。而php没有这个操作符。

golang表达逻辑与、或的关系用&& 、||

python用的是and, or

php是两种都可以用!很神奇吧?

12 声明函数:
golang里面
func init(){
  ......
}
python里面
def init():
  ......

php里面:
function init(){
  ......
}

 

13 如何获取和设置环境变量?

python的版本:
os.environ.setdefault('环境变量名称', '环境变量值')
os.environ.get('环境变量名称', '默认值')

golang的版本:

package main

import (
  "fmt"
  "os"
)

func main() {
fmt.Println(os.Getenv("GOPATH"))

if err := os.Setenv("GOPATH", "./GO/bin"); err != nil {
  fmt.Println(err)
} else {
  fmt.Println("success")
}
}

php的版本:
getenv('APPLICATION_ENV')
putenv()

posted @ 2021-12-04 16:40  tochenwei  阅读(519)  评论(0编辑  收藏  举报