many things for recollection

归一化设计

  From abc import ABCmeta, abstractmethod

  class A(metaclass = ABCmeta):

@abstractmethod

Def payment(self):  pass

  统一接口,子类就必须有payment方法,否则不能实例化

  class B(A):

def payment(self):pass

  def pay(obj,money):

obj.payment(money)

  或者采用raise Error的方式在调用统一接口的时候

私有属性:

  __privatemethod_or_attr

  只能在类的内部调用并且不能被子类继承!

  @classmethod

  只调用类属性的方法

  @staticmethod

  与类和对象无关的方法

  @property

  将方法可以成为属性,并调用

  Class A:

@property

    def a():return 1

    obj=A()

    obj.a >>>1

    @a.setter

    Def a(self,new): __a=new 尤其是结合私有属性,注意属性不要和方法名重复!

    Obj.a=2 在obj.a= 调用setter里的内容

    @a.deleter

    同setter,在del 的过程中调用

反射:

  Hasattr(obj,’str’) >>>

  Getattr(obj,’str’) >>>

  Obj可以为module,class or obj

  ‘str’可以为属性,方法,类

内置方法:

  Def __getattr__()

  在getattr的时候调用

  Def __setattr__():

  在setattr的时候用

  Def __call__():调用类()的时候用

  Def __hash__():return调用hash方法的时候用

  Def __new__():实例化对象的时候用可以用来设置单例

  Class A:

def __new__(self,new):

__a = None

if a: __a=object.__new__()

  def __len__调用len()的时候调用

  def __eq__调用==的时候调用设置类的判断条件

  __str__ print的时候用

  __repr__repr()的时候调用,repr更加实用,在__str__没有的时候可以补充

  Def __del__():在del的时候调用

  Item 系列:

在__getitem__在定义对象的索引obj[0]或者切片obj[0:9]的时候用

__setitem__定义对象的索引等于

__delitem__定义对象的删除

  Isinstance 相比type更加好用在多个夫类的多重夫类的时候依然管用

  issubclass

包和模块:

模块

  通过sys.modules可以查看该脚本调用了什么模块!

  模块是.py

  导入模块用import modulename as newname   (调用方法或者属性需要modulename.func() or modulename.attr)

  模块导入需要尽量不要 import module_a, module_b

  直接导入模块中的方法 from modulename import funcname as new_func_name, funcname1 as New_func_name(调用里面的方法可以不用直接使用属性或者方法名,注意避免和自己的脚本中的属性重名!)可以调用dir(modulename)来查看module里面的属性名,避免重复!

  From modulename import (func1,

Func2,

Func3)

  引用的module有自己的命名空间!

  可以用from module import *调用module中所有的公有属性和方法 其中module中的__all__=[‘money‘,‘read1‘]可以用来调控调用内容

  Attention:

  导入会运行程序所以可以利用

  Def __name__==’__main__’:

Func()

  方法来判断是否是在运行该脚本还是在调用该脚本,而防止在调用的时候就执行!

  如果调用了引用模块的模块,不需再次引用模块!

  在测试的时候可以用import importlib; importlib.reload(modulename)

  编译文件python会在第一次调用模块的时候生成pyc文件,方便之后调用加快速度

包:

  包和文件夹的区别:包中有__init__.py文件

  创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模

  包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

  可以import package.module or from package1.package2 import module or from package1.package2.module import func_attr

  __init__py在调用包或者包内的内容的时候都会执行

  如果调用的是包如import package 是不能调用里面的module或者module.func的

  所以可以再__init__.py中写入调用package中的module 这样就可以调入顶层的包就可以啦!

  绝对路径和相对路径:

  相对路径以.\filename或者..\filename开头代表同目录下以及上一层目录下的文件夹

  绝对路径以包的起始目录为开头

  特别需要注意的是:可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path),应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用from的形式

 

 常用模块hashlib &logging

  Module: hashlib

Import hashlib

md = hashlib.md5()
md.update(bytes(str,encoding=‘utf-8‘)) 输入值1
md.update(bytes(str,encoding=‘utf-8‘)) 输入值2
cmd = md.hexdigest()  生成md5值

用来验证和储存密码!或者用SHA1方法

Import logging

import logging

在脚本内只输出到屏幕或者文件可以用一下方法:

