marshmallow,支持 Python 对象和原生数据相互转换的库

在很多情况下,我们会有把 Python 对象进行序列化或反序列化的需求,比如开发 REST API,比如一些面向对象化的数据加载和保存,都会应用到这个功能。

这里看一个最基本的例子,这里给到一个 User 的 Class 定义,再给到一个 data 数据,像这样:

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

data = [{
'name': 'Germey',
'age': 23
}, {
'name': 'Mike',
'age': 20
}]

现在我要把这个 data 快速转成 User 组成的数组,变成这样:

[User(name='Germey', age=23), User(name='Mike', age=20)]

你会怎么来实现?

或者我有了上面的列表内容,想要转成一个 JSON 字符串,变成这样:

[{"name": "Germey", "age": 23}, {"name": "Mike", "age": 20}]

你又会怎么操作呢?

另外如果 JSON 数据里面有各种各样的脏数据,你需要在初始化时验证这些字段是否合法,另外 User 这个对象里面 name、age 的数据类型不同,如何针对不同的数据类型进行针对性的类型转换,这个你有更好的实现方案吗?

初步思路

之前我介绍过 attrs 和 cattrs 这两个库,它们二者的组合可以非常方便地实现对象的序列化和反序列化。

譬如这样:

from attr import attrs, attrib
from cattr import structure, unstructure

@attrs
class User(object):
name = attrib()
age = attrib()

data = {
'name': 'Germey',
'age': 23
}
user = structure(data, User)
print('user', user)
json = unstructure(user)
print('json', json)

运行结果:

user User(name='Germey', age=23)
json {'name': 'Germey', 'age': 23}

好,这里我们通过 attrs 和 cattrs 这两个库来实现了单个对象的转换。

首先我们要肯定一下 attrs 这个库,它可以极大地简化 Python 类的定义,同时每个字段可以定义多种数据类型。

但 cattrs 这个库就相对弱一些了,如果把 data 换成数组,用 cattrs 还是不怎么好转换的,另外它的 structure 和 unstructure 在某些情景下容错能力较差,所以对于上面的需求,用这两个库搭配起来并不是一个最优的解决方案。

另外数据的校验也是一个问题,attrs 虽然提供了 validator 的参数,但对于多种类型的数据处理的支持并没有那么强大。

所以,我们想要寻求一个更优的解决方案。

更优雅的方案

这里推荐一个库,叫做 marshmallow,它是专门用来支持 Python 对象和原生数据相互转换的库,如实现 object -> dict,objects -> list, string -> dict, string -> list 等的转换功能,另外它还提供了非常丰富的数据类型转换和校验 API,帮助我们快速实现数据的转换。

要使用 marshmallow 这个库,需要先安装下:

pip3 install marshmallow

好了之后,我们在之前的基础上定义一个 Schema,如下:

class UserSchema(Schema):
name = fields.Str()
age = fields.Integer()

@post_load
def make(self, data, **kwargs):
return User(**data)

还是之前的数据:

data = [{
'name': 'Germey',
'age': 23
}, {
'name': 'Mike',
'age': 20
}]

这时候我们只需要调用 Schema 的 load 事件就好了:

schema = UserSchema()
users = schema.load(data, many=True)
print(users)

输出结果如下:

[User(name='Germey', age=23), User(name='Mike', age=20)]

这样,我们非常轻松地完成了 JSON 到 User List 的转换。

有人说,如果是单个数据怎么办呢,只需要把 load 方法的 many 参数去掉即可:

data = {
'name': 'Germey',
'age': 23
}

schema = UserSchema()
user = schema.load(data)
print(user)

输出结果:

User(name='Germey', age=23)

当然,这仅仅是一个反序列化操作,我们还可以正向进行序列化,以及使用各种各样的验证条件。

下面我们再来看看吧。

更方便的序列化

上面的例子我们实现了序列化操作,输出了 users 为:

[User(name='Germey', age=23), User(name='Mike', age=20)]

有了这个数据,我们也能轻松实现序列化操作。

序列化操作,使用 dump 方法即可

result = schema.dump(users, many=True)
print('result', result)

运行结果如下:

result [{'age': 23, 'name': 'Germey'}, {'age': 20, 'name': 'Mike'}]

由于是 List,所以 dump 方法需要加一个参数 many 为 True。

当然对于单个对象,直接使用 dump 同样是可以的:

result = schema.dump(user)
print('result', result)

运行结果如下:

result {'name': 'Germey', 'age': 23}

这样的话,单个、多个对象的序列化也不再是难事。

