Python学习20180710(一)

1、在Python 语言中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量。
   如:x=1   1这个整形对象被创建,然后将这个对象的引用赋值给x这个变量
 
 
2、多元赋值,其实就是元组赋值
x,y,z=1,2,'string'   等价于   (x,y,z)=(1,2,'string')
 
利用多元赋值实现的两个变量的值交换
 
>>> x, y = 1, 2
>>> x
1
>>> y
2
>>> x, y = y, x
>>> x
2
>>> y
1
 
3、编写模块
 
# 1. 起始行
# -*- coding: cp936 -*-
 
# 2. 模块文档
"""This is a test module again"""
 
# 3. 模块导入
import sys
import os
 
# 4. 变量定义
debug=True
 
# 5. 类定义语句
class FooClass(object):
    """FooClass"""
    flag=1
    def foo(self):
        print "FooClass.foo() is invoked, "+str(self.flag)
 
# 6. 函数定义语句
def test():
    """test function"""
    foo=FooClass()
 
    if debug:
        print 'ran test()'
        foo.foo()
        print foo.flag
 
# 7. 主程序
if __name__ == '__main__':
    test()
    print "what are these?"
 
 
4、时刻记住一个事实
    那就是所有的模块都有能力来执行代码。最高级别的Python 语句--也就是说, 那些没有缩进的代码行在模块被导入时就会执行, 不管是不是真的需要执行。由于有这样一个“特性”,比较安全的写代码的方式就是除了那些真正需要执行的代码以外, 几乎所有的功能代码都在函数当中。再说一遍, 通常只有主程序模块中有大量的顶级可执行代码,所有其它被导入的模块只应该有很少的顶级执行代码,所有的功能代码都应该封装在函数或类当中。
 
 
5、动态类型
变量赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型。在对象创建后,一个该对象的引用会被赋值给左侧的变量。
 
 
6、变量在内存中是通过引用计数来跟踪管理的
    一个对象增加新的引用:对象被创建、对象的别名被创建、作为参数传递给函数、方法或类、成为容器对象中的一个元素
    一个对象减少引用:变量赋值给另外一个对象、del显示删除一个变量、引用离开了它的作用范围、对象被从一个窗口对象中移除、窗口对象本身被销毁
 
7、异常处理
#try-except-else语句,else 子句在try 代码块运行无误时执行
#异常处理最适用的场合,是在没有合适的函数处理异常状况的时候
try:
    fobj=open(fname,'r')
except IOError,e:
    print "file open error: ",e
else:
    for eachLine in fobj:
        print eachLine,
    fobj.close()
 
 
8、所有的Python 对像都拥有三个特性:身份,类型和值。这三个特性在对象创建的时候就被赋值,除了值之外,其它两个特性都是只读的
 
9、布尔值
每个对象天生具有布尔 True 或 False 值。空对象、值为零的任何数字或者Null对象 None 的布尔值都是False
 
10、对象身份比较
>>> x=1.0
>>> y=1.0
>>> x is y
False
>>> x is not y
True
>>> id(x)
19094432
>>> id(y)
19094416
比较两个变量是否指向同一个对象,但是整数和字符串有缓存机制,有可能指向同一个对象
 
11、cmp()
内建函数cmp()用于比较两个对象obj1 和obj2, 如果obj1 小于obj2, 则返回一个负整
数,如果obj1 大于obj2 则返回一个正整数, 如果obj1 等于obj2, 则返回0。它的行为非常
类似于C 语言的strcmp()函数。比较是在对象之间进行的,不管是标准类型对象还是用户自定
义对象。如果是用户自定义对象, cmp()会调用该类的特殊方法__cmp__()。
 
12、str()和repr()
str()函数得到的字符串可读性好, 而repr()函数得到的字符串通常可以用来重新获得该对象, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的。
str()得到的字符串对人比较友好,而repr()得到的字符串对python比较友好
 
