`

python(vs. erlang)学习笔记之五 —— 数据类型 & 数据结构之二

阅读更多
这部分主要介绍bit string/binary、reference、port identifier、pid、record。这些数据类型都是erlang的数据类型,python是没有这些数据类型的
1、bit string和binary
binary是一种用来存储大量raw type数据的数据类型,binary存储数据比lists和tuples的空间效率高。如果binary可打印字符串,就会输出为字符串,否则就输出为整数序列。参考资料
	29> <<67,68,69>>.
	<<"CDE">>
	32> <<67,68,69,1>>.
	<<67,68,69,1>>
	34> list_to_binary([<<1,2,3>>,2,3,<<3,4,5>>]).
	<<1,2,3,2,3,3,4,5>>
	36> B = term_to_binary({abc,"are",userful}).
	<<131,104,3,100,0,3,97,98,99,107,0,3,97,114,101,100,0,7,
	  117,115,101,114,102,117,108>>
	37> binary_to_term(B).
	{abc,"are",userful}
	38> X = 34.
	34
	39> Y = 45.
	45
	40> Z = 78.
	78
	41> <<X:3,Y:7,Z:6>>.
	<<"KN">>
	42> <<16#123456:32/big>>. %//完整的格式Value:Size/TypeSpecifierList
	<<0,18,52,86>>

2、reference
reference是一个全局唯一的erlang term,用erlang:make_ref()创建,一般创建后放在某些数据里,然后在后边用来比较相等性。比如客户端在跟服务器端通信的时候,可以把ref传到服务端,然后服务端处理完请求后再把ref传到客户端,客户端就可以确认是这次请求的响应了。或者用来生成uuid参考资料
	43> erlang:make_ref().
	#Ref<0.0.0.150>	

3、port identifier
当erlang要跟非erlang语言写的程序通信的时候,我们可以把这个外部程序跑到erlang运行时系统之外,作为一个操作系统进程来跟erlang通信,这时候要通信的程序叫做connected process,会创建一个port,通过port跟外部进程通信。
	start_port(ClientName) -> %//这个代码是不能直接跑的,是一个完整程序的片段
		process_flag(trap_exit,true),
		Port = open_port({spawn,"./chat"},[{packet,4}]),
		loop(ClientName,Port).

4、pid
pid即process identifier,可以理解为进程的句柄或引用
	-module(area_server0). %//这些代码要放在一个文件里
	-export([loop/0]).
	loop() ->
	receive
		{rectangle, Width, Ht} ->
			io:format("Area of rectangle is ~p~n" ,[Width * Ht]),
			loop();
		{circle, R} ->
			io:format("Area of circle is ~p~n" , [3.14159 * R * R]),
			loop();
		Other ->
			io:format("I don't know what the area of a ~p is ~n" ,[Other]),
			loop()
	end.
	1> Pid = spawn(fun area_server0:loop/0).
	<0.36.0>
	2> Pid ! {rectangle, 6, 10}.
	Area of rectangle is 60
	{rectangle,6,10}
	3> Pid ! {circle, 23}.
	Area of circle is 1661.90
	{circle,23}
	4> Pid ! {triangle,2,4,5}.
	I don't know what the area of a {triangle,2,4,5} is
	{triangle,2,4,5}

5、record
record是用来存储一定数量元素的数据结构,这类似于c语言的struct结构;record不是真正的数据类型,在编译时,它会被翻译成tuple表达式
	-record(person,
		{
			name = "yymt",
			age = 26,
			gender = m,
			address = beijing,
			home
		}).%//放在record.hrl文件里

	10> rr("record.hrl").
	12> X = #person{}.
	#person{name = "yymt",age = 26,gender = m,address = beijing,
			home = undefined}
	13> X1 = #person{home=henan,address=shenzhen}.
	#person{name = "yymt",age = 26,gender = m,
			address = shenzhen,home = henan}
	14> #person{name=Who,age=Age} = X1.
	#person{name = "yymt",age = 26,gender = m,
			address = shenzhen,home = henan}
	15> Who.
	"yymt"
	16> Age.
	26		

6、比较不同数据类型变量的大小
   6.1、erlang
	number < atom < reference < fun < port < pid < tuple < list < binary

这什么意思呢?看段代码便知:
	17> 2 < a.
	true
	19> a < {}.
	true 

   6.2、python
python中set是不能跨数据类型比较的
	boolean < number < dictionary < tuple < fun < list < string 

	>>> f = lambda x: x > 2
	>>> {} < []
	True
	>>> 2 < {}
	True
	>>> 2 < '2'
	True
	>>> 2 < []
	True
	>>> 's' < []
	False
	>>> 2 < f
	True
	>>> 'a' < []
	False
	>>> [] < {}
	False
	>>> {} < []
	True
	>>> {'a'} < ['a']
	Traceback (most recent call last):
	  File "<stdin>", line 1, in <modul
	TypeError: can only compare to a set
	>>> 'a' < [9]
	False
	>>> {'a':3} < ['a']
	True
	>>> 2 < {2:3}
	True
	>>> 'a' < (3)
	False
	>>> (3) < [3]
	True
	>>> {1:2} < (3)
	False
	>>> f < 3
	False
	>>> f < {1:2}
	False
	>>> f < [2]
	True
	>>> f < (2)
	False
	>>> 2 < True
	False
	>>> True < 2
	True 
分享到:
评论

相关推荐

    Pragmatic.Programming.Erlang.2nd.Edition

    《Pragmatic Programming Erlang 第二版》由Erlang之父Joe Armstrong撰写,是一本深入浅出地介绍了Erlang语言特性和编程技巧的专业书籍。本书不仅适用于初学者入门,也为经验丰富的开发者提供了新的见解和技术指导。...

    erlang学习笔记

    模式匹配是Erlang的核心特性之一,它不仅限于数据结构,还可以用于函数参数、变量声明等多个层面。 函数调用在Erlang中通过`apply(Module, Function, Arguments)`实现,这使得调用其他模块中的函数变得简单。对于...

    Python-一个用Python实现的Erlang结点使用gevent库

    标题中的“Python-一个用Python实现的Erlang结点使用gevent库”指的是一个Python项目,该项目旨在实现Erlang的节点功能,但完全使用Python语言编写,并且利用了gevent库来提高并发性能。Erlang是一种用于构建高可用...

    Building.Web.Applications.with.Erlang

    Building.Web.Applications.with.Erlang

    erlang-22.3-1.el7.x86_64.rpm

    RPM包包含了安装、升级和卸载Erlang所需的所有元数据和二进制文件,用户可以通过RPM工具方便地进行安装和管理。 总结,"erlang-22.3-1.el7.x86_64.rpm"是一个专为RabbitMQ准备的Erlang版本,适合在RHEL 7或类似系统...

    Erlang生态的分布式Pythonpy.zip

    py 是为 Erlang 生态系统准备的分布式 Python。该项目有两个主要特性: Python 的简单封装接口,封装了 ErlPort 调用,可方便的进行: Make module-level calls Get module-level constants Instantiate ...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    学习Scala,你需要理解其静态类型的特性、模式匹配、 Actors模型以及类型系统,包括高阶函数、特质(traits)和不可变数据结构。 Groovy是另一种基于JVM的动态编程语言,它的语法简洁,易于阅读和编写。Groovy与...

    erlang 学习笔记1

    【标题】"Erlang 学习笔记1" 在深入探讨Erlang这一强大的并发编程语言之前,我们先来理解一下Erlang的基本概念。Erlang是由瑞典电信设备制造商Ericsson开发的一种函数式编程语言,它最初设计的目的是为了处理分布式...

    The Life and Works of A. K. Erlang 1948 E. Brockmeyer, H. L. Halstrerm

    2. **等待时间调查**:Erlang 分析了不同类型的服务时间分布(如泊松分布、二项分布和恒定服务时间)对等待时间的影响。 3. **综合排队问题**:这类问题涉及到同时考虑损失率和等待时间的情形。Erlang 开发了一些...

    Manning.Erlang.and.OTP.in.Action.May.2010.MEAP.rar

    1. **Erlang基础**:介绍Erlang的基本语法、数据类型、函数式编程概念,以及如何使用其强大的模式匹配功能。 2. **并发编程**:讲解Erlang中的进程、消息传递和并发模型,以及如何通过进程来实现异步和并行计算。 ...

    Manning.Erlang.and.OTP.in.Action.May.2010.MEAP

    《Erlang and OTP in Action》是一本详尽介绍了Erlang编程语言及其相关框架——OTP的重要著作。该书不仅适合Erlang初学者,也适用于有一定经验的开发者。Erlang是一种专门设计用于构建可扩展且健壮的实时系统的编程...

    java php python erlang 千万级内存数据性能比较

    Python的字典操作通常很快,但由于动态类型和解释执行,对于千万级数据处理,其性能可能低于编译型语言。 标签"千万级性能"提示我们关注的重点在于每种语言在处理大量内存数据时的效率。在实际应用中,除了语言本身...

    Erlang程序设计 Programming.Erlang.Joe.Armstrong.英文版.pdf

    - **1.1 路线图**:介绍了学习Erlang的基本路线图,帮助读者了解学习过程中应该关注的重点。 - **1.2 再次开始**:可能指的是对那些有一定编程基础的读者而言,重新审视Erlang的特性和思维方式。 - **1.3 致谢**...

    esl-erlang_23.0_windows_amd64.exe rabbitmq-server-3.8.4.exe

    esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...

    JavaScript + Delphi + ErLang讲座内容(4)

    【JavaScript + Delphi + ErLang讲座内容(4)】是一个专题讲座的第四部分,主要探讨了如何将三种技术——JavaScript、Delphi和Erlang——整合应用。这个压缩包包含了多个资源,帮助学习者理解这三者的交互和实际应用...

    erlang-23.2.3-1.el7.x86_64.rpm和erlang-23.2.1-1.el7.x86_64.rpm.rar

    Erlang是一种高级编程语言,特别适用于并发、分布式和实时计算系统。它的设计目标是创建一个高度可靠且容错的环境,广泛应用于电信、金融、在线游戏和消息队列服务等领域。Erlang由爱立信开发,其核心概念包括进程...

    peb.so erlang(二廊桥php扩展)

    php扩展peb.so erlang通讯扩展,解决宝塔编译安装php peb扩展编译失败,直接上传到php扩展目录修改配置文件即可使用。

    erlang文献及资料汇总

    erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) ...erlang VM内部数据共享机制 erlang 消息传递机制 文章地址:http://blog.csdn.net/mycwq/article/details/43115733

    erlang 深度分析

    ### Erlang深度分析知识点概述 #### 1. Erlang虚拟机(VM)分析 - **概念**: Erlang VM,也称为BEAM (Bytecode for the Erlang Abstract Machine),是Erlang语言的基础运行环境。 - **特性**: - **轻量级进程**: ...

Global site tag (gtag.js) - Google Analytics