mg4155com > mg4155线路检测手机版 > 设计格局,Python之面向对象总计

原标题:设计格局,Python之面向对象总计

浏览次数:75 时间:2019-11-15

  • REST与技术非亲非故,代表的是风姿罗曼蒂克种软件架构风格,REST是Representational State Transfer的简单的称呼,普通话翻译为“特色状态转移
  • REST从能源的角度类审视整个互连网,它将遍及在互联网中有些节点的能源通过UCR-VL实行标志,客户端应用通过U凯雷德L来拿到财富的个性,拿到那几个特点导致那么些应用转换状态
  • 具备的数据,不管是透过网络获取的大概操作数据库获得(增加和删除改查卡塔尔国的数码,都是能源,将全数数据便是财富是REST差距与别的架构风格的最本质属性
  • 对于REST这种面向财富的架构风格,有人建议大器晚成种崭新的构造思想,即:面向能源架构(ROA:Resource Oriented Architecture)
    • 对互联英特网的任意东西都实属财富,他以为一个url正是三个财富比如:

概念函数:

日趋的做笔录,做最精锐的投机

豆蔻年华、面向对象

目录:

1、什么是API?

 

看了牛皮设计格局之后感触很深,开采自身还会有好些个学学的东西,设计软件实际不是生机勃勃两句代码把效果与利益写完了就能够,供给观念的从头到尾的经过有大多

   1、面向进度

 1.time和datetime模块

答:API正是接口,提供的url。接口有五个用场:

#语法
def 函数名(参数1,参数2,参数3,...):
    '''注释'''
    函数体
    return 返回的值

#函数名要能反映其意义

代码来源参谋大话设计形式那本书,这里在博客里记录一下,不只怕每一趟都去翻书,不过在博客里面是十三分好找的。

       a、优点:十分的大的下跌了写程序的复杂度,只供给顺着实行的步调,积聚代码就能够

 2. random模块

  • - 为人家提供劳动
  • - 前后端抽离,一个写vue,三个写后端,他们中间都以通过ajax供给

进度:就是从未重回值的函数

范例为叁个简练工厂情势的计算器,首先先创设叁个总括器运算所急需运用的数据模型,在java里面也叫bean,就是多少个抽象的类,这里我们先创建叁个Operation类

       b、短处:风流倜傥套流水生产线大概流程正是来息灭二个主题素材,代码正是牵一发而斯科学普及里全身

3. OS模块(是与操作系统人机联作的多个接口卡塔 尔(英语:State of Qatar)

网络应用程序,分为前端和后端五个部分。当前的发展趋向,正是前面三个设备成千成万(手提式有线电话机、平板、桌面计算机、别的专项使用设备......卡塔尔。

 

public class Operation
    {
        private double _numberA = 0;
        private double _numberB = 0;

        public double NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }
        }

        public double NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }

        public virtual double GetResult()
        {
            double results = 0;
            return results;
        }



    }

   2、面向对象

4. sys模块(sys模块是与python解释器交互作用的二个接口卡塔尔国

所以,必得有大器晚成种统后生可畏的机制,方便区别的前端设备与后端进行通信。那引致API构架的风靡,甚至现身"API First"的陈设观念。RESTful API是眼下可比成熟的生龙活虎套互连网应用程序的API设计理论。

 

下一场更创造加减乘除类,以便工厂开展调用

       a、优点:解除程序的增加性,对某四个指标单独矫正,会登时反应到整个系列中

5.类别化模块 

那正是说先来回顾了然一下

函数的参数:

class OperationAdd : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }

    class OperationSub : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA - NumberB;
            return result;
        }
    }

    class OperationMul : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA * NumberB;
            return result;
        }
    }

    class OperationDiv : Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA / NumberB;
            return result;
        }
    }

       b、缺点:可控性差,无法向面向进程的顺序设计流水生产线式的能够很精准的猜想难点的管理流程与结果,面向对象的次第豆蔻年华旦初叶就有对象时期的相互清除难题。

6.hashlib模块

1、协议