经过上面的操作,我们完成了 object 到 dict 或 list 的转换,即:

object <-> dict
objects <-> list

验证

当然,上面的功能其实并不足以让你觉得 marshmallow 有多么了不起,其实就是一个对象到基本数据的转换嘛。但肯定不止这些,marshmallow 还提供了更加强大啊功能,比如说验证,Validation。

比如这里我们将 age 这个字段设置为 hello,它无法被转换成数值类型,所以肯定会报错,样例如下:

data = {
'name': 'Germey',
'age': 'hello'
}

from marshmallow import ValidationError
try:
schema = UserSchema()
user, errors = schema.load(data)
print(user, errors)
except ValidationError as e:
print('e.message', e.messages)
print('e.valid_data', e.valid_data)

这里如果加载报错,我们可以直接拿到 Error 的 messages 和 valid_data 对象,它包含了错误的信息和正确的字段结果,运行结果如下:

e.message {'age': ['Not a valid integer.']}
e.valid_data {'name': 'Germey'}

因此,比如我们想要开发一个功能,比如用户注册,表单信息就是提交过来的 data,我们只需要过一遍 Validation,就可以轻松得知哪些数据符合要求,哪些不符合要求,接着再进一步进行处理。

当然验证功能肯定不止这一些,我们再来感受一下另一个示例:

from pprint import pprint
from marshmallow import Schema, fields, validate, ValidationError

class UserSchema(Schema):
name = fields.Str(validate=validate.Length(min=1))
permission = fields.Str(validate=validate.OneOf(['read', 'write', 'admin']))
age = fields.Int(validate=validate.Range(min=18, max=40))


in_data = {'name': '', 'permission': 'invalid', 'age': 71}
try:
UserSchema().load(in_data)
except ValidationError as err:
pprint(err.messages)

比如这里的 validate 字段,我们分别校验了 name、permission、age 三个字段,校验方式各不相同。

如 name 我们要判断其最小值为 1,则使用了 Length 对象。permission 必须要是几个字符串之一,这里又使用了 OneOf 对象,age 又必须是介于某个范围之间,这里就使用了 Range 对象。

下面我们故意传入一些错误的数据,看下运行结果:

{'age': ['Must be greater than or equal to 18 and less than or equal to 40.'],
'name': ['Shorter than minimum length 1.'],
'permission': ['Must be one of: read, write, admin.']}

可以看到,这里也返回了数据验证的结果,对于不符合条件的字段,一一进行说明。

另外我们也可以自定义验证方法:

from marshmallow import Schema, fields, ValidationError

def validate_quantity(n):
if n < 0:
raise ValidationError('Quantity must be greater than 0.')
if n > 30:
raise ValidationError('Quantity must not be greater than 30.')

class ItemSchema(Schema):
quantity = fields.Integer(validate=validate_quantity)

in_data = {'quantity': 31}
try:
result = ItemSchema().load(in_data)
except ValidationError as err:
print(err.messages)

通过自定义方法,同样可以实现更灵活的验证,运行结果:

{'quantity': ['Quantity must not be greater than 30.']}

对于上面的例子,还有更优雅的写法:

from marshmallow import fields, Schema, validates, ValidationError


class ItemSchema(Schema):
quantity = fields.Integer()

@validates('quantity')
def validate_quantity(self, value):
if value < 0:
raise ValidationError('Quantity must be greater than 0.')
if value > 30:
raise ValidationError('Quantity must not be greater than 30.')

通过定义方法并用 validates 修饰符,使得代码的书写更加简洁。

必填字段

如果要想定义必填字段,只需要在 fields 里面加入 required 参数并设置为 True 即可,另外我们还可以自定义错误信息,使用 error_messages 即可,例如:

from pprint import pprint
from marshmallow import Schema, fields, ValidationError

class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True, error_messages={'required': 'Age is required.'})
city = fields.String(
required=True,
error_messages={'required': {'message': 'City required', 'code': 400}},
)
email = fields.Email()

try:
result = UserSchema().load({'email': 'foo@bar.com'})
except ValidationError as err:
pprint(err.messages)

默认字段

对于序列化和反序列化字段,marshmallow 还提供了默认值,而且区分得非常清楚!如 missing 则是在反序列化时自动填充的数据,default 则是在序列化时自动填充的数据。

例如:

from marshmallow import Schema, fields
import datetime as dt
import uuid

class UserSchema(Schema):
id = fields.UUID(missing=uuid.uuid1)
birthdate = fields.DateTime(default=dt.datetime(2017, 9, 29))

