全栈工程师_java全栈工程师_全栈开发者学习经验总结

  • 首页
  • 开发工具
    • 软件安装
    • 软件使用
  • 前端
    • Ionic
    • Android
    • Capacitor
    • Angular
    • Vue
    • 苹果开发者账号
  • 后端
    • Java
    • Python
    • MyBatis
    • Spring
    • SpringBoot
    • SpringMVC
    • SpringCloud
  • 服务器
    • Linux
    • MySQL
    • Nginx
    • Tomcat
    • Docker
  • 其他
    • 生活碎片
    • 报错专区
  • 我
lipsuper
专注产出高质量原创手打文章
  1. 首页
  2. 后端
  3. Python
  4. 正文

Python学习手记(三)

2020年10月7日 554点热度 0人点赞 0条评论

pip

pip(或者pip3) install <package_name>用来下在一个第三方的模块

pip uninstall <package_name>

pip list列出当前环境安装了哪些第三方模块

pip freeze也是列出当前环境安装了哪些第三方模块

部署项目之前,输出依赖文件列表:

pip freeze > requirements.txt

然后在服务器上部署完成代码后,运行:

pip install -r requirements.txt

就可以完成依赖的安装

临时更改pip源:

pip install <package_name> -i url

阿里云:https://mirrors.aliyun.com/pypi/simple/

自定义模块

在模块里面定义__all__ = ['xx', 'yy']

那么在使用from <module_name> import *导入这个模块的时候,其实导入的是__all__里面的属性,看它里面定义了哪些属性。如果模块里面没有定义__all__,才会导入所有不以_开头的变量和函数。

模块里面以_开头的变量,建议只在本模块里面使用。有点儿类似java里的私有变量,但又有一点不一样。具体看使用什么样的导入方式。

如果不让别人使用_开头的变量,那么在最后删除掉这个变量:del _foo

删除多个:del (_foo, _bar)

假设现在有一个模块demo.py里面定义了三个print方法,那么,当我在别的模块引入这个demo.py模块的时候,里面的三个print方法会依次执行,这是我不想要的,于是我需要在demo模块里面这样写才能防止代码自动执行:

if __name__ == '__main__':
    print('foo')
    print('bar')
    print('foobar')

类

定义一个类:

class Student(object):
    # __slots__ = ('name', 'age', 'height')
​
    def __init__(self, name, age, height):
        self.name = name
        self.age = age
        self.height = height
​
    def run(self):
        print(self.name, 'is running')
​
    def eat(self):
        print(self.name, 'is eating now')
        
    def __str__(self):
        return 'hello world'
​
​
s1 = Student('tom', 19, 180)
s1.run()
s1.eat()
# 动态属性
s1.city = 'shanghai'
print(s1.city)
# 在Python里这样是不会报错的,如果这个属性以前不存在,会给对象添加一个新的属性,如果这个属性存在,会覆盖掉这个属性以前的值。
__slots__ = ()
比如上面的代码,如果加上这句,但是括号里面不定义任何值的话,就会报错,这是对类的属性进行限制。
__slots__ = ('name', 'age', 'height')
这样写的话,就是允许这个类有括号里的三个属性。上面那个s1.city就会报错了。

两个下划线开始的变量是私有变量。

静态方法

如果一个方法里面没有用到实例对象的任何属性,可以将此方法定义为静态方法。用@staticmethod标注

类方法

如果一个函数只用到了类属性而没有有用到对象属性,我们可以把它定义为一个类方法,用@classmethod标识。

魔法方法

类似Angular里面的生命周期函数。

__init__ # 对象创建的时候调用
__del__  # 对象销毁的时候调用
__str__  # 如果定义了这个方法,那么直接打印对象的时候就会调用这个方法。
__repr__ # 如果定义了这个方法,那么直接打印对象的时候就会调用这个方法。(如果str和repr都定义了,那么优先调用str)
__call__:
如果在类里定义这个__call__方法:
    def __call__(self, *args, **kwargs):
        print('__call__method is called')
        
那么执行s1()也就是对象加括号就不会报错,就会去调用这个__call__方法。

is身份运算符可以判断两个对象是否是同一个对象:

s1 is s2 # 答案是bool值

单例设计模式

保证对象在全局里面是唯一的。

代码示例:

class Single(object):
    __instance = None
    __is_first = True
​
    @classmethod
    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            # apply memory, create object, set object's kind to cls
            cls.__instance = object.__new__(cls)
        return cls.__instance
​
    def __init__(self, name, age):
        if self.__is_first:
            self.name = name
            self.age = age
            self.__is_first = False
​
​
s1 = Single('tom', 12)
s2 = Single('jack', 30)
print(id(s1))
print(id(s2))
​
print(s1.name)
print(s2.name)

输出示例:

140467971943728
140467971943728
tom
tom

前一个对象的属性被后创建的覆盖了。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 备忘
最后更新:2020年10月7日

lipsuper

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 lipsuper.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2021004735号-1

渝公网安备 50011202502306号