python科学计数法转换_对比Python学习Go 基本数据结构
公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新。
本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构。Go 的环境搭建,可参考之前的文章「对比Python学习Go」- 环境篇[2] 。废话不多说,下面开始我们的对比学习。
基本数据类型
Go 的基本类型
Go 的基本数据类型主要如下:
boolstringint int8 int16 int32 int64uint uint8 uint16 uint32 uint64 uintptrbyte // uint8 的别名rune // int32 的别名// 代表一个Unicode码float32 float64complex64 complex128
Go 语言本身更偏向底层,对内存占用和性能的要求更高,除了有普通的数据类型之外,还有定长的数据类型,方便在不同场景使用,提高性能。
int,uint 和 uintptr 类型在 32 位的系统上一般是 32 位,而在 64 位系统上是 64 位。官方推荐在使用整数时,首选 int
类型,仅当有特别的理由(你知道为什么要这么做)才使用定长整数类型或者无符号整数类型。
Python 的基本类型
Python 的基本数据类型如下:
intlong # 仅在python 2 版本中有floatcomplex # 复数型str # 字符串 python2中有bytes(str)和unicode,python3中只有str类型 默认支持unicode编码bool # 布尔型None # 空值类型
在 Python 中,各类型占用的字节大小有 Python 解释器动态分配。不同的 Python 版本,分配机制也略有区别。用户可使用sys.getsizeof()
来具体查看各类型占用的字节数。Python3 中大致如下:
Bytes type scaling notes28 int +4 bytes about every 30 powers of 237 bytes +1 byte per additional byte49 str +1-4 per additional character (depending on max width)48 tuple +8 per additional item64 list +8 for each additional224 set 5th increases to 736; 21nd, 2272; 85th, 8416; 341, 32992240 dict 6th increases to 368; 22nd, 1184; 43rd, 2280; 86th, 4704; 171st, 9320136 func def does not include default args and other attrs1056 class def no slots56 class inst has a __dict__ attr, same scaling as dict above888 class def with slots16 __slots__ seems to store in mutable tuple-like structure first slot grows to 48, and so on.
有兴趣深入研究的,可参考这个stackoverflow[3]的讨论。
其实,在大多数情况下,我们使用 Python 来编写代码,不用太考虑类型的占用大小问题,解释器已经帮我们做好了内存的分配。对于内存而言,我们更应该关注的是大内存占用的对象的及时释放问题。
常量和变量
Go 的常量和变量
package main
import "fmt"
// 常量定义和赋值 ,常量可以是字符、字符串、布尔或数字类型,有关键字 const 定义const Pi = 3.14
// 变量定义和赋值 使用关键字 var 定义var a = "initial"var ( x int y int)
func main() {
fmt.Println(a)
// 相同类型定义可省略前边变量的数据类型 var b, c int = 1, 2 fmt.Println(b, c)
// 定义布尔型并赋值 var d = true fmt.Println(d)
// 只定义没有赋值 var e int fmt.Println(e)
// := 为变量赋值简写形式,只有在函数中才能使用。常量在哪都不能使用。 f := "short" fmt.Println(f)}
代码中 e
只定义并没有赋值,此时它会有一个默认的初始值,在 Go 中把这个初始值叫做「零值」。
- 数值类型为 0,
- 布尔类型为 false ,
- 字符串为 “”(空字符串)
在使用数值类型 0 值的时候一定要注意精度问题,在不同语言中精度要求可能不同,这很可能造成你序列化和反序列化的失败。
Python 的常量和变量
Python 是动态,弱类型语言。在赋值前不需要声明,左侧对象的类型由值的类型确定。
>>> a = 123>>> b = '123'>>> c = True>>> print(type(a),type(b),type(c))('int'>, 'str'>, 'bool'>)a,b = 1,2 # 批量复制c = d = 3 # 连续复制a,b = b,a # ab 值交换
类型转换
Go
// 数值型可直接使用 表达式 T(v)将值 v 转换为类型 Tvar i int = 42// int --> float64var f float64 = float64(i)// int --> uintvar u uint = uint(f)
// 数值和字符串的转换 需要使用 strconv 库,它为我们提供了很多转换方法s := "123456"// string --> inti, _ := strconv.Atoi(s)fmt.Println("i type:", reflect.TypeOf(i))// string --> int64i64, _ := strconv.ParseInt(s, 10, 64)fmt.Println("i64 type:", reflect.TypeOf(i64))// string --> float64f64, _ := strconv.ParseFloat(s, 64)fmt.Println("f64 type:", reflect.TypeOf(f64))// int --> strings1 := strconv.Itoa(i) //数字变成字符串fmt.Println("s1 type:", reflect.TypeOf(s1))// int64 --> strings2:=strconv.FormatInt(i64,10)fmt.Println("s1 type:", reflect.TypeOf(s2))
Python
Python 中可直接将各类型对象使用类型方法转换。
n = 20# int --> floatf = float(n)# int --> strs = str(n)# str --> intn1 = int(s)# str --> floatf1 = float(s)
字符串操作
Go
name := "DeanWu"// 相加fmt.Println("我叫" + name)
// 下标取值fmt.Println(name[0]) // 直接取,是对应的ascii码,需要传下fmt.Printf("%c\n", name[0])fmt.Println(name[:3])
// 使用内建函数len获取字符串长度fmt.Println(len(name))
// 字符串包含fmt.Println(strings.Contains(name, "a"))
// 字符串开头,结尾fmt.Println(strings.HasPrefix(name, "D"))fmt.Println(strings.HasSuffix(name, "u"))
// 字符串分割组合arr := strings.Split(name, "e")fmt.Println(strings.Join(arr, "e"))
// 字符串格式化fmt.Printf("%s, %.2f \n", a, f64)fmt.Println(fmt.Sprintf("我叫,%s", name))
/*%v 相应值的默认格式。在打印结构体时,“加号”标记(%+v)会添加字段名%#v 相应值的 Go 语法表示%T 相应值的类型的 Go 语法表示%% 字面上的百分号,并非值的占位符%t 单词 true 或 false。%b 二进制表示%c 相应 Unicode 码点所表示的字符%d 十进制表示%o 八进制表示%q 单引号围绕的字符字面值,由 Go 语法安全地转义%x 十六进制表示,字母形式为小写 a-f%X 十六进制表示,字母形式为大写 A-F%U Unicode 格式:U+1234,等同于 “U+%04X”%b 无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat 的 ‘b’ 转换格式一致。例如 -123456p-78%e 科学计数法,例如 -1234.456e+78%E 科学计数法,例如 -1234.456E+78%f 有小数点而无指数,例如 123.456%g 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的 0)输出%G 根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的 0)输出%s 字符串或切片的无解译字节%q 双引号围绕的字符串,由 Go 语法安全地转义%x 十六进制,小写字母,每字节两个字符%X 十六进制,大写字母,每字节两个字符%p 十六进制表示,前缀 0x*/
Python
name = "DeanWu"# 相加print("我叫" + name)
# 下标取值print(name[0])print(name[:3])
# 使用内建函数len获取字符串长度print(len(name))
# 字符串包含print("a" in name)
# 字符串开头,结尾print(name.startswith("D"))print(name.endswith("u"))
# 字符串分割组合name_list = name.split("e")print("e".join(name_list))
# 字符串格式化print("%s " % name )%d 整数%f 浮点数%s 字符串%x 十六进制整数
# format 格式化print("你好,{}".format(name))print("你好,{0}, {1}".format(name, "我是第二个"))
# fstring 格式化print(f'我是,{name}')
其他
编码
Go 原生支持 Unicode,常用编码为 UTF-8。
Python2 中的默认编码为 ASCII 编码,Python3 中使用的则是 UTF-8 编码。
篇幅有限,更多编码问题可参考我之前总结的 Python 教程:字符串与编码[4]章节
操作符
go 操作符:
+ & += &= && == != ( )- | -= |= || * ^ *= ^= >= { }/ <% >> %= >>= -- ! ... . : &^ &^=
python 操作符:
+ == = & and- != += | or* <> -= ^ not/ > *= ~% ** >= >>// <=
关键字
go 关键字:
break default func interface selectcase defer go map structchan else goto package switchconst fallthrough if range typecontinue for import return var
python 关键字:
>>> import keyword>>> keyword.kwlist['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
注释
go 注释:
// 单行注释
/*多行注释*/
python 注释:
# 单行注释
'''多行注释'''
"""多行注释"""
总结
本篇文章我们对比学习了 Go 的基本数据结构,从基本数据结构的设计,我们可以看出 Go 的基本类型,更精细,对用户暴露出更多的可控性。在使用上,都比较简单,清晰明了。
好了,本篇到这里了,敬请期待下篇更新。
我是 DeanWu,一个努力成为真正 SRE 的人。
关注公众号「码农吴先生」, 可第一时间获取最新文章。回复关键字「go」「python」获取我收集的学习资料,也可回复关键字「小二」,加我 wx,聊技术聊人生~
参考资料
[1]
「对比Python学习Go」: https://pylixm.top/posts/2020-12-02-go-from-python-intro.html
[2]
「对比Python学习Go」- 环境篇: https://pylixm.top/posts/2020-12-03-go-from-python-start.html
[3]
stackoverflow: https://stackoverflow.com/questions/449560/how-do-i-determine-the-size-of-an-object-in-python
[4]
字符串与编码: https://pylixm.top/python_start/#/src/c03_start?id=%e5%ad%97%e7%ac%a6%e7%bc%96%e7%a0%81
python科学计数法转换_对比Python学习Go 基本数据结构相关推荐
- python科学计数法转换_柳小白Python学习笔记35 Excel之科学计数法类型转换及数据选取1...
昨天学习了使用pandas模块如何查看Excel工作表"wz"的基本信息.今天学习,转换数字科学计数法格式及提取需要处理的数据,接下来就进入今天的学习吧. 一.转换科学计数法格式 ...
- python 科学计数法转换成数字_JS如何将科学计数法转换成数字或者字符串?
今天遇到这个问题.... function sumStrings(a, b) {//输入的a,b都是只包含数字的字符串 var output; output = a * 1 + b * 1;//转换为 ...
- python中科学计数法怎么表示_python科学计数法转换
python 输出数字,如何不以科学计数法输出? 概述利用numpy设置输出选项即可 代码解析 未使用numpy设置: import time # time 时间类 print(time*time*1 ...
- python 科学计数法 转 字符串表述
python 科学计数法 转 字符串表述 文章目录 python 科学计数法 转 字符串表述 前言: 需求: 代码: 前言: 好久没有写博客了,写一个今天需要的一个小玩意儿,网上没有找到一个方便的解决 ...
- [js] 写一个方法把科学计数法转换成数字或者字符串
[js] 写一个方法把科学计数法转换成数字或者字符串 function c(a) { return a.replace(/^(\d+)(?:.(\d+))*eE(\d+)/,(_,a,a1,p,n)= ...
- PHP科学计数法转换成数字
/** * 科学计数法转换成数字 * @param $num * @param int $double * @return int */ function sctonum($num, $double ...
- python 科学计数法转字符_转换科学计数法的数值字符串为decimal类型的方法
转换科学计数法的数值字符串为decimal类型的方法 在操作数据库时,需要将字符串转换成decimal类型. 代码如下: select cast('0.12' as decimal(18,2)); s ...
- 怎么转换科学计数法字符串_【编码技巧】python字符串格式化教你正确打印
点击上方蓝字关注我吧! %运算符用来格式化字符串.在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要一一对应.如果只有一个%?,括号可以省略.用% ...
- python科学计数法的显示与转换
print ("%e" %number)可以将number输出为科学计数法 这里的 number 是要转换的数字或者变量 同理,也可以把科学记数法转化为十进制整数:print (& ...
最新文章
- Network | sk_buff
- APK path is not specified for module
- 软键盘挡住EditText
- 如何直观的看出主题模型学习结果的好坏
- views 多个文件夹 netcore_优化 .net core 应用的 dockerfile
- linux tcp文件分包_Linux内核参数优化
- Excel导入txt数据乱码
- Hutool介绍(详)
- python redis decode_responses
- [初级理论]给老婆做测试培训-02
- Redis单点故障+红锁原理
- 【计算机网络】计算机网络体系结构总结——基本知识要点汇总
- php access 教程 pdf,Access 2007 以PDF 格式保存文件
- 正交阵的特征值是模为1的复数
- CA机构介绍(Certificate Authority 域名SSL证书颁发机构)
- 千年人参多少钱,如果真的有的话
- O-1 4GB+的ISO镜像刻录
- 不掉帧不卡顿的游戏直播画面看起来爽爆了,求网络推流搭建方案
- 2021-12-01 股票模拟交易心得2
- 计算机毕业设计ssm成都驰聘健身俱乐部管理系统so4b3系统+程序+源码+lw+远程部署
热门文章
- 【禅模式】如何进入极度专注的心流状态,让前端开发能力发挥到最大?设置VSCode禅模式快捷键Alt+F切换全屏,适合演示代码使用
- Ubuntu 14.04 64bit上查看网页中的cookies
- Nginx在windows下常用命令
- Android开发教程 - 使用Data Binding(二)集成与配置
- Python学习(一) 安装,环境搭建,IDE
- android studio 怎么运行java
- 微软2014校园招聘笔试试题
- iPhone开发技巧之工具篇(4)--- 使用afconvert转换WAV文件
- 开发人员绩效考核中有效bug数的统计
- 在C# Express 2005中配置 NUnit