python第五章

一、字符串格式化

1、字符串格式化使用字符串格式化操作符,即%来实现。在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典。一般情况下使用元组:

>>> format = ‘Hello, %s. %s enough for ya?‘
>>> values = (‘world‘, ‘Hot‘)
>>> print format % values
Hello, world. Hot enough for ya?

注:(1)如果使用列表或者其他序列代替元组,那么序列就会被解释成一个值。只有元组和字典可以格式化一个以上的值。

(2)如果要在格式化字符串里面包括百分号,那么必须使用%%,这样Python就不会将百分号误认为是转换说明符了。

>>> format = ‘The rate is %s%, so low‘
>>> values = 31.0
>>> print format % values
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>> format = ‘The rate is %s%%, so low‘
>>> values = 31.0
>>> print format % values
The rate is 31.0%, so low

2、

Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法;

Python是完全面向对象的语言, 任何东西都是对象;

字符串的参数使用{NUM}进行表示,0, 表示第一个参数,1, 表示第二个参数, 以后顺次递加;

使用":", 指定代表元素需要的操作, 如":.3"小数点三位, ":8"占8个字符空间等;

还可以添加特定的字母, 如:

‘b‘ - 二进制. 将数字以2为基数进行输出.

‘c‘ - 字符. 在打印之前将整数转换成对应的Unicode字符串.

‘d‘ - 十进制整数. 将数字以10为基数进行输出.

‘o‘ - 八进制. 将数字以8为基数进行输出.

‘x‘ - 十六进制. 将数字以16为基数进行输出, 9以上的位数用小写字母.

‘e‘ - 幂符号. 用科学计数法打印数字, 用‘e‘表示幂.

‘g‘ - 一般格式. 将数值以fixed-point格式输出. 当数值特别大的时候, 用幂形式打印.

‘n‘ - 数字. 当值为整数时和‘d‘相同, 值为浮点数时和‘g‘相同. 不同的是它会根据区域设置插入数字分隔符.

‘%‘ - 百分数. 将数值乘以100然后以fixed-point(‘f‘)格式打印, 值后面会有一个百分号.

数字(0, 1, ...)即代表format()里面的元素, 所以可以使用"."调用元素的方法;

代码如下:

age = 25
name = ‘Caroline‘  

print(‘{0} is {1} years old. ‘.format(name, age)) #输出参数
print(‘{0} is a girl. ‘.format(name))
print(‘{0:.3} is a decimal. ‘.format(1/3)) #小数点后三位
print(‘{0:_^11} is a 11 length. ‘.format(name)) #使用_补齐空位
print(‘{first} is as {second}. ‘.format(first=name, second=‘Wendy‘)) #别名替换
print(‘My name is {0.name}‘.format(open(‘out.txt‘, ‘w‘))) #调用方法
print(‘My name is {0:8}.‘.format(‘Fred‘)) #指定宽度

二、模块

 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:

  模块名.函数名

  为什么必须加上模块名这样调用呢?因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。

import math

#这样会报错
print sqrt(2)

#这样才能正确输出结果
print math.sqrt(2)

有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句

  from 模块名 import 函数名1,函数名2....

来实现,当然可以通过不仅仅可以引入函数,还可以引入一些常量。通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。

  如果想一次性引入math中所有的东西,还可以通过from math import *来实现,但是不建议这么做。

定义自己的模块

  在Python中,每个Python文件都可以作为

def add(a,b):
    return a+b

python常用模块

os模块:
    os.remove()         删除文件
    os.unlink()         删除文件
    os.rename()         重命名文件
    os.listdir()        列出指定目录下所有文件
    os.chdir()          改变当前工作目录
    os.getcwd()         获取当前文件路径
    os.mkdir()          新建目录
    os.rmdir()          删除空目录(删除非空目录, 使用shutil.rmtree())
    os.makedirs()       创建多级目录
    os.removedirs()     删除多级目录
    os.stat(file)       获取文件属性
    os.chmod(file)      修改文件权限
    os.utime(file)      修改文件时间戳
    os.name(file)       获取操作系统标识
    os.system()         执行操作系统命令
    os.execvp()         启动一个新进程
    os.fork()           获取父进程ID,在子进程返回中返回0
    os.execvp()         执行外部程序脚本(Uinx)
    os.spawn()          执行外部程序脚本(Windows)
    os.access(path, mode) 判断文件权限(详细参考cnblogs)
    os.wait()           暂时未知
