权限系统要考虑:页面权限, 操作权限, 数据权限  :https://mp.weixin.qq.com/s/XXCDaPP4DTHKLBzsamND2A

=====

__init__.py 会在 import 的时候被执行

configparser在python中该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)

============

try...except Exception as e 其中的e代表什么意思呢?
Exception匹配了所有异常,把异常名称赋给了e。

============

上下文管理器:

def __exit__(self, exc_type, exc_val, exc_tb):
若exc_tb不是空,则说明有异常
返回值只能是true或false,若是false,则会把之前发生的异常抛出来

===========

可以定义一个枚举类来管理一些常量

=====使用顺序

==========自定义字符串比较大小的方法

class MY_CMP(str):
def __lt__(self,y):
return self+y>y+
self
ru=[,,,,,,,]
aa=list(map(str,ru))
aa.sort(key=MY_CMP)

=====================

安装虚拟环境的工具:pipenv
安装pipenv: pip install pipenv

使用 pipenv --venv 命令可以 查看项 目对应的虚拟环境路径
到一个目录下创建虚拟环境:pipenv install
进入虚拟环境:pipenv shell

给虚拟环境安装flask:pipenv install flask

查看安装包的依赖:pipenv graph
退出虚拟环境:exit

允许你不显式激活虚拟环境即可在当前项目的虚拟环境中执行命令:pipenv run python hello.py

数据库可视化工具:Navicat [可以是mysql的可视化工具]

===============

网盘搜索:https://www.dalipan.com/?from=enfi_desktop

=======装饰器

from functools import wraps
def my_decrate(f):
@wraps(f)
def tst(*args,**kwargs):
print('befor')
ret=f(*args,**kwargs)
print('after')
return ret
return tst @my_decrate # 没参数的装饰器
def tt(name,age):
print('hello,name=%s,age=%s'%(name,age)) def logit(lala=' out.log'): #有参数装饰器的定义
def logging_decorator(func):
@wraps(func)
def wrapped_function(*args, **kwargs):
log_string = func.__name__ + " was called"
print(log_string+lala)
return func(*args, **kwargs)
return wrapped_function
return logging_decorator @logit() #有参数的装饰器,加了()
def sdf(name,age):
print('hello,name=%s,age=%s'%(name,age)) @logit(lala=' haha')
def sdf2(name,age):
print('hello,name=%s,age=%s'%(name,age))

定义类装饰器

类装饰器的调用

==========多维数组

from collections import  defaultdict
import json def tst():
return defaultdict(tst) users = tst()
users['core']['ip'] = 'hrldcpr'
users['core']['port'] = 'matthandlersux'
users['age']=
users['wfids']["tree"]['leaf']= print(users['core']['port']) # matthandlersux
print(users['age']) #
print(json.dumps(users)) # {"core": {"ip": "hrldcpr", "port": "matthandlersux"}, "age": , "wfids": {"tree": {"leaf": }}}

===========

生成器是一种使用普通函数语法定义的迭代器 。

实现了方法__iter__的对象是可迭代的,

而实现了方法__iter__和__next__的对象是迭代器

包含yield语句的函数都被称为生成器(生成器也有方法__iter__和__next__)

#自定义生成器

class tst(object):
def __init__(self,n):
self.n=n
self.i =
def __iter__(self):
return self
def __next__(self):
if self.i >self.n:
raise StopIteration()
i=self.i
self.i +=
return i
aa=tst(3)
print('==11111=====')
for j in aa:
print(j)
print('==3333=====')
for j in aa: # 迭代器只能消费一次,所以没打印
print(j)
print('=======')
结果

==11111=====
1
2
3
==3333=====
=======

可以使用chardet模块来检测文件中的字符集合。这在分析大量随机文本时非常有用。安装chardet模块
==============
匿名函数:lambda 参数:操作(参数)     你不想在程序中对⼀个函数使⽤两次, 你也许会想⽤lambda表达式

for循环还有⼀个else从句, 这个else从句会在循环正常结束时执⾏。 这意味着, 循环没有遇到任何break.

ctypes接⼜允许我们在调⽤C函数时使⽤原⽣Python中默认的字符串型和整型 ,⽽对于其他类似布尔型和浮点型这样的类型, 必须要使⽤正确的ctype类型才可以
=============
如果__exit__返回的是True以外的任何东西, 那么这个异常将被with语句抛出

我们来写⼀个程序, 读取⼀个⽂件, 检测它是否是JPG(提⽰: 这些⽂件头部以字节FF D8开始) :jpgdata.startswith(b'\xff\xd8')