print(UserSchema().load({}))
print(UserSchema().dump({}))

这里我们都是定义的空数据,分别进行序列化和反序列化,运行结果如下:

{'id': UUID('06aa384a-570c-11ea-9869-a0999b0d6843')}
{'birthdate': '2017-09-29T00:00:00'}

可以看到,在没有真实值的情况下,序列化和反序列化都是用了默认值。

这个真的是解决了我之前在 cattrs 序列化和反序列化时候的痛点啊!

指定属性名

在序列化时,Schema 对象会默认使用和自身定义相同的 fields 属性名,当然也可以自定义,如:

class UserSchema(Schema):
name = fields.String()
email_addr = fields.String(attribute='email')
date_created = fields.DateTime(attribute='created_at')

user = User('Keith', email='keith@stones.com')
ser = UserSchema()
result, errors = ser.dump(user)
pprint(result)

运行结果如下:

{'name': 'Keith',
'email_addr': 'keith@stones.com',
'date_created': '2014-08-17T14:58:57.600623+00:00'}

反序列化也是一样,例如:

class UserSchema(Schema):
name = fields.String()
email = fields.Email(load_from='emailAddress')

data = {
'name': 'Mike',
'emailAddress': 'foo@bar.com'
}
s = UserSchema()
result, errors = s.load(data)

运行结果如下:

{'name': u'Mike',
'email': 'foo@bar.com'}

嵌套属性

对于嵌套属性,marshmallow 当然也不在话下,这也是让我觉得 marshmallow 非常好用的地方,例如:

from datetime import date
from marshmallow import Schema, fields, pprint

class ArtistSchema(Schema):
name = fields.Str()

class AlbumSchema(Schema):
title = fields.Str()
release_date = fields.Date()
artist = fields.Nested(ArtistSchema())

bowie = dict(name='David Bowie')
album = dict(artist=bowie, title='Hunky Dory', release_date=date(1971, 12, 17))

schema = AlbumSchema()
result = schema.dump(album)
pprint(result, indent=2)

这样我们就能充分利用好对象关联外键来方便地实现很多关联功能。

以上介绍的内容基本算在日常的使用中是够用了,当然以上都是一些基本的示例,对于更多功能,可以参考 marchmallow 的官方文档:https://marshmallow.readthedocs.io/en/stable/,强烈推荐大家用起来。

– EOF –

上海中考考情分析-英语学科

 

上海中考英语,满分150分

 

【一、听力,30分】

1、10分的人机对话

2、20分的听力常规考查

听力不好的五六七年级同学,不用过于紧张,因为听力本身不难,到了初二初三随着能力提升,就不是问题了。

 

【二、语音语法和词汇,50分】

1、单选,20题20分,音标1题+词汇8题左右+语法11题左右。其中难点是语法题。

2、五选四,又叫小猫钓鱼题,8分

3、词型转换,8分

4、句型转换,14分

 

️第一大题听力和第二大题语音语法个词汇,如果你想进普通市重点,那一道题都不能错,0失分!

 

【三、阅读与写作】

 

阅读部分50分

 

1、常规语篇阅读 6×2=12分

(1)常考文章体裁,记叙文、说明文、小议论文,说明文居多。

(2)常考题型,有三大类

一是,词意替换题,二是,细节推理判断题(考的最多),三是,文章主旨归纳总结或者判断题

2、完形填空 6×2=12分,压轴题,难度很大,难度系数4:1:1(易中难的占比)

3、首字母填空题 7×2=14分,压轴题,难度很大。难度系数4:2:1(易中难的占比)

4、阅读回答问题 14分

 

其中,完形填空,首字母填空,是最难的两大题。

 

【写作部分20分】

 

批卷的分值比例是:8+8+4,8分看语言,8分内容,4分看结构。

 

 

【奥孚培优教研】中考考情分析-英语学科【不同档次的高中英语成绩要求】

 

1、普通高中,120-130分,按最大限度,允许你犯错的丢分题是:听力扣2分,小猫钓鱼扣2分,语篇阅读扣4分,完形填空扣6分,首字母扣6分,阅读回答问题扣3分,作文扣7分,150-30=120,120是普通高中的录取分数线。

 

2、区重点高中,135分,允许你犯错丢分的题是:完形填空题4分,首字母填空扣4分,作文7分。150-15=135,135是区重点高中的录取分数线。

 

3、市重点高中,140分,允许你犯错丢分的题目是:完形填空扣2分,首字母填空扣2分,作文扣5分,150-9=141,140分是市重点高中的录取分数线。

 

