大数据分析02 基础语法差异
Python基础类型与Go、PHP的差异
1. 整数(int
)
- Python:
- 动态类型,无大小限制(受限于内存)。
- 示例:
num = 12345678901234567890
。 - 可以直接进行二进制、八进制、十六进制转换(
bin()
、oct()
、hex()
)。
- Go:
- 静态类型,有多种整数类型(
int8
、int16
、int32
、int64
),大小固定。 - 示例:
var num int64 = 1234567890123456789
- 需要显式转换类型,如
int64(num)
。
- 静态类型,有多种整数类型(
- PHP:
- 动态类型,但整数大小受限于平台(32位或64位)。
- 示例:
$num = 1234567890123456789;
(超出范围时会自动转为浮点数)。 - 没有内置的二进制、八进制、十六进制转换函数,需手动实现。
2. 浮点数(float
)
- Python:
- 动态类型,精度较高(双精度浮点数)。
- 示例:
pi = 3.141592653589793
。 - 支持科学计数法(如
1.23e-10
)。
- Go:
- 静态类型,有
float32
和float64
两种类型。 - 示例:
var pi float64 = 3.141592653589793
- 需要显式指定类型,精度固定。
- 静态类型,有
- PHP:
- 动态类型,浮点数精度与平台相关(通常是双精度)。
- 示例:
$pi = 3.141592653589793;
。 - 支持科学计数法,但精度可能不如Python。
3. 复数(complex
)
- Python:
- 内置支持,以
j
或J
为后缀。 - 示例:
c = 3 + 4j
。 - 支持复数运算(加、减、乘、除、共轭等)。
- 内置支持,以
- Go:
- 不支持复数类型,需使用第三方库或手动实现。
- PHP:
- 不支持复数类型,需使用扩展库(如
Math_Complex
)。
- 不支持复数类型,需使用扩展库(如
4. 布尔值(bool
)
- Python:
True
和False
,布尔值是int
的子类。- 示例:
is_valid = True
。 - 空值、零值、空字符串等会被视为
False
。
- Go:
true
和false
,布尔类型与其他类型严格区分。- 示例:
var isValid bool = true
- 不支持隐式类型转换。
- PHP:
true
和false
,布尔类型与其他类型有隐式转换。- 示例:
$isValid = true;
。 - 空字符串、零值、
null
等会被视为false
。
5. 字符串(str
)
- Python:
- 不可变序列,支持多行字符串(用三引号
"""
或'''
)。 - 示例:
s = "Hello, world!" multi_line = """This is a multi-line string."""
- 支持字符串切片、格式化(
f-string
、str.format()
)。 - 前缀
r
表示原始字符串(不转义)。
- 不可变序列,支持多行字符串(用三引号
- Go:
- 不可变序列,字符串操作较为繁琐。
- 示例:
s := "Hello, world!"
- 不支持多行字符串,需手动拼接。
- 字符串操作需通过
strings
包实现。
- PHP:
- 可变序列,支持多种字符串定义方式(单引号、双引号、
heredoc
、nowdoc
)。 - 示例:
$s = 'Hello, world!'; $multi_line = <<<EOT This is a multi-line string. EOT;
- 支持变量插值(双引号中可直接插入变量)。
- 可变序列,支持多种字符串定义方式(单引号、双引号、
6. 切片(slice
)
- Python:
- 切片操作非常灵活,支持负索引、步长等。
- 示例:
lst = [0, 1, 2, 3, 4] print(lst[1:4]) # 输出 [1, 2, 3] print(lst[::-1]) # 输出 [4, 3, 2, 1, 0]
- Go:
- 切片是数组的动态视图,但操作相对复杂。
- 示例:
arr := [5]int{0, 1, 2, 3, 4} slice := arr[1:4] // 输出 [1 2 3]
- 不支持负索引和步长。
- PHP:
- 不支持切片操作,需手动实现(如使用
array_slice()
)。 - 示例:
$arr = [0, 1, 2, 3, 4]; $slice = array_slice($arr, 1, 3); // 输出 [1, 2, 3]
- 不支持切片操作,需手动实现(如使用
7. 幂运算(**
)
- Python:
- 使用
**
进行幂运算。 - 示例:
result = 2 ** 3
(结果为8)。
- 使用
- Go:
- 不支持
**
运算符,需使用math.Pow()
函数。 - 示例:
result := math.Pow(2, 3) // 结果为8
- 不支持
- PHP:
- 使用
pow()
函数进行幂运算。 - 示例:
$result = pow(2, 3);
(结果为8)。
- 使用
8. 身份运算(is
)
- Python:
- 使用
is
判断两个对象是否是同一个对象。 - 示例:
a = [1, 2, 3] b = a print(a is b) # 输出 True
- 使用
- Go:
- 不支持
is
运算符,需通过比较指针或地址来判断。
- 不支持
- PHP:
- 不支持
is
运算符,需通过===
比较值和类型。
- 不支持
9. 控制流(range()
)
- Python:
range()
用于生成序列,常用于循环。- 示例:
for i in range(1, 5):print(i) # 输出 1, 2, 3, 4
- Go:
- 没有
range()
,需手动实现循环。 - 示例:
for i := 1; i < 5; i++ {fmt.Println(i) // 输出 1, 2, 3, 4 }
- 没有
- PHP:
- 不支持
range()
,需手动实现循环。 - 示例:
for ($i = 1; $i < 5; $i++) {echo $i; // 输出 1, 2, 3, 4 }
- 不支持
总结
- Python:动态类型,语法简洁,内置功能丰富,适合快速开发。
- Go:静态类型,性能高,适合大规模并发和系统编程。
- PHP:动态类型,主要用于Web开发,语法灵活但类型系统较弱。
Python、Go 和 PHP 在文件操作中的使用区别:
Python 文件操作
- 打开文件:使用
open()
函数,支持多种模式(如'r'
读取、'w'
写入、'a'
追加等)。推荐使用with
语句,可自动关闭文件。with open('example.txt', 'r') as file:content = file.read()
- 读取文件:提供
read()
(读取全部内容)、readline()
(读取一行)、readlines()
(读取所有行)等方法。 - 写入文件:使用
write()
或writelines()
方法。写入模式'w'
会覆盖文件,追加模式'a'
会在文件末尾添加内容。 - 关闭文件:使用
close()
方法,但with
语句会自动处理关闭操作。 - 文件指针操作:使用
tell()
获取当前位置,seek(offset, whence)
移动指针。
Go 文件操作
- 打开文件:使用
os.Open()
或os.OpenFile()
。os.Open()
默认为只读模式,os.OpenFile()
可指定模式和权限。file, err := os.Open("example.txt") if err != nil {log.Fatal(err) } defer file.Close()
- 读取文件:可使用
file.Read()
或bufio.NewReader(file)
等方式读取内容。 - 写入文件:使用
file.Write()
或file.WriteString()
,也可通过bufio.NewWriter(file)
进行缓冲写入。 - 关闭文件:通过
file.Close()
关闭文件,通常与defer
结合使用。 - 文件管理:提供
os.Remove()
删除文件、os.Rename()
重命名或移动文件。
PHP 文件操作
- 打开文件:使用
fopen()
函数,支持多种模式(如'r'
、'w'
、'a'
等)。$file = fopen("example.txt", "r"); if ($file) {echo "File opened successfully.";fclose($file); }
- 读取文件:可使用
fread()
、fgets()
(逐行读取)等函数。 - 写入文件:使用
fwrite()
或file_put_contents()
(后者支持追加和错误处理)。file_put_contents("example.txt", "This is some text.", FILE_APPEND);
- 关闭文件:通过
fclose()
关闭文件。 - 文件管理:提供
unlink()
删除文件、rename()
重命名或移动文件。
总结
- Python:文件操作功能丰富,语法简洁,推荐使用
with
语句自动管理文件关闭。 - Go:通过
os
包提供底层文件操作,支持错误处理和文件权限管理,适合系统级文件操作。 - PHP:文件操作与 Web 开发紧密结合,提供多种函数支持文件读写和管理,适合 Web 环境下的文件操作。