Python学习总结-初识Python

1.Python有什么与众不同的地方?
①万物皆对象
在Python中一切都是对象,包括函数、模块等,并且几乎都有属性和方法。万物皆对象意味着一切都可以赋值给变量或作为参数传递给函数。

②对缩进非常敏感
Python函数没有明显的begin和end,没有花括号,用于表示函数的开始和结束,唯一的分隔符是一个冒号,接着函数代码本身是缩进的。代码块通过缩进来定义,开始缩进表示块的开始,取消缩进表示块的结束。这里的代码块包括函数、if语句、for循环、while循环、类等。Python使用硬回车来分割语句,冒号和缩进来分割代码块。

这里写图片描述

2.Python的版本
①确认所使用的Python版本

这里写图片描述

②Python2和Python3之间的联系与区别
Python 2和Python 3都处在Python社区的积极维护中,但是Python 2的功能开发已经冻结,只会进行bug修复、安全增强以及移植等工作以便开发者能够顺利从Python 2迁移到Python 3上。Python 3 经常会添加新功能并提供改进,而这些功能与改进不会出现在Python 2中。

3.编码风格
我们可以通过下面一张神图来展示Python的编码风格。

这里写图片描述

PEP8编码风格总结如下:
(1)空白,Python中的空白会影响代码的含义。
(2)使用space表示缩进,不要用tab
(3)和语法相关的每一层缩进用4个空格表示。
(4)每一行的字符数不应超过79个
(5)对于占据多行的长表达式,除了首行之外的其余各行都应该在通常的缩进级别上在增加4个空格
(6)文件种的函数与类之间应该用两个空行隔开
(7)同一个类中,各方法之间应该用一个空行隔开
(8)在使用下标来获取列表元素、调用函数或者给关键字参数赋值的时候不要在两旁添加空格
(9)为变量赋值的时候,赋值符号的左右两侧应该各自加一个空格,最好有且只有一个
(10)函数、变量、属性应该用小写字母表示,各单词之间以下划线相连
(11)受保护的实例属性,应该以单个下划线开头
(12)私有的实例属性,应该以两个下划线开头
(13)类与异常应该以每个单词首字母均大写的形式命名
(14)模块级别的常量,应该全部采用大写字母表示,各个单词之间以下划线相连
(15)类中的实例方法,应该把首个参数命名为self,以表示对象自身
(16)类方法的首个参数,应该命名为cls,表示该类自身
(17)采用内联形式的否定词,而不要把否定词放在整个表达式的前面,如 if a is not b而不是if not a is b
(18)不要通过检测长度(if len(somelist==0))的办法来判断somelist是否为[]或‘’等空值,而应该采用if not somelist这种方式来判断,空值将自动评估为False
(19)不要编写单行的if语句、for循环以及except复合语句,而是应该把这些语句分成多行,更加清晰
(20)import语句应该总是放在文件开头
(21)引入模块的时候总是应该使用绝对名称,而不应该是根据当前模块的路径来使用相对名称。如引入bar包中的foo模块时,应该完整的写出from bar import foo,而不应该简写import foo
(22)如果一定要以相对名称来写import语句,应该采用明确的写法:from . import foo
(23)文件中的import语句应该按顺序分成三部分,分别表示标准库模块、第三方模块、以及自用模块。在每一部分中,各import语句应该按模块的字母顺序排列

4.Python中bytes、str、unicode的区别
①Python2中,str是一种包含8位值得序列,unicode是一种包含Unicode字符的序列,如果str只包含7位SCCII字符,可以通过相关操作符同时使用str和unicode。

#python2
def to_unicode(unicode_or_str):
    if isinstance(unicode_or_str,str):
        value=unicode_or_str.decode('utf-8')
    else:
        value=unicode_or_str
    #返回unicode实例
    return value
def to_str(unicode_or_str):
    if isinstance(unicode_or_str,unicode):
        value=unicode_or_str.encode('utf-8')
    else:
        value=unicode_or_str
    #返回str实例
    return value

②Python 3中,bytes是一种包含8位值得序列,str是一种包含Unicode字符的序列,可以通过>或+等操作符混同操作bytes和str实例。

#python3
def to_str(bytes_or_str):
    if isinstance(bytes_or_str,bytes):
        value=bytes_or_str.decode('utf-8')
    else:
        value=bytes_or_str
    #返回str实例
    return value
def to_bytes(bytes_or_str):
    if isinstance(bytes_or_str,str):
        value=bytes_or_str.decode('utf-8')
    else:
        value=bytes_or_str
    #返回bytes实例
    return value

5.try/except/else/finally结构
①finally块
使用场景:如果要将异常向上传播,又要在异常发生时执行清理工作,这种情形下可以使用try/finally结构,常见的用途就是确保程序能够可靠地关闭文件。

handle=open('/tmp/random_data.txt') #可能会报IOError
try:
      data=handle.read() #可能会报UnicodeDecodeError
finally:
       handle.close() #在try:之后始终会执行

②else块
try/except/else结构可以清晰地描述出哪些异常会由自己的代码处理、哪些异常会传播到上一级。如要从字符串中加载JSON字典数据,然后返回字典中某个键对应的值。

def load_json_key(data,key):
    try:
        result_dict=json.loads(data)#may raise ValueError
    except ValueError as e:
        raise keyError form e
    else:
        return result_dict[key]#may raise KeyError

③混合使用
如要从文件中读取某项事务的描述信息,处理该事务然后更新该文件

UNDEFINED=object()
def divide_json(path):
    handle=open(path,'r+')#may raise IOError
    #使用try块读取文件并处理其内容
    try:
        data=handle.read()#may raise UnicodeDecodeError
        op=json.loads(data)#may raise ValueError
        value=(
                    op['numerator'] /
                                                          op['denominator'])#may raise ZeroDivisionError
                      #使用except块来应对try块中可能发生的相关异常
    except ZeroDivisionError as e:
        return UNDEFINED
    #使用else块实时更新文件并把更新过程中可能出现的异常回报给上级代码
    else:
        op['result']=value
        result=json.dumps(op)
        handle.seek(0)
        handle.write(result)#may raise IOError
        return value
    #使用finally块清理文件句柄
    finally:
        handle.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值