4、四校八校,145分,允许你犯错丢分的题目是:完形或者首字母错一题,扣2分,作文扣3分,150-5=145,145是四校八校的录取分数线。

 

 

【奥孚培优教研】中考考情分析-英语学科【几点规律和建议】

 

️英语考情,整体也是十来年不变,难度逐年递增,一二模考试的英语卷子中,尤其是一模考卷子中,会出现前五六年前的高三一模考英语阅读理解文章。

也就是说,英语要考140+,熟悉弄懂初中内容即可,如果要145+,那你即使不准备自招,也要接触学习高中的内容。

 

️英语是没有年级和知识逻辑限制的,意思是可以超年级学,这在上海更正常不过了。

 

一进入初中六年级,建议英语的思路是:

中考,高考/四级,六级/考研,雅思/托福,往前学即可,这样的思路,比学其他乱七八糟的东西都更有效更管用。而且,前面的每一阶段的超前学习内容,都会对后面的阶段性的重要大型考试,都有帮助和铺垫。

一般来说,自招的同学,学到高考的内容就可以了,这就很不容易了。

 

那什么时候开始学高中的比较合适?答案是因人而异。

大多数一般来说,六七年级对于中考的内容没有太大问题时,就可以把重心转移到高考内容上,当然中考的也不是不管,学校还在学的,也要兼顾。

 

那么,什么样的情况,就算把中考的学的差不多了呢?

有一个简单的参照标准,中考考纲词汇(1600单词+300多词组,约2000个)默写正确理率超过95%以上,自己本区前几年的一模卷,150分,减去30分听力,剩余的120分,能过100分,就算还可以了,能过110,就很厉害了,大约105左右,重心就可以转移到高中内容学习,同时兼顾初中。

 

️学习高中的内容,重点抓两个方面,

一是高考考纲词汇(3500核心+500拓展,约4000个),尽可能多背,最好默写正确率能到90%,

二是高三一模考的阅读理解文章,能大体读懂文章即可,不用在意文章后面题目的正确率,因为注定了是不会高的。为什么不用在意,因为太难了。

 

️背单词没有更好的方法,最好的方法,就是不断重复,重复,再重复。

背不下来单词,也没有什么五花八门的理由和借口,就是一个字,懒。

有同学和家长说,六七年级开始学中考和一二模的,能学懂吗?还要学高中的,岂不是太难了?

这个问题也好回答:

一是,看你对孩子的目标定位和孩子的基础。这个最重要,也就是说,要适合孩子。

二是,很多事,非不能也,实不为也。你做出来的事,有人能做来,你背不下来的词汇,也有人能背下来,那么,你想去又去不了的学校,也自然会有人能去。

 

若能做到上述内容单就英语学科而言,进八校,没有任何问题,进四校,不出意外,也没什么大的问题。

 

以上供大家参考。【奥孚培优教研】中考考情分析-英语学科【奥孚培优教研】中考考情分析-英语学科

转自:https://mp.weixin.qq.com/s/EmCLfjk0mUqLVwsuu0Os_w

央行发布:这些地方,钱正在撤离!

源:刘晓博说财经(ID:liuxb929)
作者:刘晓博

 

5月6日,央行公布了“2021年一季度地区社会融资规模增量统计表”。
 
这组数据从“融资”的角度告诉我们,钱正在加速流向哪里,或者加速撤离哪里。
 
我们先看第一张表,是按照融资总量排序的。央行的“地区社会融资规模增量”,包括“人民币贷款”、“外币贷款”、“委托贷款”、“信托贷款”、“未贴现银行承兑汇票”、“企业债券”、“政府债券”、“非金融企业境内股票融资”等项目。
 

央行发布:这些地方,钱正在撤离!

 
可以看出,江苏在2021年一季度融资接近1.5万亿,位居全国(内地)各省市第一位。2020年一季度,江苏也是第一。
 
经济总量第一的广东,连续两年都是第二。但2021年一季度比去年同期有明显下滑,下降了大约12.5%。广东和江苏的差距,主要体现在“未贴现银行承兑汇票”方面。
 
浙江位居第三,达到了1.1万亿;山东位居第四,为0.74万亿。
 
此外,获得融资比较多的省市还有北京、四川、湖南、福建、上海、安徽等。
 
总量上最少的5个省市区分别是:青海、海南、宁夏、西藏和天津。
 
天津作为四大直辖市之一,竟然进入增量的倒数前列,令人唏嘘。天津一季度融资总量大约只有重庆的四分之一,或者相当于北京的十分之一。
 