在Python中当函数被定义时, 默认参数只会运算⼀次, ⽽不是每次被调⽤时都会重新运算。 你应该永远不要定义可变类型的默认参数

===========用yield实现一个协程

def grep(pattern):
print("Searching for", pattern)
while True:
line = (yield)
if pattern in line:
print(line) tst = grep('love')
next(tst) # 启动协程,执行yield表达式
tst.send('i love you')
tst.send('do you love me')
tst.send('yes i do')
tst.close() # 关闭协程

==对二进制进行编码:base64.b64encode

所谓转义就是不采用符号本来的含义,而是采用另外一种含义。如\n指换行,\r指回车。
可以使用r取消转义,如r"c:\news"

Unicode编码通常是2个字节。
UTF-8:常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码.

f=open("tst.txt")
f.tell() #指针所在位置
f.seek(4) #将指针定位到从开头的第四个字符后面

封装就是让别人看不到,就是定义私有属性和方法

特殊方法:两个对象是否能进行加法运算,首先要看对象是否有__add__方法

__slot__已经把实例属性管控起来了,若要增加属性,只能通过类属性来实现

__setattr__(self,name,value):给name属性赋值时就调用这个方法
__getattr__(self,name):name被访问且它不存在时会调用此方法
__getattribute__(self,name):name被访问时被调用,无论name是否存在

