Python基础教程总结(上)

版权声明:可以随意转载→_→ https://blog.csdn.net/ds19991999/article/details/83217617

参考:https://book.douban.com/subject/4866934/ ,基于Python2.x.

第一章 基础知识

#!/usr/bin/python2
# coding=utf-8
chmod 755 hello.py #给Python脚本添加可执行权限
math.floor(num) #将给定的数值转换为小于或等于它的最小整数
math.ceil(num) #将给定的数值转换为大于或等于它的最小整数
math.sqrt(num) #计算平方根
>>> foo=math.sqrt
>>> foo(3)
1.7320508075688772
cmath.sqrt(-3) #复数模块,Python本身支持复数计算
r'C:\path\where' #原始字符串,其最后一个字符不能是反斜杠
  • str 和 repr:str将值转换默认形式的字符串,repr则转换为合法的Python字符串表达式,供Python解释器认识,repr也可以用``表示,Python3中弃用
>>> temp = 43
>>> print "The temperature is "+`temp`
The temperature is 43
函数 描述
abs(num) 返回数字的绝对值
cmath.sqrt(num) 返回平方根,也可以用于复数
pow(x,y[,z]) x^y所求结果对z取模
repr(object) 返回值的字符串表示形式
round(num[, ndigits]) 根据给定的精度对数字进行四舍五入

第二章 列表和元祖

6中内建序列:列表、元祖、字符串、Unicode字符串、buffer对象、xrange对象

列表可以修改,元祖不能。

>>> list("Python")
['P', 'y', 't', 'h', 'o', 'n']
# 不替换原有元素得情况下插入新元素
>>> num = [1,5]
>>> num[1:1]=[2,3,4]
>>> num
[1, 2, 3, 4, 5]
  • 高级排序

sort()有两个可选参数

>>> x = ['sss',"sww1w","sqwsqwd","sddd"]
>>> x.sort(key=len)
>>> x
['sss', 'sddd', 'sww1w', 'sqwsqwd']
>>> x = [4,5,2,4,231,24]
>>> x.sort(reverse=True)  # 这里和seq.reverse()方法或reversed(seq)函数有区别
>>> x
[231, 24, 5, 4, 4, 2]

注意只有一个元素的元组:42,必须要有一个逗号,元组中的tupul()函数相当于列表中的list()

>>> tuple("Python")
('P', 'y', 't', 'h', 'o', 'n')
>>> list("Python")
['P', 'y', 't', 'h', 'o', 'n']
cmp(x,y) # 比较x,y的大小,x>y返回1,x<y返回-1,x=y返回0

第三章 字符串

字符串不可变

# 个人感觉这种格式化字符串很好,一个字符串一个元组
>>> format = "hello, %s. %s enough for ya?"
>>> values = ('world','Hot')
>>> print format % values
hello, world. Hot enough for ya?

表3-1 字符串转换类型,P46

str.find(“strings”)查找字串并返回,如果找到返回字串的左端索引,没找到返回-1,find(“strings”,1,3),起始索引

sep.join(str):连接字符串列表并返回,sep是分割符字串,与split()相对,str.split(sep)

str.strip(),去掉字符串两侧空格字符串,str.strip(“ !*”)指定去掉两侧空格和!和*

str.lower()和str.upper(),大小写转换

str.replace(“aaa”,“bbb”),把字符串中的aaa全都替换为bbb

from string import maketrans
table = maketrans("cs","kj") # 将c、s分别替换为k、j
strs="   ddd    dddwdd   eed       "
strs.translate(str)

string.capwords(str[, sep]) 使用split()函数将字符串str分割(sep为分割符),使用capitalize()函数将分割得到的各单词首字母大写,并且使用join()函数以sep为分隔符连接各单词

第四章 字典–映射

字典无序,当索引不好用时用字典,字典的格式化字符串很常用P58

dic.clear() #清除字典中所有的项
dic.copy() #返回一个具有相同键值对的新字典----浅复制,不是副本 P60需要注意一下
from copy import deepcopy
dic.deepcopy() #这时不随原字典改变
>>> {}.fromkeys(["name","age"],可选默认值) #使用给定的键建立一个空字典
{'age': None, 'name': None}
dic.get("name") #访问键name,不存在返回None,否则返回键值
dic.has_key("name") #返回True或False
dic.items() #将字典所有项以列表的形式返回

dic.iteritems() #返回一个列表的迭代器
dic = {'age': None, 'name': None}
>>> for k,v in dic.iteritems():
...     print k,v
...
age None
name None

dic.keys() # 以列表形式返回
dic.values()
dic.iterkeys() #返回键的迭代器
dic.itervalues() #返回值的迭代器
dic.pop("name") #删除并返回键值
dic.popitem() #弹出随机的项

# 不给定键的情况下设定键值
>>> dic={}
>>> dic.setdefault("name","N/A")
'N/A'