我们再换一个视角,从增长率来观察一下。于是就有了下面这张图:
 

央行发布:这些地方,钱正在撤离!

 
辽宁在今年一季度获得的融资增量是全国最亮丽的,同比大增了228%。此外,青海、内蒙、湖北、吉林、陕西的增长也非常好,都进入了前六名。
 
前六名里,全部是是北部、中部和西部的省市区。
 
而江苏、浙江、福建、广东四大东南沿海省份,要么接近于零增长,要么是负增长。
 
还记得我之前给大家看的2020年小学生招生人数增长情况吗?有增量的省市区分别是北京、天津、新疆、山西、西藏、辽宁和山东,也都分布在北方和西部。
 
而江苏、浙江、广东、福建四省,2020年小学生招生人数也是下降的。
 
小学生招生人数,跟一季度资金流向,有关系吗?
 
有!
 
这两个指标带有同步性。它们意味着:中美贸易战、疫情,以及香港因素,最终的确让东南沿海地区(经济对外依存度最大地区)就业机会有所降低。外来打工人口有回流内地的迹象,当然社会融资额也会体现出来。
 
或者说,这两个指标都暗示着“内循环”程度在提升。
 
再回过头来看融资增量增长排序的那张表的下半部分,也就是跌幅最大的省市。
 
跌幅最大的是:海南、天津、甘肃、黑龙江、山西、河南、云南、河北,它们融资增量同比都下滑了超过30%。
 
其中海南融资增量下滑最多,从700亿元跌到了133亿元,跌幅超过81%。
 
资金为何加速流出海南?海南获得的政策红包不是非常丰厚吗?
 
这是特殊时期的特殊现象。海南经济正在转型,从之前的高度依赖房地产,向中国最大的自由贸易港转型。自由港刚刚起步,但房地产已经被遏制住,再加上生态保护提升,所以出现了阶段性的资金流出。其实在过去几年,海南一直是这样的。(下图)
 

央行发布:这些地方,钱正在撤离!

上图:过去三年,各省市区“金融机构本外币存款余额”增长情况,其中海南增速全国倒数第一,天津倒数第五。增幅低于29%的省市区,都跑输了大盘。 数据显示,资金正加速流入浙江、上海、广东、江苏等经济发达地区。
天津也处于困难时期,社会融资额的增量从去年一季度的1875亿元(比重庆略少),大幅下降到了今年的504亿元(不到重庆的四分之一)。这意味着天津经济转型,仍然处于最困难的阶段。
 
不过最近有报道说,今年一季度天津滨海新区引进北京企业300多家,协议投资额600亿元,这说明天津一直在努力。
 
至于资金加速流出的甘肃、黑龙江、山西,都是资源大省,产业结构相对单一。它们融资增量减少,跟地方债发行减少有密切关系。
 
央行的数据显示,一季度“地方债融资为零”的省市区有:甘肃、黑龙江、海南、上海、西藏,而宁夏则为“-7亿元”。
 
地方债融资增量为零,跟控制地方政府的杠杆率有密切关系,除了上海之外都是经济相对落后的省市区。
 
此外,2021年一季度企业债券融资增量为负数的省市区有:天津、河北、山西、辽宁、黑龙江、河南、海南、云南、青海、宁夏、新疆。
 
这是什么意思?有些省市企业债信用不好,大家不太愿意买,所以就出现了企业债券融资额下降。
 
从上述名单可以看出,东北、北部、西部和部分南部省份,企业发债难度加大。这些基本上都是经济相对落后地区。
 
资金是推动经济增长的重要力量,当融资增量下降的时候,就应该引起足够的重视。因为这意味着钱在流出,一定是哪里出了问题。要么是政府效率太低、管制太多,要么是民间信用偏低,要么是经济结构单一。

转自:https://mp.weixin.qq.com/s/S1pm2-FyDv0TpFn8DTgFng

装修必懂的客厅、餐厅、卧室家具布局尺寸!

本期为大家分享一篇关于家居尺寸的文章

李女士退掉了新买的沙发,虽然是她非常喜欢样式,但摆放了沙发,客厅变得太拥挤了,过道明显不足,人走动时经常会磕碰。

所以,买家具前,一定要提前弄清楚自家各空间能摆放多大的家具,先了解下面的客厅、餐厅、卧室家具布局尺寸吧,免得后悔 !

一、客厅家具布局尺寸

1、沙发到茶几的距离要40cm(400mm)以上。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

有了40cm宽的过道,一方面通行不会磕碰到家具,另一方面你若躺在沙发上,能更舒适、轻松地舒展双腿,一点都不感到拘束。