13、isinstance()和type(),主要体现的是代码的优化
from types import *
 
def displayNumType0(num) :
    print num,'is',
    if type(num) is IntType :
        print 'an integer'
    elif type(num) is LongType :
        print 'a long'
    elif type(num) is FloatType :
        print 'a float'
    elif type(num) is ComplexType :
        print 'a complex'
    else :
        print 'not a number at all !!!'
 
        
def displayNumType1(num):
    print num, 'is',
    if(isinstance(num,(int,long,float,complex))):
        print 'a number of type: ',type(num).__name__
    else:
        print 'not a number at all !!!'
 
14、标准类型的分类
(1)存储类型
标量/原子类型: 数值(所有的数值类型),字符串(全部是文字)
容器类型: 列表、元组、字典
(2)更新类型
可变类型: 列表, 字典
不可变类型: 数字、字符串、元组
(3)访问模型
根据访问我们存储的数据的方式对数据类型进行分类。在访问模型中共有三种访问方式:直接存取,顺序,和映射。
直接访问: 数字
顺序访问: 字符串、列表、元组
映射访问: 字典
 
 
映射类型类似序列的索引属性,不过它的索引并不使用顺序的数字偏移量取值, 它的元素无序存放, 通过一个唯一的key 来访问, 这就是映射类型, 它容纳的是哈希键-值对的集合。
 
 
汇总:
 
数据类型     存储模型     更新模型     访问模型
数字          Scalar      不可更改     直接访问
字符串        Scalar      不可更改     顺序访问
列表         Container      可更改     顺序访问
元组         Container    不可更改     顺序访问
字典         Container      可更改     映射访问
 
 
15、不同数据类型之间的运算,在运算之前,要将两个操作数转换为同一数据类型,数字强制类型转换原则是整数转换为浮点数, 非复数转换为复数。
 
16、python除法:
(1)传统除法,若操作数是整数,则进行取整操作,若操作数是浮点数,则执行真正的除法
>>> 1/2
0
>>> 1.0/2
0.5
 
(2)真正的除法,未来的除法,不管操作数是什么类型,都要进行真正的除法运算
>>> from __future__ import division
>>> 1/2
0.5
>>> 1.0/2.0
0.5
 
(3)地板除,不管操作数是什么数据类型,都进行取整操作
>>> 1//2
0
>>> 1.0//2
0.0
 
 
 
17、工厂函数
工厂函数就是指这些内建函数都是类对象, 当你调用它们时,实际上是创建了一个类实例,有以下这些工厂函数:
int(), long(), float(),complex(),bool()
 
>>> int('F',16)
15
>>> int('15')
15
 
18、内建函数
 
(1)适用于所有数据类型的内建函数:
abs(num):返回 num 的绝对值
coerce(num1, num2):将num1和num2转换为同一类型,然后以一个 元组的形式返回。
divmod(num1, num2):除法-取余运算的结合。返回一个元组(num1/num2,num1 %num2)。对浮点数和复数的商进行下舍入(复数仅取实数部分的商)
pow(num1, num2, mod=1):取 num1 的 num2次方,如果提供 mod参数,则计算结果再对mod进行取余运算
round(flt, ndig=0):接受一个浮点数 flt 并对其四舍五入,保存 ndig位小数。若不提供ndig 参数,则默认小数点后0位。
 
(2)适用于整数的内建函数:
hex(num) 将数字转换成十六进制数并以字符串形式返回
oct(num) 将数字转换成八进制数并以字符串形式返回
chr(num) 将ASCII值的数字转换成ASCII字符,范围只能是0 <= num <= 255。
ord(chr) 接受一个 ASCII 或 Unicode 字符(长度为1的字符串),返回相应的ASCII或Unicode 值。
unichr(num) 接受Unicode码值,返回 其对应的Unicode字符。所接受的码值范围依赖于你的Python是构建于UCS‐2还是UCS‐4。
 
