Python语言的其他特性(第四章:不常用的特性)

如何使用lambda和filter函数

如何使用map来避免循环

字符串替换

getopt模块

4.1 lambda和filter:简单的匿名函数

4.2Map短路循环

4.3在列表中做出决策——列表解析

4.4为循环生成迭代器

4.5使用字典的特殊字符串替换

4.6重要模块

4.6.1getopt从命令行中得到选项

在unix系统中指定一个程序的运行方式,最常用方法是在程序的命令行中加入参数。例如,你可能已经看到了能够在运行很多程序时可以使他们提供关于其运行方式的基本信息。在python中使用-h来实现的

以前在不同的unix平台上采用不同的方式来指定这些选项,而这在很大很大程度上导致了大部分项目采用了两种选项形式:简易形式和长形式。

使用者两种选项是很有意义的,理想情况下,我们希望同时提供一个简易的和长的命令形式,并且允许随意地指定其中的一个,所以如果想要编写一个具有用户可以制定的配置文件的程序,可能要唯有经验的用户提供-c这样的一个简易选项,还有-config-file这样的长的选项,在任何一种情况下,都希望他们在程序中具有相同的功能已节省时间,同时允许用户自由地使用这些选项。

getopt模块为了是这个标准的约定易用提供了两个函数:getopt.getopt和getopt.gnugetopt,他们基本上是相同的,基本的getopt一直运行到遇到第一个非选项,其余的不检查。

为了让getopt更有用,必须知道想让用户使用什么选项,通常情况下,编写的城市最少要为用户提供关于如何运行程序的信息,就像python的-h打印信息一样。

还有具有一个配置文件通常非常有用,将这些想法作为出发点,可以开始编写新程序,使得-h和--help都能产生关于程序如何使用的最少信息。

当使用长选项并要求一个参数(像其那面例子中的--config)时,必须使用等号连接选项和参数的值。然而,当使用简易选项时,可以用一个或多个空格或制表符分割选项和它对应的值。

前面的代码片段如果在一个使用参数-c test -h -config=secondtest的程序中运行,将产生下面的输出:

注意配置文件的第二个实例是默认接受的,当他出现时,重新访问设置config文件的相同代码,以使得能够第二个实例。

第二个列表是一个空的列表,这里因为命令行中提供给程序的所有选项都是有效的选项,或者选项的有有效参数,如果在选项中间插入其他的字符串,标准的getopt会有不同的行为,如果将参数替换

4.6.2使用一个以上的进程

在unix和类unix的操作系统中,执行某种类型的子任务的主要方式是运行一个新的程序已建立一个新的进程。在unix系统中,这个使用一个系统调用完成的,在python中,额可以使用os.fork进行系统调用,计算机会复制一个当前信息到新创建的进程中,唯一不同的是新创建的进程(子进程)中os.fork的返回值是0,而这个返回值是新创建的进程在原始进程(父进程)中的进程ID(PID)。

父进程能够在子进程运行中等待一个事件,反之亦然,代码简单实用,但是只能工作在nuix和类unix系统上。

调用os.fork之后最常用的一件事情是立即调用os.execl以运行其他程序。os.execl是一个新程序代替正在运行程序的指令,所以它使得调用程序终止,并且一个新的程序出现在他的位置

os.wait函数通知pyt让父进程什么都不做。

4.6.3线程-在相同的进程中完成多个工作

使用fork和spawn创建一个新的进程有时可能需要付出很大的代价,又不能提供足够多的好处,fork不足之处在于,当有时需要程序同时做很多工作时,一些工作可能需要等待其他工作处理完成,发生这样的情况时,可能想要所有不同的组件将它们需要传递到程序的其他部分。

因为子进程最初是使用父进程的数据创建的,所以这些进程间共享很多信息,然而他们是完全不同的实体,因此,使两个进程协同工作需要使用很多技巧。

为了应付不适用子进程的复杂情况,用到了线程的概念。

程序执行时,很多合作的线程比使用单独的进程要方便得多,注意下面的例子使用了子类。

很多情况下,例如网络服务器或者图形用户界面,线程具有更重要的意义,因为他们只需要程序员做很少的工作,并且需要系统资源很少。

时间: 2024-11-06 10:00:17

Python语言的其他特性(第四章:不常用的特性)的相关文章

