您的位置 首页 > 数码极客

【除以符号】Python和C语言中的几个比较容易混淆的运算符号

写数据处理程序的时候,有时需要看一些数学公式,有时需要写python代码,有时需要写一些C代码。

我发现,有一些数学计算的符号,在数学、C和Python等语言中有些反直觉,或者不那么一致的地方,需要在经常使用的过程中熟悉并注意辨别。

Python中的星号符号*

在常见的语言中,星号都主要用于表示乘法。

a = 2, b = 3 c = a*b

上面c等于6。

如果是一个列表类型,它乘以某个数,却表示列表的重复。

比如一个列表

a = [1,2,3] b = a * 2 # b = [1,2,3, 1,2,3]

一个tuple,

a = (1,2)*2 # a = (1,2,1,2)

一个字符类型的:

name = "Tom" names = name * 2 # names = "TomTom"

一个字节类型的:

rawdata = b'Nancy' rawdata_dup = rawdata * 2 # rawdata_dup = b'NancyNancy'

而两个星号一起时,作为binary operator,则表示指数运算

a = 3**2 # a = 9

此外,星号在Python中还表示可变列表, 而两个星号在一起则表示可变命令参数,或字典。

def func(a,b, *args, **kwargs): pass

在上面的函数中,args是list类型的变量,kwargs是dict类型的变量。

Python数学库numpy中的*

而在最重要的Python数学库numpy中,星号乘法运算的含义,初学时容易误以为会与列表运算的语义相同。但其实不是。

import numpy as np a = np.array([1,2]) b = a * 2 # b = ndarray([2,4])

在numpy中,默认是向量运算,在运算前,会按需要进行变量的broadcast处理。因此,上面的运算等价于:

import numpy as np a = np.array([1,2]) b = a * [2,2] # b = ndarray([2,4])

C中的星号*

在C语言中,我们第一反应,星号也是表示乘法,然后也很容易想到它用于指针。

乘法:

int a = 2; int b = 3; int c = a * b; // c = 6.

指针

int age = 18, *p_age = NULL; p_age = & age; // *p_age 等于 18.

C中的指数运算, **还是^?

我们很容易误以为可以用两个星号表示指数运算,但是C语言中是没有为指数运算定义操作符的。这时,我们可以使用的是<ma;中定义的pow函数.

#include <ma; int a = 2, b = 3; int c = pow(a,b); //c = 8

此外,由于我们在数学(LaTex等)中常常用^表示指数,而^运算在C中是有意义的,如果误以为它是指数运算,程序编译不会出错,但运算结果是错的。

在C语言中,^表示按位进行XOR运算。

int a = 0x001; int b = 0x001; int c = 0x100; int d = a ^ b; // c = 0x000 int e = a ^ c; // e = 0x101

总结

为了完成应用功能,我们会学习使用多种相似又有区别的语言。尤其是对于数据工程师而言,Python和C的搭配是很常见的组合。初学时,要注意读文档,做测试,不可以简单类比。

关于作者: admin

无忧经验小编鲁达,内容侵删请Email至wohenlihai#qq.com(#改为@)

热门推荐