2、能摆什么规格的沙发与客厅背景墙的长度有关

客厅背景墙不到3m的话,建议摆放一个双人位沙发较合适。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

若背景墙能达3-4m才适合摆放三人位沙发。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

若背景墙能有4-6m才适合摆放1个三人位+1个单人位,或者3+妃的组合沙发。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

若背景墙能有6m以上,才适合摆放2个单人位+1个三人位吗,或者3+1+妃的组合沙发。

3、部分规格沙发尺寸的推荐

两人位的沙发要有126-150cm长才能坐着既舒适又不挤。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

三人位沙发可以是175-196cm。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

四人位沙发能是3+妃的,且其长度该是200-250cm。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

四人位沙发也能是3人位沙发+单椅。

4、茶几规格推荐

配沙发的茶几应该在高度上和沙发差不多持平或者略高,才是好用的。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

单个圆茶几可以是高35-50cm,长60-100cm。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

单个方形茶几高40-50cm,长100-120cm。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

此外,中小户型客厅,茶几要尽量少占空间的,推荐细腿茶几较轻盈,或者是透明的玻璃茶几能看上去通透并显宽敞。

二、餐厅家具布局尺寸

1、餐桌椅与墙壁的距离

装修必懂的客厅、餐厅、卧室家具布局尺寸!

餐桌侧边要距墙有60cm才方便人通行。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

餐桌后边要距墙有80cm才能让你便于把整张椅子都拉出来。

2、不同规格餐桌尺寸推荐

1、两人对坐的桌子该是边长75cm的方桌较舒适。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

2、适合夫妻烛光晚餐的长方形餐桌可以是90cm长的。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

3、两人并排坐的的餐桌可以是长120cm。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

4、四人坐的桌子该是140cm长才较舒适。

装修必懂的客厅、餐厅、卧室家具布局尺寸!

5、4人-6人用餐的餐桌则可以是长135-160cm并宽70-90cm。

三、卧室家具布局尺寸

1、床的四周间距

装修必懂的客厅、餐厅、卧室家具布局尺寸!

床离衣柜要有90cm才便于把衣柜抽屉全拉出来,或者是把平开门衣柜完全打开。

床尾要离电视柜或梳妆台有80cm的合理过道间距。

床侧离窗户至少有50cm才能避免万一的窗外雨水会溅到床上。

2、床的高度

装修必懂的客厅、餐厅、卧室家具布局尺寸!

包括床垫、被子在内,床整体高度应是50-60cm,若更高的话,你爬上床时将有些困难,至少老人和孩子会不太方便。

3、床的规格推荐

装修必懂的客厅、餐厅、卧室家具布局尺寸!

单人床可以是长1120mm,双人床则要达到1320mm,夫妻同睡的双人床要长1520mm,若是要孩子一起睡的三人床要长1720mm。

客厅、餐厅、卧室,是软装家具摆放的主要场所,如果你不先了解这些尺寸,买回的家具很可能因尺寸问题而退货。

想不踩坑,建议收藏、参考!

转自:https://zhuanlan.zhihu.com/p/225189518

暴富就是大风刮来的

1

很多朋友总是问我如何发财,有没有方法论。

一看就知道是新粉丝,我是从来不相信发财有方法论的。

财富,特别是所有人都渴求的巨额财富,是无法靠个人能力获取的。

如果想听大白话的话,暴富就是大风刮来的。

你没看错。

历史上,包括现在,所有短时间获得大量财富的人,这些巨额的金钱,本质上都是大风刮来的,和个人能力有关,但不是那么有关。

是的,钱,就是大风刮来的。

2

首先要明确一点,我们这里说的钱,是巨额财富,是超出一般人工作所能获得的财富。

你能力强,收入高,月入十万;

你很节俭,会省钱,省出一套首付。

这些很棒,但不属于我这里说的暴富。

我们讨论的暴富是巨额金钱,是一般人工作一辈子都赚不到的钱,可以实现绝大多数人财富自由的钱,你也可以说是“暴富”。

绝大多数的暴富,其本质来源都是“时运”。

对,连“选择”都不是,而是“被动选择”,时运带来的。

讲几个身边人的例子。

我有一个朋友,从事投资。

毕业第一年,进了一家烧投资人钱的公司,变着法烧钱,年底投资人看他比较惨,给了他30万,然后他因为某种奇怪的信仰,买了腾讯股票,30万变成了180万。

又因为某种奇怪的信仰,他把所有资产加了几倍杠杆买了北京2套房,现在财富自由了。

