标签:Python
正则表达式两篇: 基础正则 Perl正则 本文是对Perl正则的一点扩展,主要内容是使用qr//创建正则对象,以及一些其它的技巧。 qr//创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以将正则中的一部分表达式事先保存在变量中。例如: $str="hello worlds gaoxiao
施瓦茨变换(Schwartzian Transform)是一种排序思路。先看看它的结构: my @output_data = map { EXTRACTION }, sort { COMPARISON } map [ CONSTRUCTION ], @input_data;
从函数复用开始:eval和do执行perl文件 当我们定义了一个功能比较通用的子程序,比如获取数值的绝对值。想要到处使用这个子程序,就得不断复制、粘贴这段绝对值函数的定义文本。显然,这是不太理想的方式。 于是,就将包含这个子程序的代码放进一个perl文件,然后通过特殊的语法去导入这个文件。 例如,文
单文件版的perl程序只能用于构建较小的脚本程序。当代码规模较大时,应该遵循下面两条规则来构建程序。这样能将程序的各个部分按功能一个一个地细化,便于维护,也便于后续开发。 能复用的代码放进函数 能复用的函数放进模块 名称空间和包 名称空间用于组织逻辑逻辑代码和数据,一个名称空间由一个包名,包内的所有
名称冲突问题 假如在sum2.pm中使用require导入了一个代码文件sum1.pm: #!/usr/bin/env perl use strict; use warnings; use 5.010; require '/perlapp/sum1.pm'; sub sum { say
这是5个特殊的代码块。要理解这几个块,关键在于几个时间点: (1).程序编译期间 (2).程序执行期间 (3).程序执行结束但还未退出期间 BEGIN块 BEGIN块是在程序编译期间执行的,也就是上面的步骤(1)所在期间 即使程序中出现了语法错误,BEGIN块也会执行 如果出现了多个BEGIN块,则
官方手册:https://perldoc.perl.org/perlpod.html POD文档是perl的man文档,可以用perldoc输出,也可以直接用man输出。在开始下面的文章之前,请先粗略浏览一到两篇perldoc文档,或去CPAN找几个模块的文档浏览下大致格式。 例如: $ perld
当写好一个或多个模块后,可以将它构建、打包成"tar.gz",以便让别人安装或者上传到CPAN(如果愿意的话)。对于模块的使用者来说,也不用再使用use lib 'LIB_PATH'来找pm文件,安装后一般都会安装到@INC路径下,然后直接使用use MODULE即可。 Module::Starte
官方手册:http://perldoc.perl.org/perlobj.html 本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构——对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇。 Perl面向对象的三个准则 类就是包 对象就是一个数据
本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构——对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇。 已有的代码结构 现在有父类Animal,子类Horse,它们的代码分别如下: lib/Animal.pm中: #!/usr/bin/env
本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构——对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇。 perl中使用引用计数的方式管理内存,对象也是引用,所以对象的销毁也是由引用计数的管理方式进行管理的。也就是说,当一个对象(也就是一个数据
python中的字符串 python中的字符串类型为str,也是平时操作的类型。但除了str类型,还有一个专门的名为"string"的模块(导入即可知),是很早以前没有str类型的时候用的,现在几乎不用。 在python 3.x中,字符串的类型str是Unicode的。除此之外还有byte类型、by
python中字符串对象提供了很多方法来操作字符串,功能相当丰富。 print(dir(str)) [..........'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find',
字典类型简介 字典(dict)是存储key/value数据的容器,也就是所谓的map、hash、关联数组。无论是什么称呼,都是键值对存储的方式。 在python中,dict类型使用大括号包围: D = {"key1": "value1", "key2": "value2", "k
集合类型简介 集合也是容器,其内元素都是无序、唯一、不可变的。它常用来做成员测试、移除重复数据、数据计算(比如交集、并集、差集)。 集合Set是dict的无value版。集合也使用大括号包围: >>> s = {'a','b','c'} >>> type(s) &
函数声明、调用、返回基础 Python中使用def关键字来声明函数,声明函数的格式为: def func_name(args): ...body... [return ...] 有3个需要注意的地方: 函数名后面必须加冒号 如果函数体和def不在同一行,则必须缩进 return指定函
函数多个返回值 python的函数支持返回多个值。返回多个值时,默认以tuple的方式返回。 例如,下面两个函数的定义是完全等价的。 def f(): return 1,2 def f(): return (1,2) 如果将函数调用的返回值赋值给对应个数的变量,它会一一对应的赋值,
作用域是指变量的生效范围,例如本地变量、全局变量描述的就是不同的生效范围。 python的变量作用域的规则非常简单,可以说是所有语言中最直观、最容易理解的作用域。 在开始介绍作用域之前,先抛一个问题: x=1 def f(): x=3 g() print("f:",x)
按"指针"传递 python中变量赋值、参数传递都是通过"指针"拷贝的方式进行的。除了按"指针"拷贝,还有一种按值拷贝的方式,关于按值、按指针拷贝的细节,参见按值传递 vs. 按指针传递。 所以在python中,变量赋值、参数传递,都只是拷贝了源数据的一个地址,而不会拷贝内存中完整的数据对象副本。所
函数属性 python中的函数是一种对象,它有属于对象的属性。除此之外,函数还可以自定义自己的属性。注意,属性是和对象相关的,和作用域无关。 自定义属性 自定义函数自己的属性方式很简单。假设函数名称为myfunc,那么为这个函数添加一个属性var1: myfunc.var1="abc" 那么这个属性