os.path模块:
    os.path.split(filename)         将文件路径和文件名分割(会将最后一个目录作为文件名而分离)
    os.path.splitext(filename)      将文件路径和文件扩展名分割成一个元组
    os.path.dirname(filename)       返回文件路径的目录部分
    os.path.basename(filename)      返回文件路径的文件名部分
    os.path.join(dirname,basename)  将文件路径和文件名凑成完整文件路径
    os.path.abspath(name)           获得绝对路径
    os.path.splitunc(path)          把路径分割为挂载点和文件名
    os.path.normpath(path)          规范path字符串形式
    os.path.exists()                判断文件或目录是否存在
    os.path.isabs()                 如果path是绝对路径,返回True
    os.path.realpath(path)          #返回path的真实路径
    os.path.relpath(path[, start])  #从start开始计算相对路径
    os.path.normcase(path)          #转换path的大小写和斜杠
    os.path.isdir()                 判断name是不是一个目录,name不是目录就返回false
    os.path.isfile()                判断name是不是一个文件,不存在返回false
    os.path.islink()                判断文件是否连接文件,返回boolean
    os.path.ismount()               指定路径是否存在且为一个挂载点,返回boolean
    os.path.samefile()              是否相同路径的文件,返回boolean
    os.path.getatime()              返回最近访问时间 浮点型
    os.path.getmtime()              返回上一次修改时间 浮点型
    os.path.getctime()              返回文件创建时间 浮点型
    os.path.getsize()               返回文件大小 字节单位
    os.path.commonprefix(list)      #返回list(多个路径)中,所有path共有的最长的路径
    os.path.lexists                 #路径存在则返回True,路径损坏也返回True
    os.path.expanduser(path)        #把path中包含的"~"和"~user"转换成用户目录
    os.path.expandvars(path)        #根据环境变量的值替换path中包含的”$name”和”${name}”
    os.path.sameopenfile(fp1, fp2)  #判断fp1和fp2是否指向同一文件
    os.path.samestat(stat1, stat2)  #判断stat tuple stat1和stat2是否指向同一个文件
    os.path.splitdrive(path)        #一般用在windows下,返回驱动器名和路径组成的元组
    os.path.walk(path, visit, arg)  #遍历path,给每个path执行一个函数详细见手册
    os.path.supports_unicode_filenames()     设置是否支持unicode路径名 
sys模块:
    sys.argv                命令行参数List,第一个元素是程序本身路径
    sys.path                返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.modules.keys()      返回所有已经导入的模块列表
    sys.modules             返回系统导入的模块字段,key是模块名,value是模块
    sys.exc_info()          获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
    sys.exit(n)             退出程序,正常退出时exit(0)
    sys.hexversion          获取Python解释程序的版本值,16进制格式如:0x020403F0
    sys.version             获取Python解释程序的版本信息
    sys.platform            返回操作系统平台名称
    sys.stdout              标准输出
    sys.stdout.write(‘aaa‘) 标准输出内容
    sys.stdout.writelines() 无换行输出
    sys.stdin               标准输入
    sys.stdin.read()        输入一行
    sys.stderr              错误输出
    sys.exc_clear()         用来清除当前线程所出现的当前的或最近的错误信息
    sys.exec_prefix         返回平台独立的python文件安装的位置
    sys.byteorder           本地字节规则的指示器,big-endian平台的值是‘big‘,little-endian平台的值是‘little‘
    sys.copyright           记录python版权相关的东西
    sys.api_version         解释器的C的API版本
    sys.version_info        ‘final‘表示最终,也有‘candidate‘表示候选,表示版本级别,是否有后继的发行
    sys.getdefaultencoding()        返回当前你所用的默认的字符编码格式
    sys.getfilesystemencoding()     返回将Unicode文件名转换成系统文件名的编码的名字
    sys.builtin_module_names        Python解释器导入的内建模块列表
    sys.executable                  Python解释程序路径
    sys.getwindowsversion()         获取Windows的版本
    sys.stdin.readline()            从标准输入读一行,sys.stdout.write("a") 屏幕输出a
    sys.setdefaultencoding(name)    用来设置当前默认的字符编码(详细使用参考文档)
    sys.displayhook(value)          如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档)
  
