设为首页 加入收藏

TOP

Python核心技术与实战 笔记(二)
2019-09-20 11:45:42 】 浏览:165
Tags:Python 核心 技术 实战 笔记
引和元素,你可以使用 enumerate() 函数来简化代码。
  • 写条件与循环时,合理利用+continue+或者+break+来避免复杂的嵌套,是十分重要的。
  • 要注意条件与循环的复用,简单功能往往可以用一行直接完成,极大地提高代码质量与效率。
  • 异常处理

    • 异常,通常是指程序运行的过程中遇到了错误,终止并退出。我们通常使用 try except 语句去处理异常,这样程序就不会被终止,仍能继续执行。
    • 处理异常时,如果有必须执行的语句,比如文件打开后必须关闭等等,则可以放在 finally block 中。
    • 异常处理,通常用在你不确定某段代码能否成功执行,也无法轻易判断的情况下,比如数据库的连接、读取等等。正常的 flow-control 逻辑,不要使用异常处理,直接用条件语句解决就可以了。

    自定义函数

    • Python 中函数的参数可以接受任意的数据类型,使用起来需要注意,必要时请在函数开头加入数据类型的检查;
    • 和其他语言不同,Python 中函数的参数可以设定默认值;
    • 嵌套函数的使用,能保证数据的隐私性,提高程序运行效率;
    • 合理地使用闭包,则可以简化程序的复杂度,提高可读性;

    匿名函数

    优点:

    • 减少代码的重复性;
    • 模块化代码;

    map(function,iterable)

    表示对 iterable 中的每个元素,都运用 function 这个函数,最后返回一个新的可遍历的集合。

    def square(x):
        return x**2
    
    squared = map(square, [1, 2, 3, 4, 5]) # [2, 4, 6, 8, 10]

    filter(function,iterable)

    表示对 iterable 中的每个元素,都使用 function 判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合。

    l = [1, 2, 3, 4, 5]
    new_list = filter(lambda x: x % 2 == 0, l) # [2, 4]

    reduce(function,iterable)

    规定它有两个参数,表示对 iterable 中的每个元素以及上一次调用后的结果,运用 function 进行计算,所以最后返回的是一个单独的数值。

    l = [1, 2, 3, 4, 5]
    product = reduce(lambda x, y: x * y, l) # 1*2*3*4*5 = 120

    面向对象

    基本概念

    • 类:一群有着相似性的事物的集合;
    • 对象:集合中的一个事物;
    • 属性:对象的某个静态特征;
    • 函数:对象某个动态能力

    三要素:

    • 继承
    • 封装
    • 多态

    模块化编程

    • 通过绝对路径和相对路径,我们可以 import 模块;
    • 在大型工程中模块化非常重要,模块的索引要通过绝对路径来做,而绝对路径从程序的根目录开始;
    • 记着巧用 if __name__ == "__main__" 来避开 import 时执行;

    进阶篇

    Python 对象的比较、拷贝

    • 比较操作符 == 表示比较对象间的值是否相等,而 is 表示比较对象的标识是否相等,即它们是否指向同一个内存地址。
    • 比较操作符 is 效率优于 ==,因为 is 操作符无法被重载,执行 is 操作只是简单的获取对象的 ID,并进行比较;而 == 操作符则会递归地遍历对象的所有值,并逐一比较。
    • 浅拷贝中的元素,是原对象中子对象的引用,因此,如果原对象中的元素是可变的,改变其也会影响拷贝后的对象,存在一定的副作用。
    • 深度拷贝则会递归地拷贝原对象中的每一个子对象,因此拷贝后的对象和原对象互不相关。另外,深度拷贝中会维护一个字典,记录已经拷贝的对象及其 ID,来提高效率并防止无限递归的发生。

    值传递与引用传递

    常见的参数传递有 2 种:

    • 值传递:通常就是拷贝对象的值,然后传递给函数里的新变量,原变量和新变量之间相互独立,互不影响
    • 引用传递:通常是指把参数的引用传给新的变量,这样,原变量和新变量就会指向同一块内存地址。

    准确来说, python 的参数传递是 赋值传递 ,或者叫做对象的 引用传递python 里所有的数据类型都是对象,所以参数传递时,只是让新变量与原变量指向相同的对象而已,并不存在值传递或引用传递一说。

    需要注意的是,这里的赋值或对象的引用传递,不是指一个具体的内存地址,二十指一个具体的对象。

    • 如果对象是可变的,当其改变时,所有指向这个对象的变量都会改变;
    • 如果对象不可变,简单的赋值只能改变其中一个变量的值,其余变量则不受影响;

    装饰器

    函数也是对象

    def func(message):
        print('Got a message: {}'.format(message))
        
    send_message = func
    send_message('hello world')
    
    # 输出
    Got a message: hello world

    函数可以作为函数参数

    def get_message(message):
        return 'Got a message: ' + message
    
    
    def root_call(func, message):
        print(func(message))
        
    root_call(get_message, 'hello world')
    
    # 输出
    Got a message: hello world

    函数可以嵌套函数

    def func(message):
        def get_message(message):
            print('Got a message: {}'.format(message))
        return get_message(message)
    
    func('hello world')
    
    # 输出
    Got a message: hello world

    函数的返回值也可以是函数对象(闭包)

    def func_closure():
        def get_message(message):
            print('Got a message: {}'.format(message))
        return get_message
    
    send_message = func_closure()
    send_message('hello world')
    
    # 输出
    Got a message: hello world

    简单使用装饰器

    def my_decorator(func):
        def wrapper():
            print('wrapper of decorator')
            func()
        return wrapper
    
    def greet():
        print('hello world')
    
    greet = my_decorator(greet)
    greet()
    
    # 输出
    wrapper of decorator
    hello world

    更优雅的写法

    def my_decorator(func):
        def wrapper():
            print('wrapper of decorator')
            func()
        return wrapper
    
    @my_decorator
    def greet():
        print('hello world')
    
    greet()

    带参数的装饰器

    def my_decorator(func):
        def wrapper(message):
            print('wrapper of decorator')
            func(message)
        return wrapper
    
    
    @my_decorator
    def greet(message):
    首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇构建支持中文字体的moviepy镜像 下一篇django下创建多个app,如何设置每..

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目