logging.basicConfig(level=logging.DEBUG,  

                    format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,  

                    datefmt=‘%a, %d %b %Y %H:%M:%S‘,  

                    filename=‘/tmp/test.log‘,  

                    filemode=‘w‘)  

logging.debug(‘debug message‘)  

logging.info(‘info message‘)  

logging.warning(‘warning message‘)  

logging.error(‘error message‘)  

logging.critical(‘critical message‘)

参数配置

logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息

或者用如下方法  既输入到屏幕又输入到文件

import logging

logger = logging.getLogger()
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler(‘test.log‘)

# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()

formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)

fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
logger.addHandler(ch)

logger.debug(‘logger debug message‘)
logger.info(‘logger info message‘)
logger.warning(‘logger warning message‘)
logger.error(‘logger error message‘)
logger.critical(‘logger critical message‘)
时间: 2024-10-08 09:45:09

many things for recollection的相关文章

根据76大细分词性对单词进行归组(二)

词性的重要性不言而喻,尤其是对于自然语言处理来说,哪怕就是记单词,根据词性对单词进行归组也是非常有帮助的. superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律.前缀后缀规律.词之间的相似性规律等等. 各大词性及其包括的词: 32.N-COUNT-COLL(可数集合名词) (词数:50) 1 aristocracy army array audience band 2 cast chapter command commission committee 3 co

【转帖】You and Your Research

Richard Hamming ``You and Your Research'' Transcription of the Bell Communications Research Colloquium Seminar 7 March 1986 J. F. Kaiser Bell Communications Research 445 South Street Morristown, NJ 07962-1910 [email protected] At a seminar in the Bel

优化网站、网页、代码

网站优化做的就是细节,代码优化就是网站很重要的一个细节.许多seoer由于不懂代码放弃了优化网站代码,这对网站整体权重的提升是不利的,其实seo中的代码优化非常简单.今天我就为大家讲解一下如何进行网站代码seo优化. SEO优化,在网站优化过程中,可以说大家都沉淀在于外部优化上,很少人能把大部份时间花费在内部优化中,尤其是新手,接到网站后,站内优化吗,不就是改改标题.描述.写写Sitemap地图与HTML地图.Robost.txt.做做404错误页面.可以说把一些基本了解的常识处理完后,省下来的

Spring自定义对象的注入配置

以上文章介绍的方法或方式,都是注入基本数据类型例如String,int等等,本例将介绍自定义对象的注入方式的配置. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 操作步骤: 1. 创建Topic对象. public class Topic { /**内容*/ private String context; public String getContext() { return context; } public void setContext(String

Triangle 1.6 (A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator)

Triangle A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator. Version 1.6 Copyright 1993, 1995, 1997, 1998, 2002, 2005 Jonathan Richard Shewchuk 2360 Woolsey #H / Berkeley, California 94705-1927 Bugs/comments to [email protected] Creat

MySQL – optimizer_search_depth

Working on customer case today I ran into interesting problem – query joining about 20 tables (thank you ORM by joining all tables connected with foreign keys just in case) which would take 5 seconds even though in the read less than 1000 rows and do

The Sorrows of Young Werther

The Sorrows of Young Werther J.W. von Goethe Thomas Carlyle and R.D. Boylan Edited by Nathen HaskellDole PREFACE I have carefully collected whatever I have been able to learnof the story of poor Werther, and here present it to you , knowing thatyou w

Kali-linux渗透攻击应用

前面依次介绍了Armitage.MSFCONSOLE和MSFCLI接口的概念及使用.本节将介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务和PDF文件等. 6.4.1 渗透攻击MySQL数据库服务 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.在Metasploitable系统中,MySQL的身份认证存在漏洞.该漏洞有可能会让潜在的攻击者不必提供正确的身份证书便可访问MySQL数据库.

[XSY 1551] 往事 广义后缀数组

题意 给定一棵 n 个点的树, 每条边上有字符 c . 定义 s[i] 为从 i 到根的所有字符组成的字符串. 求 $\max_{1 \le u < v \le n} [ LCP(s[u], s[v]) + LCS(s[u], s[v]) ]$ . n <= 200000 . 实现1 n log^2 n 广义后缀数组 + 启发式合并 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4