datetime,date,time模块:
    datetime.date.today()           本地日期对象,(用str函数可得到它的字面表示(2014-03-24))
    datetime.date.isoformat(obj)    当前[年-月-日]字符串表示(2014-03-24)
    datetime.date.fromtimestamp()   返回一个日期对象,参数是时间戳,返回 [年-月-日]
    datetime.date.weekday(obj)      返回一个日期对象的星期数,周一是0
    datetime.date.isoweekday(obj)   返回一个日期对象的星期数,周一是1
    datetime.date.isocalendar(obj)  把日期对象返回一个带有年月日的元组
    datetime对象:
    datetime.datetime.today()       返回一个包含本地时间(含微秒数)的datetime对象 2014-03-24 23:31:50.419000
    datetime.datetime.now([tz])     返回指定时区的datetime对象 2014-03-24 23:31:50.419000
    datetime.datetime.utcnow()      返回一个零时区的datetime对象
    datetime.fromtimestamp(timestamp[,tz])      按时间戳返回一个datetime对象,可指定时区,可用于strftime转换为日期表示
    datetime.utcfromtimestamp(timestamp)        按时间戳返回一个UTC-datetime对象
    datetime.datetime.strptime(‘2014-03-16 12:21:21‘,"%Y-%m-%d %H:%M:%S") 将字符串转为datetime对象
    datetime.datetime.strftime(datetime.datetime.now(), ‘%Y%m%d %H%M%S‘) 将datetime对象转换为str表示形式
    datetime.date.today().timetuple()           转换为时间戳datetime元组对象,可用于转换时间戳
    datetime.datetime.now().timetuple()
    time.mktime(timetupleobj)                   将datetime元组对象转为时间戳
    time.time()                     当前时间戳
    time.localtime
    time.gmtime 
hashlib,md5模块:
    hashlib.md5(‘md5_str‘).hexdigest()      对指定字符串md5加密
    md5.md5(‘md5_str‘).hexdigest()          对指定字符串md5加密
      
random模块:
    random.random()             产生0-1的随机浮点数
    random.uniform(a, b)        产生指定范围内的随机浮点数
    random.randint(a, b)        产生指定范围内的随机整数
    random.randrange([start], stop[, step]) 从一个指定步长的集合中产生随机数
    random.choice(sequence)     从序列中产生一个随机数
    random.shuffle(x[, random]) 将一个列表中的元素打乱
    random.sample(sequence, k)  从序列中随机获取指定长度的片断  