《python for data analysis》第四章,numpy的基本使用

<利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块-- # -*- coding:utf-8 -*-# <python for data analysis>第四章, numpy基础# 数组与矢量计算import numpy as npimport time # 开始计时start = time.time() # 创建一个arraydata = np.array([[

《数据结构与算法分析:C语言描述》复习——第四章“树”——AVL树

2014.06.15 16:22 简介: AVL树是一种高度平衡的二叉搜索树,其命名源自于联合发明算法的三位科学家的名字的首字母.此处“平衡”的定义是:任意节点的左右子树的高度相差不超过1.有了这个平衡的性质,使得AVL树的高度H总是接近log(N),因此各种增删改查的操作的复杂度能够保证在对数级别.没有bad case是AVL树与普通的二叉搜索树的最大区别.为了实现平衡性质,我们需要记录每个节点的高度(或者平衡因子)来检测不平衡的情况.为了修正高度不平衡,需要用到“旋转”的方法,分为单旋转和双

流畅python学习笔记:第十九章:动态属性和特性

首先来看一个json文件的读取.书中给出了一个json样例.该json文件有700多K,数据量充足,适合本章的例子.文件的具体内容可以在http://www.oreilly.com/pub/sc/osconfeed上查看.首先先下载数据生成json文件. def load():     url='http://www.oreilly.com/pub/sc/osconfeed'     JSON="osconfeed.json"     if not os.path.exists(JSO

《Python 学习手册4th》 第四章 介绍Python对象类型

''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容(每天看42页内容,可以保证月底看完此书) ''' 摘要 Python程序可以分解成模块.语句.表达式和对象: 程序由模块构成: 模块包含语句: 语句包含表达式: 表达式建立并处理对象. 一. 为什么使用内置类型  #了解即可 内置对象使程序更容易编写 内置对象是扩展的组件 内置对象往往比定制的数据结构更高效 内置对象是语言的标准的一部分 二. Py

流畅python学习笔记:第十四章:迭代器和生成器

迭代器和生成器是python中的重要特性,本章作者花了很大的篇幅来介绍迭代器和生成器的用法. 首先来看一个单词序列的例子: import re re_word=re.compile(r'\w+') class Sentence(object):     def __init__(self,text):         self.text=text         self.word=re_word.findall(text)     def __getitem__(self, item):   

Python基础教程(第十四章 网络编程)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5538341.html______ Created on Marlowes 本章将会给读者展示一些例子,这些例子会使用多种Python的方法编写一个将网络(比如因特网)作为重要组成部分的程序.Python是一个很强大的网络编程工具,这么说有很多原因,首先,Python内有很多针对常见网络协议的库,在库顶部可以获得抽象层,这样就可以

Python 3标准库 第十四章 应用构建模块

Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章     应用构建模块-----------------------------14.1  argparse:命令行选项和参数解析----------------------------- argparse模块 14.1.1  建立解析器 14.1.2  定义参数 argparse模块 14.1.3 

Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service method) 4.4 String类型 String类型不是基本类型,而是引用类型(reference type).

Python语言和标准库(第一章:做出决策)

1-做出决策 2-函数 3-类与对象 4-组织程序 5-文件和目录 6-Python语言的其他特性 7-创建模块 8-文本处理 第一章:做出决策 本章介绍如何创建可以使用循环重复相同操作的情形,自动逐步遍历列表,元组和字典. 如何使用字典,列表和元组,探究字典中的内容. 使用一场处理编写的程序,以应对可能在程序内部处理的问题. 1.1比较两个值是否相等 在python里,如果每个序列中同一位置的每个元素都相同,那么两个序列相同.字典的比较和序列的一样. 1.2比较两个值是否不同 != 1.3比较

《Python网络编程基础》第四章 域名系统

域名系统(DNS) 是一个分布式的数据库,它主要用来把主机名转换成IP地址.DNS以及相关系统之所以存在,主要有以下两个原因: 它们可以使人们比较容易地记住名字,如www.baidu.com. 它们允许服务器改变IP地址,但是还用同样的名字. 作为一个例子,让我们看一下查询    www.baidu.com  首先,您的程序会和操作系统配置文件指定的本地名称服务器通信.这个服务器是一个递归的名称服务器,它收到请求并以适当的方式传递下去,它会为您完成大量工作. 递归服务器做的第一件事情是询问.co