API与客户的通讯公约,总是采用HTTPs协议。

  • 形参:唯有在被调用时才分配内部存款和储蓄器单元,在调用甘休时,立刻释放所分配的内部存储器单元。由此,形参只在函数内部有效。
  • 实参:可以是常量、变量、表明式、函数等,在打开函数调用时,都不得不有明确的值,以便把那个值传给形参。 

制造工厂类,实例化出确切的靶子

   3、 类:具有相似特征的风姿洒脱类东西(人、狗、山尊)

7.configparser

2、域名

有二种方法

方法大器晚成: 尽量将API安插在专项使用域名(会设有跨域难题卡塔 尔(阿拉伯语:قطر‎

https://api.example.com

办法二:假诺鲜明API非常粗略,不会有进一层壮大,能够虚构放在主域名下。

https://example.org/api/

 

 public static Operation CreateOperate(string operate)
        {
            Operation oper = null;
            switch (operate)
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
                case "*":
                    oper = new OperationMul();
                    break;
                case "/":
                    oper = new OperationDiv();
                    break;

            }
            return oper;
        }

   4、对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)

8.logging  (记录日志的模块卡塔 尔(英语:State of Qatar)

3、版本(Versioning)

应该将API的版本号归入U奥迪Q3L。

https://api.example.com/v1/

另意气风发种做法是,将版本号放在HTTP头消息中,但不及放入U讴歌RDXL方便和直观。Github应用这种做法。

mg4155线路检测手机版 1

 

   5、实例化:类——>对象的进度

9.collections模块(使用counter实行记数计算卡塔尔

4、路径(Endpoint)

路径又称"终点"(endpoint卡塔尔,表示API的现实性网站。

在RESTful架构中,各种网站代表后生可畏种能源(resource卡塔 尔(英语:State of Qatar),所以网站中无法有动词,只好出名词,並且所用的名词往往与数据库的表格名对应。平常的话,数据库中的表都以同种记录的"集结"(collection卡塔 尔(阿拉伯语:قطر‎,所以API中的名词也理应运用复数。

举例来讲,有贰个API提供动物公园(zoo卡塔尔国的新闻,还包涵种种动物和雇员的音信,则它的门路应该设计成上边那样。

https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees

 

通过多态,重回父类的法子,然后实现总括结果

   6、 在python中,用变量表示特征,用函数表示技艺,由此具有相通特征和本领的意气风发类东西正是‘类’,

模块:

  Computer程序的付出进程中,随着程序代码越写越多,在七个文书里代码就能越来越长,越来越不易于有限支撑。为了编制可保障的代码,大家把无数函数分组,分别放到不一致的文件里,那样,每一种文件包罗的代码就相对相当少,非常多编制程序语言都应用这种组织代码的点子。在 Python 中,一个.py 文件就叫做多个模块(Module卡塔尔国。

模块分类:

  内置模块  python安装时自带的

  扩充模块  外人写好的,安装之后方可直接行使

        itchat模块(和Wechat相关卡塔尔国, beautifulsoap(爬虫模块卡塔尔国, selenium(网页自动化测量检验工具卡塔 尔(阿拉伯语:قطر‎

        django tornado(框架)

  自定义模块 自个儿写的模块 

5、HTTP动词

对此财富的具体操作类型,由HTTP动词表示。

常用的HTTP动词有下边多少个(括号里是呼应的SQL命令卡塔尔国。

GET(SELECT):从服务器取出资源(一项或多项)。即获取数据
POST(CREATE):在服务器新建一个资源。 即添加数据
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。即更新数据
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。即更新数据
DELETE(DELETE):从服务器删除资源  。即删除数据

再有四个一时用的HTTP动词。

HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

上边是有的例证:

GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
def test(x,y,z): #x=1,y=2,z=3
    print(x)
    print(y)
    print(z)

#位置参数,必须一一对应,缺一不行多一也不行
test(1,2,3)

#关键字参数,无须一一对应,缺一不行多一也不行
test(y=1,x=2,z=3)

#输出结果:
1
2
3
2
1
3
static void Main(string[] args)
        {
            Operation oper;
            oper = OperationFactory.CreateOperate("+");
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result = oper.GetResult();
            Console.WriteLine(result);
            Console.ReadLine();
        }

   7、对象是则是这一类东西中实际的叁个

接收模块好处:

  升高了代码的可维护性。

  当多个模块编写完成,就足以被别的地点引用。

  使用模块能够制止函数名和变量名冲突。

6、过滤音讯(Filtering卡塔尔

若是记录数据过多,服务器不容许都将它们再次来到给客户。API应该提供参数,过滤再次回到结果。

下边是局地大规模的参数。

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

参数的规划允许存在冗余,即允许API路线和UEnclaveL参数不经常有重复。举个例子,GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是均等的。

 

可是简单工厂形式会存在一个难点,后续假使新添方法的话那么还索要持续开创运算类,然后实例化对象,那么那样会增添代码结构的复杂度,当然依旧有主意消逝的,然则这里就只做轻松工厂情势的牵线了,

class Person:   #定义一个人类
    role = 'person'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法,也叫动态属性
        print("person is walking...")

class 类名:
    类属性 = None
    def __init__(self,对象属性):
        self.对象属性 = 对象属性

    def 方法名(self):
        pass

实例 = 类名(10)
实例.方法名()

 1.time和datetime模块

time模块

python中,常常由以下二种方法来表示时间:

  • 时刻戳(timestamp):经常来讲,时间戳表示的是从1969年三月1日00:00:00上马按秒总结的偏移,运营“type(time.time())”,再次回到的是float类型。
  • 格式化的光阴字符串(Format String):如‘2018-4-24'
  • 结构化的岁月(struct_time):元祖情势。struct_time元组共有9个要素共七个要素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

    import time
    # 时间戳:     
    print(time.time())     # 1520503969.847386
    # 字符串格式化时间(两种结果一样):
    print(time.strftime('%x,%X'))   # 04/24/18,16:09:53
    print(time.strftime('%c'))   # Tue Apr 24 16:11:12 2018
    print(time.strftime('%Y-%M-%d,%H:%M:%S'))   # 2018-14-24,16:14:08
    print(time.strftime('%Y-%m-%d %X'))    # 2018-03-08 18:12:49
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
    # 结构化时间:   
    print(time.localtime())   # 本地时区的struct_time
    print(time.gmtime())     # UTC时区的struct_time
    

     

   在那之中Computer认知的年月只可以是'时间戳'格式,而技术员可处理的可能说人类能看懂的时间有: '格式化的时刻字符串','结构化的时日' 

二种时光格式之间的转移:

mg4155线路检测手机版 2  

切实用法:

import time
# 时间戳转化为结构化时间
# time.gmtime(时间戳)     # UTC时间
# time.localtime(时间戳)  # 当地时间
ret = time.localtime(2000000000)
print(ret)
# time.struct_time(tm_year=2033, tm_mon=5, tm_mday=18, tm_hour=11, tm_min=33, tm_sec=20, tm_wday=2, tm_yday=138, tm_isdst=0)

# 结构化时间转化为格式化时间
print(time.strftime('%Y-%m-%d %H:%M:%S', ret))
# 2033-05-18 11:33:20

# 把一个结构化时间转化为格式化时间
print(time.strftime("%Y-%m-%d %X", time.localtime()))
# 把一个格式化时间字符串转化为struct_time
print(time.strptime('2018-04-24 17:37:06', '%Y-%m-%d %X'))

 

 mg4155线路检测手机版 3

# 结构化时间 --> %a %b %d %H:%M:%S %Y串

# ctime,把一个时间戳转化为time.asctime()的形式
# 如果参数未给或者为None的时候,将会默认time.time()为参数
a = time.ctime(2000000000)
print(a)   # Wed May 18 11:33:20 2033
print(time.ctime(time.time()))
# Tue Apr 24 17:41:56 2018

# asctime,把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
# 如果没有参数,则默认将time.localtime()作为参数传入。
print(time.asctime())
# Tue Apr 24 17:41:56 2018

python中时间日期格式化符号:

 1 %y 两位数的年份表示(00-99)
 2 %Y 四位数的年份表示(000-9999)
 3 %m 月份(01-12)
 4 %d 月内中的一天(0-31)
 5 %H 24小时制小时数(0-23)
 6 %I 12小时制小时数(01-12)
 7 %M 分钟数(00=59)
 8 %S 秒(00-59)
 9 %a 本地简化星期名称
10 %A 本地完整星期名称
11 %b 本地简化的月份名称
12 %B 本地完整的月份名称
13 %c 本地相应的日期表示和时间表示
14 %j 年内的一天(001-366)
15 %p 本地A.M.或P.M.的等价符
16 %U 一年中的星期数(00-53)星期天为星期的开始
17 %w 星期(0-6),星期天为星期的开始
18 %W 一年中的星期数(00-53)星期一为星期的开始
19 %x 本地相应的日期表示
20 %X 本地相应的时间表示
21 %Z 当前时区的名称

datetime模块:

import datetime

print(datetime.datetime.now())    # 2018-03-08 21:04:15.544213     

# y-m-d h:M:S       2018-04-24 17:00:00
# 总结从当前不久子初始 比起y-m-d h:M:S过去了多少年 多少月 多少天 多少h,多少m,多少s

mg4155线路检测手机版 4mg4155线路检测手机版 5

import time
def pass_time(times):
    pass_time = time.strptime(times, '%Y-%m-%d %X')  # 结构化时间
    pass_time_stamp = time.mktime(pass_time)   # 时间戳
    time_stamp = time.time()-pass_time_stamp  # 已经过去的时间戳
    pass_times = time.localtime(time_stamp)   # 结构化时间
    now = zip(tuple(pass_times),tuple(time.localtime(0)))
    now1 = [(i[0]-i[1]) for i in now]  # 数字型列表,对应年,月---
    return '从当前时间开始,距离%s过去了%s年%s月%s日%s时%s分%s秒' %(times,now1[0],now1[1],now1[2],now1[3],now1[4],now1[5])

print(pass_time('2018-04-24 17:00:00'))

设计格局,Python之面向对象总计。View Code

7、状态码(status codes)

服务器向顾客重回的状态码和提醒消息,何足为奇的有以下部分(方括号中是该状态码对应的HTTP动词卡塔 尔(英语:State of Qatar)。

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

状态码的完全列表参见这里。

 

三层模型基本上只要不是用了特其余措施那么基本都以依靠轻松工厂情势来管理办法的

    8、类的二种意义:属性援用和实例化

2. random模块

 1 import random
 2 # ----------------------------
 3 # 1.随机小数,发红包可用
 4 print(random.random()) #0到1之间的随机小数
 5 print(random.uniform(1,3))  #大于1且小于3的随机小数
 6 
 7 # ----------------------------
 8 # 2.随机整数,验证码可用
 9 print(random.randint(1,5)) #大于1且小于等于5之间的整数
10 print(random.randrange(1,10,2))  #大于等于1且小于3之间的整数(且是所有的奇数)
11 
12 # ----------------------------
13 # 3.随机选择一个返回,抽奖
14 print(random.choice([1,'23',[4,5]]))
15 # ----------------------------
16 # 4.随机选择返回多个,一次抽取多个
17 print(random.sample([1,'23',[4,5]],2))  #列表元素任意两个组合输出,后缀为输出个数
18 # ----------------------------
19 
20 
21 # ----------------------------
22 # 5.打乱列表顺序,洗牌
23 item=[1,5,2,3,4]
24 random.shuffle(item)  #打乱次序
25 print(item)

使用任意数随机生成6位验证码:

mg4155线路检测手机版 6mg4155线路检测手机版 7

import random
def ver_code(num):
    strs = ''
    lis1 = [chr(i) for i in range(65, 91)]
    lis2 = [str(i) for i in range(10)]
    ver1 = random.sample(lis1+lis2,num)
    for i in ver1:
        strs += i
    return strs

print(ver_code(6))

View Code

mg4155线路检测手机版 8mg4155线路检测手机版 9

def id_code(num):  # num 字母在每一位被取到的概率相同
    ret = ''
    for i in range(num):
        number = str(random.randint(0,9))
        alph_num = random.randint(97,122)   # A65 a97 +25
        alph_num2 = random.randint(65,90)   # A65 a97 +25
        alph = chr(alph_num)
        alph2 = chr(alph_num2)
        choice = random.choice([alph,alph2])
        choice = random.choice([number,choice])
        ret += choice
    return ret
print(id_code(6))

View Code

行使随便数实现二个发红包的编制程序

mg4155线路检测手机版 10mg4155线路检测手机版 11

import random
inp_money = float(input('红包金额:'))
inp_count = int(input('红包个数:'))
def red_packet(money, count):
    li = []
    money = int(money*100)
    money_site = random.sample(range(1, money), count-1)
    money_site.extend([0, money])
    money_site = sorted(money_site)
    for i in range(count):
        li.append(round((money_site[i+1]-money_site[i])*0.01, 2))
    return li
    # 上面的定义li列表、for循环以及return 可以简写成下面一行。
    # return [round((sorted(money_site)[i + 1] - sorted(money_site)[i]) * 0.01, 2) for i in range(count)]
ret = red_packet(inp_money, inp_count)
print(ret)

View Code

采纳随机数随机生成4位验证码,并带模糊效果

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

# 随机字母:
def rndChar():
    return chr(random.randint(48, 57))

# 随机颜色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('ariblk.ttf', 40)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
    draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

8、错误管理(Error handling卡塔 尔(阿拉伯语:قطر‎

只要状态码是4xx,就相应向客商重回出错消息。经常的话,再次回到的音信上校error作为键名,出错消息作为键值就能够。

{
    error: "Invalid API key"
}
#参数组:**字典 *列表
def test(x,*args,**kwargs):
    print(x)
    print(args,args[-1])
    print(kwargs,kwargs.get('s'))
test(1,*[1,2,3],**{'s':1})

#输出结果:
1
(1, 2, 3) 3
{'s': 1} 1

    9、属性援用(类名.属性卡塔尔

3. OS模块(是与操作系统交互作用的叁个接口卡塔尔国

# 有的文本大概转义只怕相会世难点,平日要在双引号前加r,撤消转义,恐怕用双斜杠表示

# 和当前执行的python文件工作目录相关的工作路径
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')

# 和文件夹相关
os.makedirs('dirname1/dirname2')    可生成多层递归目录,即文件夹下创建子文件夹,不会覆盖原文件夹
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录,即文件夹;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和文件夹,包括隐藏文件,并以列表方式打印

# 和文件相关
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息

# 和操作系统差异相关
os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"tn",Linux下为"n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

# 和执行系统命令相关
os.system("bash command")   运行shell命令,直接显示,但是显示的看不懂

 os.popen("bash command).read()  运维shell命令,获取实践结果,可看懂,如os.popen('dir').read()

os.environ 获取系统环境变量

# 路径相关系列
os.path.abspath(path)  返回path规范化的绝对路径,即从哪个盘开始全部显示出来
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或结尾,那么就会返回空值。
               即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小,文件夹的大小不准确,只显示最大值4096字节,文件准确

ret = os.path.join('F:每天视频以及笔记','day5视频')
print(ret)
---F:每天视频以及笔记day5视频    # 组合成一个完整路径

构思如何计算文件夹中有着文件大小?示例路线:F:每一天摄像以致笔记python11期day01

mg4155线路检测手机版 12mg4155线路检测手机版 13

import os
def ram(file_name):
    sum = 0
    for file in os.listdir(file_name):
        path = os.path.join(file_name, file)  # 组合成一个完整路径
        if os.path.isfile(path):   # 路径下是文件
            sum += os.path.getsize(path)
        else:
            sum += ram(path)
    return sum

print(ram('F:每天视频以及笔记python11期day01'))

选用递归观念

mg4155线路检测手机版 14mg4155线路检测手机版 15

import os
def get_size(path):
    l = [path]
    sum_size = 0
    while l:
        path = l.pop()    # l = ['D:python11day2','D:python11day3'...]
        for item in os.listdir(path):    #path = 'D:python11'
            path2 = os.path.join(path, item)   # path2 = 'D:python11day2'
            if os.path.isfile(path2):
                sum_size += os.path.getsize(path2)   # sum = 文件的大小 + 0
            else:                           
                l.append(path2)
    return sum_size
print(get_size('D:python11'))

栈的思考

  # 复制文件的函数在os模块中并官样文章,因为复制文件实际不是由操作系统提供的系列调用。可是我们得以调用shuti模块中的copyfile(卡塔尔完结,该模块也就是os模块的一个增加补充。

9、再次回到结果

针对分裂操作,服务器向客商重返的结果应当符合以下规范

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档

 

class Person:   #定义一个人类
    role = 'person'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法
        print("person is walking...")


print(Person.role)  #查看人的role属性
print(Person.walk)  #引用人的走路方法,注意,这里不是在调用

4. sys模块(sys模块是与python解释器人机联作的一个接口卡塔 尔(阿拉伯语:قطر‎

1 sys.argv           命令行参数是一个List,第一个元素是程序本身路径
2 sys.exit(n)        退出程序,正常退出时exit(0)
3 sys.version        获取Python解释程序的版本信息
4 sys.maxint         最大的Int值
5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6 sys.platform       返回操作系统平台名称

10、Hypermedia API  超媒体API

RESTful API最棒完成Hypermedia,即重回结果中提供链接,连向别的API方法,使得顾客不查文档,也晓得下一步应该做什么。

诸如,当客户向api.example.com的根目录发出哀告,会赢得如此二个文书档案。

{"link": {
  "rel":   "collection https://www.example.com/zoos",  #表示这个API与当前网址的关系(collection关系,并给出该collection的网址)
  "href":  "https://api.example.com/zoos",  #API路径
  "title": "List of zoos",  #API的标题
  "type":  "application/vnd.yourformat+json"  #返回类型
}}

Hypermedia API的两全被称之为HATEOAS。Github的API正是这种设计,访问api.github.com会获得二个具有可用API的网站列表。

{
  "current_user_url": "https://api.github.com/user",
  "authorizations_url": "https://api.github.com/authorizations",
  // ...
}

从上边能够看看,要是想拿到当前客商的音讯,应该去做客api.github.com/user,然后就获取了上边结果。

{
  "message": "Requires authentication",
  "documentation_url": "https://developer.github.com/v3"
}

全局变量和后生可畏都部队分变量:

在子程序中定义的变量称为局部变量,在程序的生机勃勃始发定义的变量称为全局变量。

mg4155线路检测手机版,全局变量效率域是全数程序,局地变量功能域是概念该变量的子程序。

当全局变量与一些变量同名时:在概念局地变量的子程序内,局地变量起效果;在其余省方全局变量起效果。

 

name='reese'
def change_name():
    print('我的名字',name)
change_name()


def change_name():
    name='帅'
    print('我的名字',name)
change_name()
print(name)


def change_name():
    global name
    name='帅'
    print('我的名字',name)
change_name()
print(name)

#输出结果:
我的名字 reese
我的名字 帅
reese
我的名字 帅
帅

 # 固然函数内部无global关键字,优先读取局地变量,能读取全局变量,不可能对全局变量重新赋值;

    但对于可变类型(除数字、字符串、元祖,其余都可变卡塔 尔(阿拉伯语:قطر‎,可对当中因素举行操作。

# 假使函数内部有global关键字,变量本质上是全局变量,可读取可赋值。

# 平日全局变量名用大写,局地变量名用小写。

 

    10、例化:类名加括号就是实例化,会活动触发__init__函数的运维,能够用它来为种种实例定制自个儿的特点

5.连串化模块 

序列化

把对象(变量)从内部存款和储蓄器中形成可存款和储蓄或传输的经过称之为类别化,在Python中叫pickling,在其余语言中也被称之为serialization,marshalling,flattening等等,都以叁个情趣。

系列化指标

  • 持续化某种景况。在断电恐怕关机在此以前能够将近日内部存款和储蓄器中全体的数额保存下来,下一次程序运转时得以从当前保存的文件内容继续推行。
  • 跨平台数量人机联作。

类别化有八个模块json和pickle,shelve

  json   全数编制程序语言都通用的类别化格式,然而它补助的数据类型非常轻易(只帮助数字,字符串,种类,字典等,不帮忙元祖

  pickle  只可以在python语言的主次之间传递数据使用,它扶植python中具备数据类型

  shelve  在py3之后才有,python专有的种类化模块,只针对文件。它只提供叁个open方法,而且必须要用字典方式拜会内容

json

 Json模块提供了几个效果与利益:dumps、loads,那多少个只在内部存款和储蓄器中操作数据,首要在网络传输中动用,和八个数据类型与公事打交道

             dump、load ,那多少个是直接将目的连串化之后写入文件,它依附于一个文书句柄

import json
dic={'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic) #将字典转换成字符串,转换后的字典中的元素是由双引号表示的
print(str_dic,type(str_dic))#{"k1": "v1", "k2": "v2", "k3": "v3"} <class 'str'>

dic2 = json.loads(str_dic)#将一个字符串转换成字典类型
print(dic2,type(dic2))#{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} <class 'dict'>

import json
dic={'k1':'v1','k2':'v2','k3':'v3'}
f = open('a.txt','w',encoding='utf-8')
json.dump(dic,f,ensure_ascii=False)  # 先接收要序列化的对象 再接受文件句柄
f.close()

f = open('a.txt','r',encoding='utf-8')
ret = json.load(f)
print(type(ret),ret)

 # json在写入多次dump的时候,不能够对应试行数次load来去除数据,pickle能够

# json假如要写入多少个因素,应先将成分dumps类别化,再f.write(类别化+‘n’)写入文件。读的时候先按行读取,再利用loads将读出来的字符串转变来相应数据类型。

pickle(能够把python中的任性数据类型系列化卡塔尔国

  在硬盘上囤积文件有相当多样艺术,文本文件只是中间黄金时代种,如若想囤积列表恐怕目的之类的故事情节,可以把对象转变到字符串的款型写入文本文件,不过假诺要从文件中平复对象,则那个就复杂化了。而python提供的pickle无独有偶能不负众望这点:

# 通过pickle存储python原生对象:
import pickle
D = {'a': 1, 'b': 2}
F = open('datafile.pkl', 'wb')
pickle.dump(D, F)       # pickle.dump()可以把任意对象序列化成一个bytes,然后就可以把bytes写入文件
F.close()

# 取回字典,再用pickle模块中load函数进行一次重建
F = open('datafile.pkl', 'rb')
E = pickle.load(F)
F.close()


import pickle
file = 'wish.data'
lis = ['apple', 'banban']
f = open(file, 'wb')
pickle.dump(lis, f)
f.close()

del lis
f = open(file, 'rb')
storedlis = pickle.load(f)
print(storedlis)    # 又得到了列表

至于体系化自定义类的对象:

class A:
    def __init__(self,name,age):
        self.name=name
        self.age=age
a = A('luffy',18)
# import json
# json.dumps(a)   # 报错,说明json无法存储实例化对象
import pickle
ret = pickle.dumps(a)
print(ret)   # 打印出来的是一串字节
obj = pickle.loads(ret)
print(obj)    # 打印出对象地址
print(obj.__dict__)   # {'name': 'luffy', 'age': 18}

在load的时候,必得具有被load数据类型对应的类在内存里面

shelve(用法律专科学园讲链接)

  python专有的种类化模块,只针对文件,只提供了一个open方法,且是用key来访问的,使用起来和字典雷同。

import shelve
f = shelve.open('a.txt')
f['key'] = {'int': 10, 'float': 9.5, 'string': 'Sample data'}
f['ds'] = '范围分为we分我发'
f.close()
# 直接对文件句柄进行操作,就可以存储文件,而且程序会给我们自动创建三个后缀为dir,bak,dat的文件,其中以bat结尾的文件存储的就是b字节数据类型的数据

f1 = shelve.open('a.txt')
a = f1['ds']   # 用key直接取出存储的内容,如果key不存在则会报错
f1.close()
print(a)

# 设置只读模式
f2 = shelve.open('a.txt', flag='r')
f2['key']['float'] = 3.14    # 修改结构中得值,不可以
f2['space'] = 'dwd'          # 覆盖原来的结构,可以
f1.close()

f3 = shelve.open('a.txt')
b = f3['key']['float']       # 对结构的值作修改,但是失败了
f3.close()
print(b)    # 9.5

本文由mg4155com发布于mg4155线路检测手机版,转载请注明出处:设计格局,Python之面向对象总计

关键词:

上一篇:Python之函数总计,HeadFirst设计形式中的笔记

下一篇:饱含安装,调用Tencent云API的实例