你可以说他可能有着金融人的本能,但接下来这个例子,就完全相反了。

我二婶,原本家境普通,某天一个骗子来我们山东行骗。

我二婶被骗子口中的国家大政策迷得五迷三道的,觉得有道理,但她没有上当,而是想自己干。

于是掏出了地图,让我二叔去承包了那一堆荒地,然后,拆迁了。

暴富之后的二婶没有放弃自己叱咤商场的梦想,又开始研究政策,然后又承包了一片地区建厂,打算做生意。

然后,又拆迁了。

双重暴富的二婶依旧在顽强的追随着自己的商业梦想,而她的钱包赔到现在依然没有赔光。

回看这2个案例,你会发现他们做的选择在当时毫无道理可言,有的甚至完全是逆向操作。

但钱就是这么来了,来得毫无道理。

如果你说最近,狗狗币的事情大家也都看到了吧,就是没有道理。

一个每一步都错到荒诞的选择,因为黑天鹅的到来,突然就成了命运之子,又叫人在家中坐,馅饼天上来。

3

我知道肯定会有很多人拿各种商业大佬的案例来反驳我。

但问题是,你有没有看到那些成功的大佬,他们成功的“基础”。

就拿巴菲特来说,人家是很强,但是别忘了他出生在30年代的美国,成长于美国的高速发展期,父亲本身就是一个金融大佬而且还是当地唯一一名国民议员。

许多强调自己有多牛叉多努力的大佬,只要你去认真的扒一下他们人生的过往经历,你会发现其实早在投胎那一刻,他们就已经完成了自身资本的原始积累,投胎就是第一阵风。

而即便是这些投对胎的大佬,又有多少能活下来?

又有多少强人做对了选择,最后依然成为了时代的背景?

多少人很早就看对了方向,但最终落寞?

多少成功的翻盘其实是误打误撞?

我就简单点说,共享单车,为什么最后是第三哈啰起来了?

是因为OFO在要拿滴滴的钱的那一瞬间,顺风车死人了,滴滴啥都不敢操作了。

然后就是雪崩,摩拜也信心不足。

即使到今天,哈啰依然不敢说稳赢,美团和滴滴又杀了出来。

很多成功自然有能力上的强大,但少不了的是命运的垂青。

我认为真正的白手起家的大佬,其实就是刘强东和雷军这种穷苦出身一步一步爬上顶层的普通人。

但即便是刘强东依然少不了前女友的帮助,即便是雷军依然少不了求伯君的赏识。

你说他们有能力必然有人赏识。

真的吗?

真的吗?

真的吗?

千里马常有,而伯乐不常有。

金子会发光不假,但金子也要有人主动淘,也要有人听说有金矿在才会有人主动去挖。

就像我现在做内容一样,能写好稿子人的多不多?

肯定多,比我写的好的人一定多不胜数。

但很多人就是在一家公司里做着普普通通的工作,拿着普普通通的月薪,偶尔写一篇文章聊以自乐。

但就有那么几个,偶然写出的文章,被我或者其他的内容公司的人看到了,于是有了第一次合作,从此走上创作者的道路,人生因此顺遂了不少。

像我这个小作坊里,就有一些创作者之前做的工作跟内容几乎毫不搭边,就是平时写写文章娱乐自己,但赚不到一分钱。

但有一天,他脑子一抽把这文章发了朋友圈,又非常恰巧的被我看到,然后就被我找过来了。

除了少数幸运儿,有多少人才华横溢依然默默无闻?

不计其数。

你看见的,是他们成功后的必然,没看见的,是他们成功中的偶然。

偶然的投对了胎,偶然的做了个当时不一定正确的选择,偶然的被他人赏识,偶然的遇到了不可抗力因素。

然后他们就被你们看到了。

时来天地皆同力,运去英雄不自由。

英雄本身就是时运的产物。

4

无数人被那些大佬的成功人生折服,无数人疯狂的追求着成功者的秘籍,追求着那些高利润产业的财富密码。

但财富密码的存在本身就是一个悖论。

第一个给挖矿人卖水的人能够暴富,剩下过来卖水的人会把卖水这个生意卷成低利润的劳力工作。

规律一旦被掌握,规律就会被改变。

所有的财富密码都是如此。

财富密码的本质只有两种。

第一种是,我知道,你不知道,是信息差。

大家资源条件都相同,但我掌握了信息差,我知道去哪卖水能赚钱,我知道其他人需要什么,我知道哪个需求被市场忽略了,我能用同样的钱创造好几倍的收益。

