python模块之_pip_其它

Posted FHBIAO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python模块之_pip_其它相关的知识,希望对你有一定的参考价值。

#!/usr/bin/env python
# coding:utf-8

from lib.aa import C

c1 = C()
print(c1.name)

print(c1.__module__) # 来自哪个模块
print(c1.__class__)  # 来自哪个类


class Foo:
    \'\'\'这里是类的描述信息。。。\'\'\'
    def __init__(self,name):
        self.name = name

    def __del__(self): # 在程序执行完毕后,内存释放资源回收才会被执行
        print(\'我执行了__del__\')

    def __call__(self, *args, **kwargs): # 对象后面加括号,触发执行。
        print(\'我执行了 __call__\')


f1 = Foo(\'abcde\')

del f1.name # 这个不会触发 __del__

print(\'=========\')
f1()
# Foo(\'tom\')
print(f1.__doc__)
复制代码

 

自定义的格式化方法:

复制代码
#!/usr/bin/env python
# coding:utf-8

# 自定义的格式化
# x=\'{0}{0}{0}\'.format(\'dog\')
#
# print(x)

# class Date:
#     def __init__(self,year,mon,day):
#         self.year=year
#         self.mon=mon
#         self.day=day
# d1=Date(2016,12,26)
#
# x=\'{0.year}{0.mon}{0.day}\'.format(d1)
# y=\'{0.year}:{0.mon}:{0.day}\'.format(d1)
# z=\'{0.mon}-{0.day}-{0.year}\'.format(d1)
# print(x)
# print(y)
# print(z)

# x=\'{0.year}{0.mon}{0.day}\'.format(d1)
# y=\'{0.year}:{0.mon}:{0.day}\'
# z=\'{0.mon}-{0.day}-{0.year}\'

format_dic={
    \'ymd\':\'{0.year}{0.mon}{0.day}\',
    \'m-d-y\':\'{0.mon}-{0.day}-{0.year}\',
    \'y/m/d\':\'{0.year}/{0.mon}/{0.day}\'
}
class Date:
    def __init__(self,year,mon,day):
        self.year=year
        self.mon=mon
        self.day=day
    def __format__(self, format_spec): # 自定制的format方法
        # print(\'我执行啦\')
        # print(\'--->\',format_spec)
        if not format_spec or format_spec not in format_dic:
            format_spec=\'y/m/d\'
        fm=format_dic[format_spec]
        return fm.format(self)


d1=Date(2018,2,16)
# format(d1) #d1.__format__()
# print(format(d1))
print(format(d1,\'ymd\'))
print(format(d1,\'y:m:d\'))
print(format(d1,\'m-d-y\'))
print(format(d1,\'m-d:y\'))
print(\'===========>\',format(d1,\'123\'))
复制代码

 

三个 item 的方式,区别于 attr 的方式 

复制代码
#!/usr/bin/env python
# coding:utf-8


class Foo:
    def __getitem__(self, item):
        print(\'getitem\')
        return self.__dict__[item]

    def __setitem__(self, key, value):
        print(\'setitem\')
        self.__dict__[key]=value

    def __delitem__(self, key):
        print(\'delitem\')
        self.__dict__.pop(key)


f1 = Foo()
## 点的方式操作属性和字典方式操作的区别是调用不同的内部方法

f1.age = 18 # 使用点的方式不会触发__setitem__  只会触发 __setattr__
f1[\'name\']=\'alex\' # 使用字典方式调用时才会触发的方法
f1[\'gender\']=\'male\'

print(f1.age) # 不会触发 __getitem__ 方法
print(f1[\'age\'])

del f1[\'gender\']

print(f1.__dict__)
复制代码

 

复制代码
#!/usr/bin/env python
# coding:utf-8

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age =age

    # def __str__(self): # 自定制的对象显示方式
    #     return \'名字是%s 年龄是%s\' %(self.name, self.age)

    def __repr__(self): # 自定制的对象显示方式
        return \'名字%s 年龄%s\' %(self.name, self.age)

# str是在print时显示,repr是在解释器中显示

f1 = Foo(\'alex\',18)
print(f1) # 实际上是在触发 __str__ 如果找不到,就会去找 __repr__ 来代替
复制代码

 

使对象可迭代:

复制代码
#!/usr/bin/env python
# coding:utf-8

# 使对象可迭代
class Foo:
    def __init__(self,n):
        self.n=n
    def __iter__(self):
        return self

    def __next__(self):
        if self.n == 13:
            raise StopIteration(\'终止了\')
        self.n+=1
        return self.n

# l=list(\'hello\')
# for i in l:
#     print(i)
f1=Foo(10)
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())

for i in f1:  # obj=iter(f1)------------>f1.__iter__()
     print(i)  #obj.__next_()




class Fib:
    def __init__(self):
        self._a=1
        self._b=1

    def __iter__(self):
        return self
    def __next__(self):
        if self._a > 100:
            raise StopIteration(\'终止了\')
        self._a,self._b=self._b,self._a + self._b
        return self._a

f1=Fib()
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(\'==================================\')
for i in f1:
    print(i)
复制代码

 

减少内存消耗: __slots__

复制代码
#!/usr/bin/env python
# coding:utf-8

class Foo:

    def __init__(self,name,age):
        self.name = name
        self.age =age

    # 取消了所有实例的__dict__ 优势是节省内存。 附加优势是限制了属性
    # __slots__ = \'name\'
    __slots__ = [\'name\',\'age\']


f1 = Foo(\'alex\',18)
# print(f1.__dict__)  出错

print(f1.__slots__)
print(f1.name,f1.age)

# 参考: https://www.cnblogs.com/rainfd/p/slots.html
复制代码

 

描述符:

复制代码
#!/usr/bin/env python
# coding:utf-8

class Foo:
    def __get__(self, instance, owner):
        print(\'===>get方法\')
    def __set__(self, instance, value):
        print(\'===>set方法\',instance,value)
        instance.__dict__[\'x\']=value #b1.__dict__
    def __delete__(self, instance):
        print(\'===>delete方法\')


class Bar:
    x=Foo() #在何地?
    def __init__(self,n):
        self.x=n #b1.x=10
b1=Bar(10)
print(b1.__dict__)
b1.x=11111111111111
print(b1.__dict__)

b1.y=11111111111111111111
print(b1.__dict__)

# 参考: https://www.cnblogs.com/wangyongsong/p/6769256.html

# print(Bar.__dict__)
#在何时?
# b1=Bar()
# b1.x
#
# b1.x=1
#
# del b1.x

# print(b1.x)
#
# b1.x=1
# print(b1.__dict__)
#
# del b1.x
复制代码

 

 

通常, 大家都是用的pip 或 pip3 来安装相应模块的。 

但是,pip的官方仓库,经常响应太慢。很容易timeout.

所以,参照网友的方法: 修改成国内的pip源。比如下面的是豆瓣的源,在国内南方响应较快。

以我win10 为例: 运行, %Appdata%  然后在打开的目录下新建文件夹pip   打开pip  ,在下面新建pip.ini文件 ,贴上下面的内容保存即可。

[global]
trusted-global=pypi.douban.com
index-url = https://pypi.douban.com/simple
[install]
trusted-host = pypi.doubanio.com

 

现在使用pip install 就快多了。

以上是关于python模块之_pip_其它的主要内容,如果未能解决你的问题,请参考以下文章

模块与包

Python_52安装第三方模块之requests

pip install 出错:“没有名为 pip.__main__ 的模块”[重复]

Python 实用技巧

基础入门_Python-模块和包.深入SQLAlchemy之SQLAlchemy ORM重构表?

windows下使用pip安装模块发生“failed with error code 1”的解决方法