19、布尔值
对于值为零的任何数字或空集(空列表、空元组和空字典等)在Python 中的布尔值都是False。
>>> bool('1')
True
>>> bool('0')
True
>>> bool('fdsafds')
True
>>> bool('')
False
>>> bool([])
False
>>> bool([3])
True
>>> bool(1)
True
>>> bool(0)
False
 
20、数字类型相关模块
decimal: 十进制浮点运算类 Decimal
array: 高效数值数组(字符,整数,浮点数等等)
math/cmath: 标准C库数学运算函数。常规数学运算在match模块,复数运算在cmath模块
operator: 数字运算符的函数实现。比如 tor.sub(m,n)等价于 m - n
random: 多种伪随机数生成器
 
21、随机数,要导入random模块
randrange(): 它接受和 range() 函数一样的参数, 随机返回range([start,]stop[,step])结果的一项
uniform(): 几乎和 randint()一样,不过它返回的是二者之间的一个浮点数(不包括范围上限)。
random(): 类似 uniform() 只不过下限恒等于0.0,上限恒等于1.0
choice(): 随机返回给定序列(关于序列,见第六章)的一个元素
 
示例:
>>> import random
>>> for i in range(5):
print random.randrange(0,100),
 
1 58 77 38 3
 
>>> for i in range(5):
print random.uniform(0,10),

7.26383692825 2.76070616182 7.37142561958 7.8026850248 4.7771524698
 
>>> for i in range(5):
print random.random(),

0.232856863437 0.0784714114799 0.238714810514 0.0698641200863 0.386250556331
 
>>> for i in range(5):
print random.choice([1,2,3,'4','5','suo']),

3 5 1 suo 4
 
 
22、成员关系操作符 (in, not in)
成员关系操作符使用来判断一个元素是否属于一个序列的,返回值为True或False
 
23、len()函数,可以得到序列长度
 
24、访问序列中的元素可以使用负索引,范围是 -1 到序列的负长度,-len(sequence),
 -len(sequence) <= index <= -1.正负索引的区别在于正索引以序列的开始为起点,负索引以序列的结束为起点
 
25、序列切片操作
>>> s = 'abcdefgh'
>>> s[0:4]
'abcd'
>>> s[1:5]
'bcde'
>>> s[::-1] # 可以视作"翻转"操作
'hgfedcba'
>>> s[::2] # 隔一个取一个的操作
'aceg'
 
>>> s = 'abcde'
>>> for i in [None] + range(-1, -len(s), -1):
... print s[:i]
...
abcde
abcd
abc
ab
a
 
26、字符串、序列、元组类型转换
list(iter):   把可迭代对象转换为列表
str(obj):     把obj 对象转换成字符串(对象的字符串表示法)
unicode(obj): 把对象转换成Unicode 字符串(使用默认编码),是str()函数的unicode版本
basestring(): 抽象工厂函数,其作用仅仅是为str 和unicode 函数提供父类,所以不能被
       实例化,也不能被调用(详见第6.2 节)
tuple(iter):  把一个可迭代对象转换成一个元组对象
 
一旦一个Python 的对象被建立,我们就不能更改其身份或类型了.如果你把一个列表对象传给list()函数,便会创建这个对象的一个浅拷贝,然后将其插入新的列表中。
所谓浅拷贝就是只拷贝了对对象的索引,而不是重新建立了一个对象!如果你想完全的拷贝一个对象(包括递归,如果你的对象是一个包含在容器中的容器),你需要用到深拷贝。
 
 
27、序列类型可用的内建函数
enumerate(iter): 接受一个可迭代对象作为参数,返回一个enumerate 对象(同时也是一个迭代器),     该对象生成由iter 每个元素的index 值和item 值组成的元组(PEP 279)
 
len(seq):        返回seq 的长度
 
