• python | 学习笔记(二)- 进阶篇


    Python无疑是目前数据科学和机器学习中应用最广泛的编程语言。针对python从入门到精通的详细教程也网上有很多。这两篇python入门博客(基础篇和进阶篇)主要是个人学习过程中做的简单笔记,便于记录和复习。关于基本概念和功能的介绍详见python官方文档。

    三、进阶操作

     本部分主要包括类、高级用法两部分。

    ####################################################
    ## 1. 类
    ####################################################
    
    
    # 定义一个继承object的类
    class Human(object):
    
        # 类属性,被所有此类的实例共用。
        species = "H. sapiens"
    
        # 构造方法,当实例被初始化时被调用。注意名字前后的双下划线,这是表明这个属
        # 性或方法对Python有特殊意义,但是允许用户自行定义。你自己取名时不应该用这
        # 种格式。
        def __init__(self, name):
            # Assign the argument to the instance's name attribute
            self.name = name
    
        # 实例方法,第一个参数总是self,就是这个实例对象
        def say(self, msg):
            return "{name}: {message}".format(name=self.name, message=msg)
    
        # 类方法,被所有此类的实例共用。第一个参数是这个类对象。
        @classmethod
        def get_species(cls):
            return cls.species
    
        # 静态方法。调用时没有实例或类的绑定。
        @staticmethod
        def grunt():
            return "*grunt*"
    
    
    # 构造一个实例
    i = Human(name="Ian")
    print(i.say("hi"))     # 印出 "Ian: hi"
    
    j = Human("Joel")
    print(j.say("hello"))  # 印出 "Joel: hello"
    
    # 调用一个类方法
    i.get_species()   # => "H. sapiens"
    
    # 改一个共用的类属性
    Human.species = "H. neanderthalensis"
    i.get_species()   # => "H. neanderthalensis"
    j.get_species()   # => "H. neanderthalensis"
    
    # 调用静态方法
    Human.grunt()   # => "*grunt*"
    
    
    ####################################################
    ## 2. 高级用法
    ####################################################
    
    # 用生成器(generators)方便地写惰性运算
    def double_numbers(iterable):
        for i in iterable:
            yield i + i
    
    # 生成器只有在需要时才计算下一个值。它们每一次循环只生成一个值,而不是把所有的
    # 值全部算好。
    #
    # range的返回值也是一个生成器,不然一个1到900000000的列表会花很多时间和内存。
    #
    # 如果你想用一个Python的关键字当作变量名,可以加一个下划线来区分。
    range_ = range(1, 900000000)
    # 当找到一个 >=30 的结果就会停
    # 这意味着 `double_numbers` 不会生成大于30的数。
    for i in double_numbers(range_):
        print(i)
        if i >= 30:
            break
    
    
    # 装饰器(decorators)
    # 这个例子中,beg装饰say
    # beg会先调用say。如果返回的say_please为真,beg会改变返回的字符串。
    from functools import wraps
    
    
    def beg(target_function):
        @wraps(target_function)
        def wrapper(*args, **kwargs):
            msg, say_please = target_function(*args, **kwargs)
            if say_please:
                return "{} {}".format(msg, "Please! I am poor :(")
            return msg
    
        return wrapper
    
    
    @beg
    def say(say_please=False):
        msg = "Can you buy me a beer?"
        return msg, say_please
    
    
    print(say())  # Can you buy me a beer?
    print(say(say_please=True))  # Can you buy me a beer? Please! I am poor :(
    

      未完待续...

     备注:目前写博客是为了进行知识和笔记梳理。博客本身可能还存在着一些错误,如有发现,请求斧正,谢谢。
     
  • 相关阅读:
    Qt之根据扩展名获取文件图标、类型
    C++根据扩展名获取文件图标、类型
    Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
    Qt之QTemporaryFile
    Qt之QFileIconProvider
    Qt之字典划词
    Qt之滚动字幕
    Qt之QThread
    Python 安装 httplib2
    Qt之QTimer
  • 原文地址:https://www.cnblogs.com/geo-will/p/9511792.html
Copyright © 2020-2023  润新知