zoukankan      html  css  js  c++  java
  • python 随笔

    os.path.expanduser()

    # 把path中包含的"~"和"~user"转换成用户目录
    os.path.expanduser(path)	
    

    Ref: Python os.path() 模块

    @classmethod修饰符与 @staticmethod修饰符

    @classmethod

    class A(object):
    
        # 属性默认为类属性(可以给直接被类本身调用)
        num = "类属性"
    
        # 实例化方法(必须实例化类之后才能被调用)
        def func1(self): # self : 表示实例化类后的地址id
            print("func1")
            print(self)
    
        # 类方法(不需要实例化类就可以被类本身调用)
        @classmethod
        def func2(cls):  # cls : 表示没用被实例化的类本身
            print("func2")
            print(cls)
            print(cls.num)
            cls().func1()
    
        # 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
        def func3():
            print("func3")
            print(A.num) # 属性是可以直接用类本身调用的
        
    # A.func1() 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的
    A.func2()
    A.func3()
    

    Java对比, python中被classmethod修饰符修饰的类方法类似于Java类中的静态方法,不需要实例化类,可以直接通过 类名.方法名的方式调用。
    Ref: Python classmethod 修饰符

    @staticmethod

    @staticmethod静态方法只是名义上归属类管理,但是不能使用类变量和实例变量,是类的工具包
    放在函数前(该函数不传入self或者cls),所以不能访问类属性和实例属性

    class cal:
        cal_name = '计算器'
        def __init__(self,x,y):
            self.x = x
            self.y = y
    
        @property           #在cal_add函数前加上@property,使得该函数可直接调用,封装起来
        def cal_add(self):
            return self.x + self.y
    
                            #在cal_info函数前加上@classmethon,则该函数变为类方法,
        @classmethod        #该函数只能访问到类的数据属性,不能获取实例的数据属性
        def cal_info(cls):  #python自动传入位置参数cls就是类本身
            print('这是一个%s'%cls.cal_name)   #cls.cal_name调用类自己的数据属性
    
        @staticmethod       #静态方法 类或实例均可调用
        def cal_test(a,b,c): #改静态方法函数里不传入self 或 cls
            print(a,b,c)
    c1 = cal(10,11)
    cal.cal_test(1,2,3)     #>>> 1 2 3
    c1.cal_test(1,2,3)      #>>> 1 2 3
    

    pip 使用requirement.txt

    为了便于新环境部署,python项目中需要包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号
    requirements.txt可以通过pip命令自动生成和安装
    生成requirements.txt文件

    pip freeze > requirements.txt
    

    安装requirements.txt依赖

    pip install -r requirements.txt
    

    查看pip 安装包列表

    pip list
    

    Ref

    常用的__doc__、name、__file__的使用

      __doc__:获取到注释内容
      __name__:获取到函数的名称
      __file__:获取到当前的文件路径
    

    Ref

    * 和 ** 运算符

    1. 算数运算
    • 代表乘法
      ** 代表乘方
    >>> 2 * 5
    10
    >>> 2 ** 5
    32
    
    1. 函数可变长度形参(用于函数的形参个数不确定)
      可以将不定数量的参数传递给一个函数。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 k 。而写成 *args 和kwargs 只是一个通俗的命名约定。
      *args 与 **kwargs 的区别,两者都是 python 中的可变参数:
    *args 表示任何多个无名参数,它本质是一个 tuple
    **kwargs 表示关键字参数(key word args),它本质上是一个 dict
    

    如果同时使用 args 和 **kwargs 时,args 参数列要在 **kwargs 之前

    >>> def fun(*args, **kwargs):
    ...     print('args=', args)
    ...     print('kwargs=', kwargs)
    ... 
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    args= (1, 2, 3, 4)
    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
    

    使用 *args

    >>> def fun(name, *args):
    ...     print('你好:', name)
    ...     for i in args:
    ...         print("你的宠物有:", i)
    ... 
    >>> fun("Geek", "dog", "cat")
    你好: Geek
    你的宠物有: dog
    你的宠物有: cat
    

    使用**kwargs

    >>> def fun(**kwargs):
    ...     for key, value in kwargs.items():
    ...         print("{0} 喜欢 {1}".format(key, value))
    ... 
    >>> fun(Geek="cat", cat="box")
    Geek 喜欢 cat
    cat 喜欢 box
    

    Ref

  • 相关阅读:
    如何利用Typora编写博客,快速发布到多平台?
    bios怎么开启ahci模式
    IDENTITY_INSERT 设置
    【热门测试技术,建议收藏备用】项目实战、简历、笔试题、面试题、职业规划
    k8s节点简介、移除节点、新增节点
    正确理解jmeter线程组之RampUp
    Ingress资源规范
    使用dockercompose.yml安装rabbitmq集群
    使用sonarqube对java项目进行分析
    SonarQube支持Gitlab授权登录
  • 原文地址:https://www.cnblogs.com/greatLong/p/12426744.html
Copyright © 2011-2022 走看看