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
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
文章评论