09 2014 档案
摘要:我们在前一章介绍了block的用法,而正确使用block必须要求正确理解block的内存管理问题。这一章,我们只陈述结果而不追寻原因,我们将在下一章深入其原因。一、block放在哪里我们针对不同情况来讨论block的存放位置:1.栈和堆以下情况中的block位于堆中:void foo(){ _...
阅读全文
摘要:一、概述Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。二、热身先看一个比较简单的Block例子:int multiplier = 7;int (^myBl...
阅读全文
摘要:初探nginx架构(100%)众所周知,nginx性能高,而nginx的高性能与其架构是分不开的。那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧。nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。我们...
阅读全文
摘要:I know it well:I read it in the grammar long ago.—William Shakespeare, The Tragedy(悲剧;灾难;惨案) of Titus AndronicusThis chapter introduces the grammar of...
阅读全文
摘要:normative ECMAScript Language specification
阅读全文
摘要:I was directed to MDN'sfor..in pagewhen it said, "for..in Iterates over the enumerable properties of an object."Then I went to theEnumerability and ow...
阅读全文
摘要:Thee(你) I’ll chase(追逐;追捕) hence(因此;今后), thou(你;尔,汝) wolf in sheep’s array.—William Shakespeare, The First Part of Henry the SixthAn array is a linear(...
阅读全文
摘要:The Observer PatternThe Observer is a design pattern where an object (known as a subject) maintains a list of objects depending on it (observers), aut...
阅读全文
摘要:The Singleton PatternThe Singleton pattern is thus known because it restricts instantiation of a class to a single object. Classically, the Singleton ...
阅读全文
摘要:The Module PatternModulesModules are an integral piece of any robust application's architecture and typically help in keeping the units of code for a ...
阅读全文
摘要:In classical object-oriented programming languages, a constructor is a special method used to initialize a newly created object once memory has been a...
阅读全文
摘要:多个人共同操作同一个项目或拷贝项目时,经常会出现类似这样的问题:Undefined symbols for architecture i386:"_OBJC_CLASS_$_xx文件名", referenced from:下面是可能导致这类问题出现的原因及修改:1.相关工程文件未导入你可以直接在这里...
阅读全文
摘要:编辑器的选择(Editor Choices)从初学编程到现在,我用过的编辑器有EditPlus、UltraEdit、Notepad++、Vim、TextMate和Sublime Text,如果让我从中推荐,我会毫不犹豫的推荐Vim和Sublime Text,原因有下面几点:跨平台:Vim和Subli...
阅读全文
摘要:在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果...
阅读全文
摘要:在程序运行过程中,总会遇到各种各样的错误。有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。还有一类错误是完...
阅读全文
摘要:看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。__slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数。除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我...
阅读全文
摘要:继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。回忆一下Animal类层次的设计,假设我们要实现以下4种动物:Dog - 狗狗;Bat - 蝙蝠;Parrot - 鹦鹉;Ostrich - 鸵鸟。如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次:但是如果按照“能跑...
阅读全文
摘要:在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:s = Student()s.score = 9999这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,...
阅读全文
摘要:正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class:>>> class Student(object):... pass...然后,尝试给实例绑定一个属性:>>> s = Student()>>>...
阅读全文
摘要:数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能。我们会讨论多重继承、定制类、元类等概念。
阅读全文
摘要:当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?使用type()首先,我们来判断对象类型,使用type()函数:基本类型都可以用type()判断:>>> type(123)>>> type('str')>>> type(None)如果一个变量指向函数或者类,也可以用type()...
阅读全文
摘要:在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接...
阅读全文
摘要:在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性:>>> bart = Student('Bart Simpson', 98)>>...
阅读全文
摘要:面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。仍以Student类为例,在Python中,定义类是通过class关键字:class Stu...
阅读全文
摘要:面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把...
阅读全文
摘要:>>> d = {'a':1}>>> print '%s' % 1,d1 {'a': 1}>>> print '%s %s' % 1,dTraceback (most recent call last): File "", line 1, in TypeError: not enough argu...
阅读全文
摘要:Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动。有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了。从Python 2.7到Python 3.x就有不兼容的一些改动,比如2.x里的字符串用'xxx'表示str,Unicode字符串用u'...
阅读全文
摘要:在Python中,安装第三方模块,是通过setuptools这个工具完成的。如果你正在使用Mac或Linux,安装setuptools本身这个步骤就可以跳过了。如果你正在使用Windows,请首先从这个地址下载ez_setup.py:https://pypi.python.org/pypi/setu...
阅读全文
摘要:Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。我们以内建的sys模块为例,编写一个hello的模块:#!/usr/bin/env python# -*- coding: utf-8 -*-' a test module '__author__ = 'Michael...
阅读全文
摘要:在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。...
阅读全文
摘要:functools.partial可以设置默认参数和关键字参数的默认值Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调...
阅读全文
摘要:由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。>>> def now():... print '2013-12-25'...>>> f = now>>> f()2013-12-25函数对象有一个__name__属性,可以拿到函数的名字:>>> now.__...
阅读全文
摘要:当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数:>>> map(lambda x: x * x, [1, 2, 3, 4, 5...
阅读全文
摘要:传入函数要理解“函数本身也可以作为参数传入”,可以从Python内建的map/reduce函数入手。如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。...
阅读全文
摘要:函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归...
阅读全文
摘要:通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断...
阅读全文
摘要:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。举个例子,要生成list[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):>>> range(1, 11)[1, 2, 3, 4, 5, ...
阅读全文
摘要:如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码:for (i=0; i>> d ...
阅读全文
摘要:取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下:>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']取前3个元素,应该怎么做?笨办法:>>> [L[0], L[1], L[2]]['Michael', 'Sarah',...
阅读全文
摘要:掌握了Python的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现:L = []n = 1while n <= 99: L.append(n) n = n + 2取list的前一半的元素,也可以通过循环...
阅读全文
摘要:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出:fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x...
阅读全文
摘要:定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可...
阅读全文
摘要:在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。我们以自定义一个求绝对值的my_abs函数为例:def my_abs(x): if x >= 0: return x ...
阅读全文
摘要:Python内置了很多有用的函数,我们可以直接调用。要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从Python的官方网站查看文档:http://docs.python.org/2/library/functions.html#abs也可以在交互式命令行通...
阅读全文
摘要:python2.7的类库:https://docs.python.org/2.7/library/index.html
阅读全文
摘要:我们知道圆的面积计算公式为:S = πr2当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积:r1 = 12.34r2 = 9.08r3 = 73.1s1 = 3.14 * r1 * r1s2 = 3.14 * r2 * r2s3 = 3.14 * r3 * r...
阅读全文
摘要:dictPython内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:names = ['Michael', 'Bob'...
阅读全文
摘要:条件判断计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现age = 20if age >= 18: print 'your age is',age print 'adult'根据Python的缩进...
阅读全文
摘要:listPython内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。比如,列出班里所有同学的名字,就可以用一个list表示:>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classmates['Michae...
阅读全文
摘要:字符编码我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=...
阅读全文
摘要:数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:整数Python可以处理任意大小...
阅读全文
摘要:Python是一种计算机编程语言。计算机编程语言和我们日常使用的自然语言有所不同,最大的区别就是,自然语言在不同的语境下有不同的理解,而计算机要根据编程语言执行任务,就必须保证编程语言写出的程序决不能有歧义,所以,任何一种编程语言都有自己的一套语法,编译器或者解释器就是负责把符合语法的程序代码转换成...
阅读全文
摘要:输出用print加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world',用代码实现如下:>>> print 'hello, world'print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:>>> print 'The quick brown fox', ...
阅读全文
摘要:将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2这款编辑器,然后这段时间就试了一下,就深深地喜欢上这款编辑器了,对于类似的编辑器,我用过notep...
阅读全文
摘要:将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2这款编辑器,然后这段时间就试了一下,就深深地喜欢上这款编辑器了,对于类似的编辑器,我用过notep...
阅读全文
摘要:在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。现在,我们就把上次的'hello, world'程序用文本编辑器写出来,保存下来...
阅读全文
摘要:现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了。在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上。写程序也讲究一个感觉,你需要一个字母一个字母地把代码自己敲进去,在敲代码的过程中,初学者经常会敲错代码,所以,你需要仔细地检查、...
阅读全文
摘要:当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。...
阅读全文
摘要:因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。要开始学习Python编程,首先就得把Python安装到你的电脑里。安装后,你会得到Python解释器(就是负责运行Python程序的...
阅读全文
摘要:Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。C语言是可以用来编写操作系统的贴近硬件的语言,所以,C语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而Python是用来编写应用程序的高级编程语言。当你用一种语言开始作真正的软件开...
阅读全文
摘要:Python是一种计算机程序设计语言。尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。而不同的编程语言,干同一个活,编写的代码量,差距也很大。代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。YouTube是Python...
阅读全文
摘要:Theorg.xml.sax.helpers.DefaultHandlerclass is the base class for "listeners" in SAX 2.0.As shown briefly in the first text on SAX in this tutorial, yo...
阅读全文
摘要:SAX is an abbreviation and means "Simple API for XML". A Java SAX XML parser is a stream oriented XML parser. It works by iterating over the XML and c...
阅读全文
摘要:As mentioned in the introduction Sun now provides these tools for XML Processing in Java:StAX Reader / WriterSAX ParserDOM ParserXPath EvaluatorXSL Pr...
阅读全文
摘要:Java comes with a set of tools to process XML. These Java XML tools are:SAX ParserStAX ParserDOM ParserXPath EvaluatorXSL ProcessorJAXBThese are the J...
阅读全文
摘要:In a DTD, attributes are declared with an ATTLIST declaration.Declaring AttributesAn attribute declaration has the following syntax:DTD example:XML ex...
阅读全文
摘要:In a DTD, elements are declared with an ELEMENT declaration.Declaring ElementsIn a DTD, XML elements are declared with an element declaration with the...
阅读全文
摘要:The main building blocks of both XML and HTML documents are elements.The Building Blocks of XML DocumentsSeen from a DTD point of view(从dtd的角度来看), all...
阅读全文
摘要:A Document Type Definition (DTD) defines the legal building blocks of an XML document. It defines the document structure with a list of legal elements...
阅读全文
摘要:The purpose of a DTD (Document Type Definition) is to define the legal building blocks of an XML document.A DTD defines the document structure with a ...
阅读全文
摘要:打包命令: targzip 与 bzip2 也能够针对目录来进行压缩, 不过,这两个命令对目录的压缩指的是『将目录内的所有文件 "分别" 进行压缩』! 将多个文件或目录包成一个大文件的,『打包命令』tar[root@www ~]# tar [-j|-z] [cv] [-f 创建的档名] filena...
阅读全文
摘要:Linux 系统常见的压缩命令:在Linux中,压缩文件的扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』Linux 支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,彼此之间可能就无法相互压缩/解压缩文件。 所以,当你下载到某个压缩档时,...
阅读全文
摘要:压缩文件的用途与技术对大型文件使用压缩技术可以减低大型文件的容量,有的压缩程序还可以分割大型文件成为数个小型文件!目前我们使用的计算机系统都是使用 bytes 单位来计量的!不过,计算机最小的计量单位应该是 bits , 1 byte = 8 bits 。假如我们只是记忆一个数字,比如1,计算机如何...
阅读全文
摘要:管线命令使用『 | 』界定符号[root@www ~]# ls -al /etc | less管线命令『 | 』仅能处理经由前面一个命令传来的正确信息,也就是 standard output 的信息,对于 stdandard error 并没有直接处理的能力。 图 6.1.1、 管线命令的处理示意图...
阅读全文
摘要:数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给它导向到其他的地方,例如文件或者是装置 (例如打印机之类的)!什么是数据流重导向命令运行过程如下: 图 5.1.1、命令运行过程的数据传输情况 运行一个命令的时候,这个命令可能会由文件读入数据,经过处理之后,再将数据输出到屏幕上。 ...
阅读全文
摘要:while do done, until do done (不定循环)while [ condition ] $s"for...do...done (固定回圈)for 这种语法,则是『 已经知道要进行几次回圈』的状态!他的语法是:for var in con1 con2 con3 ...do...
阅读全文
摘要:利用 if .... then单层、简单条件判断式if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的命令工作内容;fi {$0 someword}"else echo "The only parameter is 'hello', ex> {$0 hello}"finetst...
阅读全文
摘要:善用判断式利用 test 命令的测试功能我要检查 /dmtsai 是否存在时,使用:[root@www ~]# test -e /dmtsai[root@www ~]# test -e /dmtsai && echo "exist" || echo "Not exist"Not exist $0...
阅读全文
摘要:简单的 shell script 练习简单范例 对谈式脚本:变量内容由使用者决定[root@www scripts]# vi sh02.sh#!/bin/bash# Program:# User inputs his first name and last name. Program shows...
阅读全文
摘要:什么是 Shell scriptsshell script (程序化脚本) :shell script 是针对 shell 所写的『脚本!』shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文字档,将一些 shell 的语法与命令(含外部命...
阅读全文
摘要:Boot Loader: Grub『 boot loader 是加载核心的重要工具』!没有 boot loader 的话,那么 kernel 根本就没有办法被系统加载!boot loader 的两个 stage在 BIOS 读完资讯后,接下来就是会到第一个启动装置的 MBR 去读取 boot loa...
阅读全文
摘要:核心与核心模块在整个启动的过程当中,是否能够成功地驱动我们主机的硬件配备, 是核心 (kernel) 的工作!而核心一般都是压缩档,因此在使用核心之前,就得要将它解压缩后, 才能加载主内存当中。另外,为了应付日新月异的硬件,目前的核心都是具有『可读取模块化驱动程序』的功能, 亦即是所谓的『 modu...
阅读全文

浙公网安备 33010602011771号