dic.update(x) #将字典dic更新到字典x

第五章 条件、循环和其他语句

假:False 0 “” None () [] {},其他一切都是真

  • 同一性is:is==的区别在于。is判断是否是同一个对象,==只是判断两个对象是否相等
name = raw_input("Please enter your name: ") or "<unknown>"
就是说如果输入为空,则将name="<unknown>"
  • assert 条件断言一个条件,如果为真,则没反应,如果为假则抛出异常,这在调试中经常用到

  • 内建zip()函数

>>> zip(range(5),xrange(8))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
  • enumerate(str)函数:返回索引键值迭代

  • 列表推导式:

>>> [x*x for x in range(10) if x%3==0]
[0, 9, 36, 81]
>>> [(x,y) for x in range(3) for y in range(2)]
[(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
  • exec和eval
# 这里的scope就是起到放置字符串命名空间的字典
>>> from math import sqrt
>>> scope={}
>>> exec "sqrt =  1" in scope
>>> sqrt(4)
2.0
>>> scope["sqrt"]
1

# eval 用于求值,类似于exec的内建函数,eval会计算写在字符串中的Python表达式并返回值 P85
ord("a") #返回字符串a的值

第七章 抽象

  • 多态:意味着可以对不同类的对象使用相同的操作,以seq.count()、运算符举例;
  • 封装:对外部世界隐藏对象的工作细节;

多态可以让用户对于不知道是什么类的对象进行方法调用;而封装是可以不用关心对象是如何构建的而直接进行使用。

  • 继承:以通用的类为基础建立专门的类对象;

  • 类:一种对象,所有的对象都属于某一个类,称为类的实例

  • 双下划线__方法是私有的,在类的内部可以调用,在类的实例中不能调用

class Secretive:
    def __inaccessible(self):
        ...
    def accessible(self):
        self.__inaccessible()
s = Secretive()
s.__inaccessible() # 会报错
s.accessible() #这样才是正常的,相当于调用
Secretive._Secretive__inaccessible
  • 单下划线则是提示其他对象不要访问这个方法,并且imort的时候单下划线的方法都不能导入
  • Python并没有真正意义上的私有化支持
issubclass(SPAMFilter,Filter) # 判断一个类是否是另一个类的子类 返回True、False
SPAMFFilter.__base__ # 返回子类的基类
isinstance(s,Filter) #判断一个对象的实例是否是一个类的实例
s.__class__ # 返回对象s的类
  • 多重继承:子类继承多个基类,如果两个基类具有相同名字的不同方法,那么先继承的方法会重写后继承的类方法
  • 接口:与多态有关,在处理多态对象时,只要关心它的接口(协议),即公开的方法和特性。
  • 关于面向对象的思考:P125

第八章 异常

try raise [except else] finally
# 同一个try中except和finally不能同时使用

第九章 魔法方法、属性、迭代器

魔法方法一般指__future__这样的双下划线

__init__:构造方法

__del__:析构方法,在对象被垃圾回收之前调用,但调用的时间不可知,所以我们一般不用

  • super()函数:当前的类和对象可以作为super函数的参数使用,调用函数返回的对象的任何方法都是调用超类的方法,而不是当前类的方法。

    • 比喻super(SongBird,slef).__init__()调用SongBird的基类的构造函数。好处体现在多重继承中,只需调用一次super()就可以初始化所有基类。
    • 实际上super()返回了一个super对象,这个对象负责进行方法解析,当对其特性进行访问时,它会查找所有超类,直到找到所需的特性为止或者引发一个AttributeError
  • 序列/映射的四个基本方法P144:

    • __len__(self):返回集合中所含项目的数量
    • __getitem__(self,key):返回与所给键对应的值
    • __setitem__(self,key,value):按照一定的方式存储和key有关的value,该值随后被__getitem__获取
    • __delitem__(self,key):在对一部分对象使用del语句时被调用,同时必须删除和元素相关的键
  • property()函数,size=property(getSize,setSize),这样就不必担心怎么实现,直接将函数返回值作为实例对象的属性P148

  • 静态方法和类成员方法:@staticmethod是定义静态方法,@classmethod是定义类成员方法,这样可以在不实例化类的情况下调用这些方法。

  • 迭代器:__iter__迭代器规则,就是之前所说的for机制,使用list(迭代对象)可以得到列表

  • 生成器:一种用普通函数语法定义的迭代器,包含yield函数的都是生成器,简单来说就是记录yield之后的值到生成器中,可以将多重嵌套的列表转换为一层嵌套;

    • yield被调用时,在函数体中的代码不会被执行,而返回一个迭代器;
    • 生成器由两部分组成:生成器的函数和生成器的迭代器。

猜你喜欢

转载自blog.csdn.net/ds19991999/article/details/83217617