zoukankan      html  css  js  c++  java
  • 概念术语

    1. 格式化输出:利用format "{1} {0} {1}".format("hello", "world") # 设置指定位置 'world hello world' 或 %s,%d % str1,int1
    * format的四种玩法(python推荐使用format做格式化输出)

    ```python
    # 第一种 按位置占位 跟%s原理一致
    str1 = 'my name is {}, my age is {}'.format(18,'age')
    print(str1)
    # 第二种 按索引占位
    str1 = 'my name is {1}, my age is {0}'.format('egon',18)
    print(str1)
    # 第三种 指名道姓占位(关键字传参)
    str1 = 'my name is {name}, my age is {age}'.format(name='egon',age=18)
    print(str1)
    #第四种 format简写,两个变量进行拼接时用
    name='egon'
    age=18
    str1 = f'my name is {name}, my age is {age}'
    print(str1)
    ```

    2. 形参 实参 位置参数 关键字参数 默认参数
    形参: def func(arg1,arg2) arg1,arg2即为形参
    实参:真实传给函数的参数
    位置参数:按位置,一个一个传的那几个参数
    关键字参数:arg1=x这么传的参数 就叫位置参数
    默认参数: 不传 也有默认值的参数

    3. 闭包函数:
    定义在函数内部的函数
    并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

    4. 迭代:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来

    5.可迭代的对象:在python中,但凡内置有__iter__方法的对象,都是可迭代的对象

    6. 迭代器:迭代取值工具,可迭代的对象执行__iter__方法得到的返回值就是迭代器对象
    ```
    可迭代的对象:str,list,tuple,dict,set,file
    1、获取可迭代对象的方式:无须获取,python内置str,list,tuple,dict,set,file都是可迭代对象
    2、特点:
    内置有__iter__方法的都叫可迭代的对象,执行该方法会拿到一个迭代器对象

    迭代器对象:文件对象本身就是迭代器对象
    1、获取迭代器对象的方式:
    执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象
    2、特点:
    内置有__next__方法,执行该方法会拿到迭代器对象中的一个值
    内置有__iter__方法,执行该方法会拿到迭代器本身
    ```
    ```
    for循环原理分析:
    for 循环称之为迭代器循环,in后跟的必须是可迭代的对象
    for循环会执行in后对象的__iter__方法,拿到迭代器对象
    然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环体
    周而复始,直到取值完毕,for循环会检测到异常自动结束循环
    ```
    7. 生成器
    包含 ' yield '关键字, yield可以保存函数执行的状态
    例 x = yield y
    必须初始化一次,让函数停在yield的位置
    之后每send(参数)一次,yield把值赋给x循环一圈 又停在yield的位置(同__next__的功能,但send独有)

    8. 函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数本身

    9. 序列化 反序列化:利用json pickle shelve模块,把字典 转成 字符串信息 (pickle以二进制处理)

    10. 派生:继承某个父类,定义这个类的时候,父类没有的新属性或新方法叫 派生属性 或 派生方法

    11. 经典类 新式类 :继承自object的类即为新式类,python3全是新式类

    12. 面向对象的三大特性 : 继承 多态 封装

    **继承**
    ```
    继承:A类继承自B类
    组合:A类的某个属性=B类的对象
    什么时候用继承,什么时候用组合
    老师类 和 生日类 老师的生日 老师.生日 用组合
    老师类 和 人类 老师是人 class老师类(人类) 用继承 另外,有相同属性也可判断要用继承
    ```
    **多态** :一个函数根据传的参数的不同,可实现不同的功能
    ```python
    class Alipay():
    def pay(self,money):
    print('已经用支付宝支付了%s元' % money)

    class Applepay():
    def pay(self,money):
    print('已经用applepay支付了%s元' % money)

    def pay(pay_obj,money): # 统一支付入口 归一化设计
    pay_obj.pay(money)

    p1=Alipay()
    p2=Applepay()
    pay(p1,10)
    pay(p2,10)
    >>>已经用支付宝支付了10元
    >>>已经用applepay支付了10元
    ```
    **封装** 把一个包含很多私有属性的类写好做出一个包,并提供外部调用接口

    * @property:有的函数的执行结果是返回一个值,比如 面积函数,最后return面积值,若在面积函数前加@property,则可以用 对象.面积 得到面积值 而非 对象.面积()

    * @staticmethod:静态方法 没有默认的self参数 就象函数一样,可额外传参数,静态方法与类和对象都没直接关系,但调用需要类或对象调用
    不加@staticmethod能不能调用?类名调用可以,对象调用不行,加了@staticmethod后都可以调用
    ```python
    class A:
    @staticmethod
    def get(x,y): # 静态方法
    print(x,y)

    A.get(1,2) #类名调用
    a1=A()
    a1.get(1,2) #对象调用 若不加@staticmethod则报错
    ```

    * @classmethod:类方法, 此方法不依赖对象,调用时直接类调用,且需要传参数
    ```python
    class Goods:
    __discount = 0.8
    def __init__(self,name,price):
    self.name = name
    self.__price = price
    @property
    def price(self):
    return self.__price * Goods.__discount
    @classmethod # 把一个方法 变成一个类中的方法,这个方法就直接可以被类调用,不需要依托任何对象
    def change_discount(cls,new_discount): # 修改折扣
    cls.__discount = new_discount
    apple = Goods('苹果',5)
    print(apple.price)
    Goods.change_discount(0.5) #类方法
    print(apple.price)
    ```
    * 对象可以调用类方法和静态方法么? 可以 一般情况下 推荐用类名调用

    13. **接口类(多继承)**
    @abstractmethod : 规定子类必须要有 多个父类里规定要有的方法,父类方法里内容pass就行了,具体怎么实现,在具体的子类里实现即可
    例如tiger类继承自 必须有走方法的类 和 必须有 游方法的类,那么tiger类必须定义走方法和游方法,否则,当tiger实例化时,会报错提醒 少写了某个必要方法


    14. **抽象类(单继承)** 多个 实现功能很相近的类
    同13,也是规定子类必须有某个方法
    父类中可以有一些简单的基础实现

    15. 自省 反射:检测一个属性或函数 在对象或类的__dict__中是否存在
    ```python
    hasattr(obj,'属性') #obj.属性 是否存在
    getattr(obj,'属性') #有就返回obj.属性 此时还未执行,只是把函数返回 不存在则报错
    getattr(obj,'属性','默认值') #获取obj.属性 不存在不会报错,返回那个默认值
    setattr(obj,'属性','属性的值') #obj.属性=属性的值
    delattr(obj,'属性') #del obj.属性
    #注意:反射可以反射类的属性
    ```

  • 相关阅读:
    static关键字的定义与使用
    String类练习统计一个字符串中大小写字母及数字字符个数
    Java中String类的常用方法
    String类的特点和使用步骤
    HTB 渗透测试笔记-Lame
    消息认证-数字签名-报文鉴别-到底是什么
    docker pull 太慢了解决办法
    彻底解决Mac无线网络故障和网速慢的问题
    彻底-有效-解决-Github下载太慢的问题
    Linux中的docker报错 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
  • 原文地址:https://www.cnblogs.com/lishuaing/p/11349231.html
Copyright © 2011-2022 走看看