string模块:
    str.capitalize()            把字符串的第一个字符大写
    str.center(width)           返回一个原字符串居中,并使用空格填充到width长度的新字符串
    str.ljust(width)            返回一个原字符串左对齐,用空格填充到指定长度的新字符串
    str.rjust(width)            返回一个原字符串右对齐,用空格填充到指定长度的新字符串
    str.zfill(width)            返回字符串右对齐,前面用0填充到指定长度的新字符串
    str.count(str,[beg,len])    返回子字符串在原字符串出现次数,beg,len是范围
    str.decode(encodeing[,replace]) 解码string,出错引发ValueError异常
    str.encode(encodeing[,replace]) 解码string
    str.endswith(substr[,beg,end])  字符串是否以substr结束,beg,end是范围
    str.startswith(substr[,beg,end])  字符串是否以substr开头,beg,end是范围
    str.expandtabs(tabsize = 8)     把字符串的tab转为空格,默认为8个
    str.find(str,[stat,end])        查找子字符串在字符串第一次出现的位置,否则返回-1
    str.index(str,[beg,end])        查找子字符串在指定字符中的位置,不存在报异常
    str.isalnum()               检查字符串是否以字母和数字组成,是返回true否则False
    str.isalpha()               检查字符串是否以纯字母组成,是返回true,否则false
    str.isdecimal()             检查字符串是否以纯十进制数字组成,返回布尔值
    str.isdigit()               检查字符串是否以纯数字组成,返回布尔值
    str.islower()               检查字符串是否全是小写,返回布尔值
    str.isupper()               检查字符串是否全是大写,返回布尔值
    str.isnumeric()             检查字符串是否只包含数字字符,返回布尔值
    str.isspace()               如果str中只包含空格,则返回true,否则FALSE
    str.title()                 返回标题化的字符串(所有单词首字母大写,其余小写)
    str.istitle()               如果字符串是标题化的(参见title())则返回true,否则false
    str.join(seq)               以str作为连接符,将一个序列中的元素连接成字符串
    str.split(str=‘‘,num)       以str作为分隔符,将一个字符串分隔成一个序列,num是被分隔的字符串
    str.splitlines(num)         以行分隔,返回各行内容作为元素的列表
    str.lower()                 将大写转为小写
    str.upper()                 转换字符串的小写为大写
    str.swapcase()              翻换字符串的大小写
    str.lstrip()                去掉字符左边的空格和回车换行符
    str.rstrip()                去掉字符右边的空格和回车换行符
    str.strip()                 去掉字符两边的空格和回车换行符
    str.partition(substr)       从substr出现的第一个位置起,将str分割成一个3元组。
    str.replace(str1,str2,num)  查找str1替换成str2,num是替换次数
    str.rfind(str[,beg,end])    从右边开始查询子字符串
    str.rindex(str,[beg,end])   从右边开始查找子字符串位置
    str.rpartition(str)         类似partition函数,不过从右边开始查找
    str.translate(str,del=‘‘)   按str给出的表转换string的字符,del是要过虑的字符
      

三、生成器和迭代器

1迭代器