def __setattr__(self,name,value):
print("tst for fun")
self.__dict__[name]=value
def __getattribute__(self,name):
print('aaaaaaa")
return object.__getattribute__(self,name)
def __getattr__(self,name):
if name == "size"
return self.width,self.length
esle:
raise AttributeError

=======

__打头的变量是私有变量,不能被子类继承,对应的实例也不能访问
_打头的变量是protect的,可以被子类继承,实例可以访问,不能在其他模块import

from  hah import *
print('begin')
print(eae.name)
print(_eye.name) # 会报错

========拷贝

import copy
t1={'name':'t1'}
t2={'name':'t2','son':t1}
t3=t2
t4=copy.copy(t2)
t5=copy.deepcopy(t2)
t1['age1']=
t2['age2']=
print('t3 ',t3," t4 ",t4," t5 ",t5)

==========

>>> python xxx.py # 直接运行 >>> python -m xxx # 相当于import,叫做当做模块来启动

主要区别在于sys.path不同

直接运行会将该脚本所在目录添加至sys.path
当做模块启动则会将当前运行命令的路径添加至sys.path

deque提供了⼀个双端队列, 你可以从头/尾两端添加或删除元素.
我们也可以限制这个列表的⼤⼩, 当超出你设定的限制时, 数据会从对队列另⼀端被挤出去(pop)。

捕获多个异常:except (IOError, EOFError) as e:

for循环还有个else从句,这个else从句会在循环正常结束时执。这意味着,循环没有遇到任何break.

检测文件是否是JPG(这些文件头部以字节FF D8开始): if jpgdata.startswith(b'\xff\xd8'):

==============

计算字符长度
def str_byte_len(mystr):
return (len(mystr.encode('utf-8')))

str_byte_len('i love python') # 13(个字节)
str_byte_len('字符') # 6(个字节)

过滤掉各种空值
def filter_false(lst):
return list(filter(bool, lst))

filter_false([None, 0, False, '', [], 'ok', [1, 2]])# ['ok', [1, 2]]

嵌套数组完全展开
from collections.abc import *

def flatten(input_arr, output_arr=None):
if output_arr is None:
output_arr = []
for ele in input_arr:
if isinstance(ele, Iterable): # 判断ele是否可迭代
flatten(ele, output_arr) # 尾数递归
else:
output_arr.append(ele) # 产生结果
return output_arr

flatten([[1,2,3],[4,5]], [6,7]) # [6, 7, 1, 2, 3, 4, 5]

对象转换为可迭代类型
from collections.abc import Iterable

def cast_iterable(val):
return val if isinstance(val, Iterable) else [val]

cast_iterable('foo')# foo
cast_iterable(12)# [12]
cast_iterable({'foo': 12})# {'foo': 12}

检查list是否有重复元素
def has_duplicates(lst):
return len(lst) == len(set(lst))

列表翻转
def reverse(lst):
return lst[::-1]

互为变位词
from collections import Counter
# 检查两个字符串是否 相同字母异序词,简称:互为变位词
def anagram(str1, str2):
return Counter(str1) == Counter(str2)

anagram('eleven+two', 'twelve+one') # True 这是一对神器的变位词
anagram('eleven', 'twelve') # False

是否为变位词;
方法1:
def isAnagrams(self, str1, str2):
if sorted (str1) == sorted(str2):
return True
return False
方法2:
class Solution:
def anagram(self, s, t):
return collections.Counter(s) == collections.Counter(t)

给定一个字符串 S,找出 S 中最长的回文字符串:最简单的方案,穷举所有可能的子串,判断子串是否为回文

class Solution:
# @param {string} s input string
# @return {string} the longest palindromic substring
def longestPalindrome(self, s):
if not s:
return "" n = len(s)
longest, left, right = , ,
for i in xrange(, n):
for j in xrange(i + , n + ):
substr = s[i:j]
if self.isPalindrome(substr) and len(substr) > longest:
longest = len(substr)
left, right = i, j
# construct longest substr
result = s[left:right]
return result def isPalindrome(self, s):
if not s:
return False
# reverse compare
return s == s[::-]

python 杂记20191102的更多相关文章

  1. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

  2. python杂记-3(购买商品)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#如下是一个购物程序:#先输入工资,显示商品列表,购买,quit退出,最后格式化输出所买的商品.count = ...

  3. python杂记-1(os模块)

    os模块说明:python os模块包含普遍的操作系统功能 os.access(path, mode) # 检验权限模式 os.chdir(path) # 改变当前工作目录os.chflags(pat ...

  4. python杂记-6(time&datetime模块)

    #!/usr/bin/env python# -*- coding: utf-8 -*-import timeprint(time.clock())##返回处理器时间,3.3开始已废弃 , 改成了ti ...

  5. python杂记-5(装饰器)

    1.被装饰的函数有参数(一个参数): def w1(func): def inner(arg): # 验证1 # 验证2 # 验证3 return func(arg) return inner @w1 ...

  6. python 杂记

    class TestA(object): def __init__(self): print("A is initing"); def foo(self): print(" ...

  7. Python杂记

    一.函数 1.numpy 模块中的nonzero函数 nonzero返回的数非零元素的下标. 如果输入是单维度的时候它的返回值只有一个:如果输入是多个维度的话,那么它的返回值也是多个维度的.并且的它的 ...

  8. python杂记二

    1. 写文件可以直接使用print函数 file_name = open("file_name.txt","w") print("file conta ...

  9. python杂记一

    1. 输出CSV文件 用python输出csv文件不难,可是MS office excel和WPS 对输出的CSV文件打开规则不一样. WPS可以支持CSV以'\t'为分隔符,打开文件直接写内容 MS ...

随机推荐

  1. 第6/7Beta冲刺

    1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...

  2. IP通信学习心得01

    一.物理拓扑 1. 1) 总线拓扑 特点:所有设备都处于同一个冲突域与广播域,共享相同的带宽 一次只能有一个设备传输,且两端要安装端接器. 传输介质:同轴电缆.(注:10Base5:容量10M 传输5 ...

  3. Kubernetes集群安装(自己搭过,已搭好)

    k8s安装目录 1. 组件版本 && 集群环境 组件版本 etcd 集群 && k8s master 机器 && k8s node 机器 集群环境变量 ...

  4. mysqlbinlog二三事儿

    binlog的sql命令: SHOW VARIABLES LIKE 'log_%';  查询各种log是否开启 SHOW MASTER STATUS; 查询当前binlog文件position状态 S ...

  5. mycat实现读写分离

    1 mysql已经配置好了主从 2 linux 安装java环境 3 linux 安装mycat cd /usr/local # 下载mycat wget http://dl.mycat.io/1.6 ...

  6. web动静分离

    1 动态资源和静态资源 动态资源:多次访问页面,原代码会发生改变,比如jsp 静态资源:多次访问页面,原代码不发生改变,比如html,css 2 动静分离 将动态资源(jsp)放在tomcat服务器中 ...

  7. 嵌入式02 STM32 实验01 端口复用和重映射

    内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  ...

  8. [HAOI2015]树上操作 题解

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增 ...

  9. CSS中position和float的使用

    近期会更新一系列博客,对基础知识再度做个巩固和梳理. 一.position定位 (一):position的属性 1.absolute:生成绝对定位的元素,相对于最近一级定位不是static的父元素来进 ...

  10. quartz2.3.0(三)cron定义调度周期

    cron总结 cron详解参见:<quartz CronExpression表达式> CronTrigger配置完整格式为7个: [秒]   [分]   [小时]   [日]   [月]  ...