max(iter,key=None)
max(arg0,arg1...,key=None): 返回iter 或(arg0,arg1,...)中的最大值,如果指定了key,这个key 必须是一个可以传给sort()方法的,用于比较的回调函数.
 
min(iter, key=None)
min(arg0, arg1.... key=None): 返回iter 里面的最小值;或者返回(arg0,arg2,...)里面的最小值;如果指定了key,这个key 必须是一个可以传给sort()方法的,用于比较的回调函数.
 
reversed(seq): 接受一个序列作为参数,返回一个以逆序访问的迭代器(PEP 322)
 
sorted(iter,
func=None,
key=None,
reverse=False): 接受一个可迭代对象作为参数,返回一个有序的列表;可选参数func,key 和reverse 的含义跟list.sort()内建函数的参数含义一样.
 
sum(seq, init=0): 返回seq 和可选参数init 的总和, 效果等同于reduce(operator.add,seq,init)
 
zip([it0, it1,... itN]): 返回一个列表,其第一个元素是it0,it1,...这些元素的第一个元素组成的一个元组,第二个...,类推.
 
28、字符串
Python 里面单引号和双引号的作用是相同的,Python 里面没有字符这个类型,而是用长度为1 的字符串来表示这个概念,字符串是不可变的,所以你不能仅仅删除一个字符串里的某个字符,你能做的是清空一个空字符串,或者是把剔除了不需要的部分后的字符串组合起来形成一个新串。
 
29、字符串模块
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.atol('10')
10L
 
虽然对初学者来说string 模块的方式更便于理解,但出于性能方面的考虑,
我们还是建议你不要用string 模块。原因是Python 必须为每一个参加连接操作的字符串分配
新的内存,包括新产生的字符串。
 
30、字符串格式化
Python 支持两种格式的输入参数。第一种是元组,这基本上是一种的Cprintf()风格的转换参数集;
 
Python 支持的第二种形式是字典形式.字典其实是一个哈希键-值对的集合。这种形式里面,key 是作为格式字符串出现,相对应的value 值作为参数在进行转化时提供给格式字符串.
 
>>> dic={'key1':'suo','key2':'dai','key3':80}
>>> '%(key1)s love %(key2)s %(key3)d years' % dic
'suo love dai 80 years'
 
格式字符串既可以跟print 语句一起用来向终端用户输出数据,又可以用来合并字符串形成新字符串,而且还可以直接显示到GUI(Graphical User Interface)界面上去.
 
31、原始字符串
在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符
>>> import re
>>> m=re.search(r'\\[rtfvn]',r'Hello World!\n')
>>> if m is not None:
m.group()
 
'\\n'
 
32、Unicode 字符串操作符( u/U )
 
它用来把标准字符串或者是包含Unicode 字符的字符串转换成完全地Unicode 字符串对象。
 
 
33、字符串内建函数
各种内建函数,参见API
 
34、字符串三引号
它允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符.三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。
 
>>> hi='''hi \n are you'''
>>> hi
'hi \n are you'
>>> print hi
hi 
 are you
>>> 
 
35、字符串不可变性
字符串是一种不可变数据类型,就是说它的值是不能被改变或修改的。这就意味着如果你想修改一个字符串,或者截取一个子串,或者在字符串的末尾连接另一个字符串等等,你必须新建一个字符串。
 
>>> s='xingruiping'
>>> s[2]='K'
 
Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    s[2]='K'
TypeError: 'str' object does not support item assignment
 
36、Unicode字符串
 
   ASCII码:str()和chr()
   UNICODE:unicode()和unichr()
 
   程序中出现字符串时一定要加个前缀 u.
 
   不要用 str()函数,用unicode()代替.
   不要用过时的 string 模块 -- 如果传给它的是非ASCII 字符,它会把一切搞砸。
   不到必须时不要在你的程序里面编解码 Unicod 字符.只在你要写入文件或数据库或者网络时,才调用encode()函数;
   相应地,只在你需要把数据读回来的时候才调用decode()函数.
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值