对于原生支持随机访问的数据结构(如tuple、list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值(可以使用内建函数enumerate()找回这个索引值)。但对于无法随机访问的数据结构(比如set)而言,迭代器是唯一的访问元素的方式。

另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件,或是斐波那契数列等等。

迭代器更大的功劳是提供了一个统一的访问集合的接口,只要定义了__iter__()方法对象,就可以使用迭代器访问。

迭代器有两个基本的方法

  • next方法:返回迭代器的下一个元素
  • __iter__方法:返回迭代器对象本身
class Fabs(object):
    def __init__(self,max):
        self.max = max
        self.n, self.a, self.b = 0, 0, 1  #特别指出:第0项是0,第1项是第一个1.整个数列从1开始
    def __iter__(self):
        return self
    def next(self):
        if self.n < self.max:
            r = self.b
            self.a, self.b = self.b, self.a + self.b
            self.n = self.n + 1
            return r
        raise StopIteration()

print Fabs(5)
for key in Fabs(5):
    print key

2、生成器

带有 yield 的函数在 Python 中被称之为 generator(生成器)

def fab(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n = 1

简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

也可以手动调用 fab(5) 的 next() 方法(因为 fab(5) 是一个 generator 对象,该对象具有 next() 方法),这样我们就可以更清楚地看到 fab 的执行流程:

时间: 2024-10-19 07:12:01

python第五章的相关文章

python第五章函数

第五章 函数 5.1三元运算/三目运算 v = 前面 if 条件语句 else 后面 #如果条件成立,"前面"赋值给v,否则后面赋值给v. v = a if a>b else b # 取a和b中值较大的赋值给v # 让用户输入值,如果值是整数,则转换成整数,否则赋值为None data = input('请输入值:') value = int(data) if data.isdecimal() else None 5.2 函数 5.2.1.函数介绍 截止目前为止,都是面向过程式编

python 第五章 迭代器,生成器,生成器函数

迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点:访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容不能随机访问集合

《Python核心编程》 第五章 数字 - 课后习题

课后习题  5-1 整形. 讲讲 Python 普通整型和长整型的区别. 答:普通整型是绝大多数现代系统都能识别的. Python的长整型类型能表达的数值仅仅与你机器支持的(虚拟)内存大小有关. 5-2 运算符 (a) 写一个函数,计算并返回两个数的乘积 (b) 写一段代码调用这个函数,并显示它的结果 答: def pro(a,b): p = a*b return p a = int(raw_input("a=")) b = int(raw_input("b="))

[python核心编程] 第五章练习题

第五章 数字 5-2. 操作符,写一个函数,计算并返回两个数的乘积“整理的时候才看到我把题目看成两个数的和了” 5-3. 标准类型操作符.写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分成绩(A-F) A:90~100 B:80~89 C:70~79 D:60~69 F:<60 5-4. 取余.判断给定年份是否是闰年.使用下面的公式. 一个闰年后就是指他可以被4整除,但不能被100整除,或者它可以被400整除. [python核心编程] 第五章练习题,布布扣,bubuko.com

Python核心编程(第二版) 第五章习题答案

5-1.整型.讲讲Python普通整型和长整型的区别. 答:Python 的标准整数类型是最通用的数字类型.在大多数 32 位机器上,标准整数类型的取值范围是-2**31到 2**31-1,也就是-2,147,483,648 到 2,147,483,647.如果在 64 位机器上使用 64 位编译器编译 Python,那么在这个系统上的整数将是 64 位. Python 的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关. 5-2.操作符.(a)写一个函数,计算并返回两个数的乘积.

Python核心编程第五章习题

Python核心编程-第五章-习题 5.1  整形,讲讲Python普通整形与长整形的区别? Python的标准整形类型是最通用的数字类型.在大多数32位机器上,标准整形类型的取值范围是-2**32-2**32 - 1. Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整数. 长整型类型是标准整形类型的超集,当程序需要使用比标准整形更大的整型时,可以使用长整型类型,在整型值后面添加L,表示这个为长整型,3.0版本已经统一称为为整

Python基础教程(第五章 条件、循环和其他语句)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5329066.html______ Created on Xu Hoo 读者学到这里估计都有点不耐烦了.好吧,这些数据结构什么的看起来都挺好,但还是没法用它们做什么事,对吧? 下面开始,进度会慢慢加快.前面已经介绍过了几种基本语句(print语句.import语句.赋值语句).在深入介绍条件语句和循环语句之前,我们先来看看这几种基

《Python核心编程》第二版第五章答案

5-1.整型.讲讲Python普通整型和长整型的区别. Python的标准整形类型是最通用的数字类型.在大多数32位机器上,标准整形类型的取值范围是-2**32-2**32 - 1. Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整数. 长整型类型是标准整形类型的超集,当程序需要使用比标准整形更大的整型时,可以使用长整型类型,在整型值后面添加L,表示这个为长整型,这两种整形类型正在逐渐统一为 一种. 5-2.操作符.(a)写一

第五章 python中正则表达式的使用

第一节    正则表达式的一些介绍 1)掌握正则表达式的案例 2)写一个小爬虫 3)正则表达式(或RE)是一个小型的.高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实现. - 可以为想要匹配的相应字符串集指定规则 - 该字符串集可能包含英文语句.e-mail地址.命令或任何你想搞定的东西 - 可以问诸如“这个字符串匹配该模式吗?” - “在这个字符串中是否有部分匹配该模式呢?” - 你也可以使用RE以各种方式来修改或分割字符串. 4)正则表达式模式被编译成一系列