但信息差一旦被大多数人掌握,就会迅速的被抹平,一个产业的高利润大多数建立在“分钱的人少”以及“用户没得选”的基础上。

大量竞争者的涌入,用户有的选,利润被瓜分,暴富就无从谈起。

第二种是,我有你没有,是资源差。

都知道收租最好赚钱,但我能买几栋楼去收租,你不能。

资源差建立的基础是马太效应,是你知道这东西赚钱,但你做不到,而我知道同时我能做到,于是富者越富,穷者越穷。

所以,所有的财富密码凡是能让你赚到钱的,你大概率不知道,因为普通人一旦知道了就证明这个信息差已经不存在了;

而所有你知道的且依然能赚钱的,你做不到,因为如果随便一个人都能赚到,那别人凭什么能赚钱?

而且这些人普遍已经有了最开始的财富积累,这些钱只是让他们“更富”而不是“暴富”。

在这种情况下,所有能暴富的人,都是第一个掌握财富密码的人。

而这些真正掌握财富密码的人,无一不是上天眷顾的天选之子,命运垂青的幸运儿。

或许只是灵光一现,或许只是突然联想到,于是就赚到了。

这偶然中的偶然,没人知道这事能不能成,没人知道做了会怎么样。

万分之一的概率,他们赌了一把,然后成了。

这个灵光一闪,就是他们的风。

而事实上,每一次你灵光一闪的时候,世界上都有无数人跟着你同时在闪。

我以前一直想做一个用手指就能操作的手机,知道看到乔布斯拿着iPhone出来,我就知道,这人不止脑袋闪,脑子里面也在闪,还跟我闪到一块去了。

5

你以为我要给你新鸡汤了吗?

并不是。

我说了,暴富是大风刮来的偶然事件,我们无法追逐。

但是。

胜利从来都有2条路,一条是你干掉了所有人,一条是你啥都没做,别人作死了。

例如你今年没有买基金,收益是0,已经干掉了大所数人。

我的意思是,钱虽然是大风刮来的,钱也有可能被大风刮走。

我在网上看到许多人会崇拜网上炫富、挥金如土的富二代,我不明白有什么好崇拜的。

你图他的钱我特别能理解,你崇拜他的人我就不太理解了。

因为富二代的钱和他的人根本毫无关系,甚至他这个人还自带掉钱属性。

无数富二代靠投胎刮来的钱,最后都靠实力给败掉了。

而且富二代们败掉的钱,还不是败在吃喝玩乐上,而是败在正经事上面。

我见过许多富二代,总想要证明自己,总想说自己不靠父母,自己要摘掉身上的纨绔子弟光环,认真去投资,去做生意,最后赔的一毛都不剩。

最守得住钱的富二代,恰恰是纨绔富二代,吃喝玩乐的赔的哪有投资做生意多?

很多人拆迁暴富之后,还去追求成功,追求上进,但他们没搞清楚的是,拆迁给了他们钱,但没给他们能力。

与财富不匹配的能力,会导致财富流失。

甚至于无数强人、大佬大风刮来的钱,都被大风刮走。

你敢说你比大佬还大佬?

暴富很多时候不需要能力,能够守住财富才是能力。

所以商业大佬有值得借鉴的点,但我们应该借鉴的是他们“守业”上的成功,他们让资产“增值”的能力,而不是什么靠卖瓶子、捡瓶盖、开饭馆赚得第一桶金这种无脑鸡汤故事。

用一句经典的话来总结。

靠运气挣的钱,凭本事输光。

6

说到底,成功是有偶然性的,暴富也从来都没有方法论,不要去总结为什么成功,因为你永远不知道下一个成功为什么成功。

但既然成功如此不可追寻,我们平常所说的自律、低消费是不是也没有意义?是不是只要今朝有酒今朝醉,等着暴富送上门?

不,暴富始终是小概率事件,我们日常所说的自律,以及我经常说的少消费,本质上是一种兜底策略。

正因为暴富是小概率事件,我们更应该做自己力所能及的事前,不犯错,低成本,追求“小富”。

这是一条高成功率但低上限的路径,在这条路径上,你能小富,但最多也只能小富。

想要小富,那就做好当前的一切,想要暴富,那就等风来。

这股风可能永远不会来,可能明天就来,也可能带你起飞又将你高空抛下。

用暴富明天就来去期待和播撒。

用暴富永远都不回来去生活。

别想着暴富了,好好想

转自:https://mp.weixin.qq.com/s/hCPgwyvTaOsrAiGXzvCXMA