毕业十年后,“我”创立了自己的品牌
✨王群静JOE WANG
马兰戈尼(米兰)奢侈品管理硕士学位
Atypic Edition返常联合创始人
✨Joe曾就职于10 Corso Como(欧时力母公司赫基国际集团)负责艺术策展项目,后加入创意媒体团队UNDEF/NE(上海众社文化传播有限公司)担任PR&Maketing Manger,活跃于创新、艺术、设计与时尚领域。后加入BROWNIE (上海尚照电⼦商务有限公司),负责PR及所有自营电商平台&渠道及落地项目,拥有广泛的媒体和品牌资源,及多方位的电商运营能力,后活跃在金融/艺术/咖啡领域。
✨现任国内新锐艺术香氛品牌Atypic Edition/返常联合创始人之一,主要负责线上渠道及品牌合作对接。
✨她参与创立的年轻品牌 Atypic Edition 返常,已经获得了相当的关注,在热闹纷呈的国货香氛市场中拥有一席之地。在她的身上,我们看到了一个由理性思维引导的、热爱生活和艺术设计的实践家。
#AtypicEdition返常[话题]##小众香水[话题]##笔记灵感[话题]##创业历程[话题]##品牌[话题]##奢侈品品牌管理[话题]#
✨王群静JOE WANG
马兰戈尼(米兰)奢侈品管理硕士学位
Atypic Edition返常联合创始人
✨Joe曾就职于10 Corso Como(欧时力母公司赫基国际集团)负责艺术策展项目,后加入创意媒体团队UNDEF/NE(上海众社文化传播有限公司)担任PR&Maketing Manger,活跃于创新、艺术、设计与时尚领域。后加入BROWNIE (上海尚照电⼦商务有限公司),负责PR及所有自营电商平台&渠道及落地项目,拥有广泛的媒体和品牌资源,及多方位的电商运营能力,后活跃在金融/艺术/咖啡领域。
✨现任国内新锐艺术香氛品牌Atypic Edition/返常联合创始人之一,主要负责线上渠道及品牌合作对接。
✨她参与创立的年轻品牌 Atypic Edition 返常,已经获得了相当的关注,在热闹纷呈的国货香氛市场中拥有一席之地。在她的身上,我们看到了一个由理性思维引导的、热爱生活和艺术设计的实践家。
#AtypicEdition返常[话题]##小众香水[话题]##笔记灵感[话题]##创业历程[话题]##品牌[话题]##奢侈品品牌管理[话题]#
Python中对切片赋值原理分析
有这么个问题:
t = [1, 2, 3]
t[1:1] = [7]
print t # 输出 [1, 7, 2, 3]
谁会对列表这么进行赋值呢?但是对于这个输出结果的原因确实值得去再了解下,今天看看Python的源码,了解下原理是什么。
注:本地下载的是Python2.7.6的代码,直接看这个。
在Objects/listobject.c中有一个 PyList_SetSlice 函数,是这么写的::
int
PyList_SetSlice(PyObject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
{
if (!PyList_Check(a)) {
PyErr_BadInternalCall();
return -1;
}
return list_ass_slice((PyListObject *)a, ilow, ihigh, v);
}
有用的一句就是 list_ass_slice ,那么再来看看这个函数的代码:
static int
list_ass_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
{
/* Because [X]DECREF can recursively invoke list operations on
this list, we must postpone all [X]DECREF activity until
after the list is back in its canonical shape. Therefore
we must allocate an additional array, 'recycle', into which
we temporarily copy the items that are deleted from the
list. :-( */
PyObject *recycle_on_stack[8];
PyObject **recycle = recycle_on_stack; /* will allocate more if needed */
PyObject **item;
PyObject **vitem = NULL;
PyObject *v_as_SF = NULL; /* PySequence_Fast(v) */
Py_ssize_t n; /* # of elements in replacement list */
Py_ssize_t norig; /* # of elements in list getting replaced */
Py_ssize_t d; /* Change in size */
Py_ssize_t k;
size_t s;
int result = -1;/* guilty until proved innocent */
#define b ((PyListObject *)v)
if (v == NULL)
n = 0;
else {
if (a == b) {
/* Special case "a[i:j] = a" -- copy b first */
v = list_slice(b, 0, Py_SIZE(b));
if (v == NULL)
return result;
result = list_ass_slice(a, ilow, ihigh, v);
Py_DECREF(v);
return result;
}
v_as_SF = PySequence_Fast(v, "can only assign an iterable");
if(v_as_SF == NULL)
goto Error;
/*
要赋值的长度n
*/
n = PySequence_Fast_GET_SIZE(v_as_SF);
vitem = PySequence_Fast_ITEMS(v_as_SF);
}
if (ilow < 0)
ilow = 0;
else if (ilow > Py_SIZE(a))
ilow = Py_SIZE(a);
if (ihigh < ilow)
ihigh = ilow;
else if (ihigh > Py_SIZE(a))
ihigh = Py_SIZE(a);
norig = ihigh - ilow;
assert(norig >= 0);
d = n - norig;
if (Py_SIZE(a) + d == 0) {
Py_XDECREF(v_as_SF);
return list_clear(a);
}
item = a->ob_item;
/* recycle the items that we are about to remove */
s = norig * sizeof(PyObject *);
if (s > sizeof(recycle_on_stack)) {
recycle = (PyObject **)PyMem_MALLOC(s);
if (recycle == NULL) {
PyErr_NoMemory();
goto Error;
}
}
memcpy(recycle, &item[ilow], s);
if (d < 0) { /* Delete -d items */
memmove(&item[ihigh+d], &item[ihigh],
(Py_SIZE(a) - ihigh)*sizeof(PyObject *));
list_resize(a, Py_SIZE(a) + d);
item = a->ob_item;
}
else if (d > 0) { /* Insert d items */
k = Py_SIZE(a);
if (list_resize(a, k+d) < 0)
goto Error;
item = a->ob_item;
printf("关键点\n");
/*
把list对应切片后一位的值之后的所有内容向后移动所赋值的大小
按照上面的python代码这里就是
原理的t:
|1|2|3|
后移一位,因为len([7]) = 1
|1|空|2|3|把后两个移位
*/
memmove(&item[ihigh+d], &item[ihigh],
(k - ihigh)*sizeof(PyObject *));
}
/*
赋值操作,即把[7]赋值到t里的对应位置上
ilow是1, n是1
*/
for (k = 0; k < n; k++, ilow++) {
PyObject *w = vitem[k];
Py_XINCREF(w);
item[ilow] = w;
}
for (k = norig - 1; k >= 0; --k)
Py_XDECREF(recycle[k]);
result = 0;
Error:
if (recycle != recycle_on_stack)
PyMem_FREE(recycle);
Py_XDECREF(v_as_SF);
return result;
#undef b
}
有这么个问题:
t = [1, 2, 3]
t[1:1] = [7]
print t # 输出 [1, 7, 2, 3]
谁会对列表这么进行赋值呢?但是对于这个输出结果的原因确实值得去再了解下,今天看看Python的源码,了解下原理是什么。
注:本地下载的是Python2.7.6的代码,直接看这个。
在Objects/listobject.c中有一个 PyList_SetSlice 函数,是这么写的::
int
PyList_SetSlice(PyObject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
{
if (!PyList_Check(a)) {
PyErr_BadInternalCall();
return -1;
}
return list_ass_slice((PyListObject *)a, ilow, ihigh, v);
}
有用的一句就是 list_ass_slice ,那么再来看看这个函数的代码:
static int
list_ass_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
{
/* Because [X]DECREF can recursively invoke list operations on
this list, we must postpone all [X]DECREF activity until
after the list is back in its canonical shape. Therefore
we must allocate an additional array, 'recycle', into which
we temporarily copy the items that are deleted from the
list. :-( */
PyObject *recycle_on_stack[8];
PyObject **recycle = recycle_on_stack; /* will allocate more if needed */
PyObject **item;
PyObject **vitem = NULL;
PyObject *v_as_SF = NULL; /* PySequence_Fast(v) */
Py_ssize_t n; /* # of elements in replacement list */
Py_ssize_t norig; /* # of elements in list getting replaced */
Py_ssize_t d; /* Change in size */
Py_ssize_t k;
size_t s;
int result = -1;/* guilty until proved innocent */
#define b ((PyListObject *)v)
if (v == NULL)
n = 0;
else {
if (a == b) {
/* Special case "a[i:j] = a" -- copy b first */
v = list_slice(b, 0, Py_SIZE(b));
if (v == NULL)
return result;
result = list_ass_slice(a, ilow, ihigh, v);
Py_DECREF(v);
return result;
}
v_as_SF = PySequence_Fast(v, "can only assign an iterable");
if(v_as_SF == NULL)
goto Error;
/*
要赋值的长度n
*/
n = PySequence_Fast_GET_SIZE(v_as_SF);
vitem = PySequence_Fast_ITEMS(v_as_SF);
}
if (ilow < 0)
ilow = 0;
else if (ilow > Py_SIZE(a))
ilow = Py_SIZE(a);
if (ihigh < ilow)
ihigh = ilow;
else if (ihigh > Py_SIZE(a))
ihigh = Py_SIZE(a);
norig = ihigh - ilow;
assert(norig >= 0);
d = n - norig;
if (Py_SIZE(a) + d == 0) {
Py_XDECREF(v_as_SF);
return list_clear(a);
}
item = a->ob_item;
/* recycle the items that we are about to remove */
s = norig * sizeof(PyObject *);
if (s > sizeof(recycle_on_stack)) {
recycle = (PyObject **)PyMem_MALLOC(s);
if (recycle == NULL) {
PyErr_NoMemory();
goto Error;
}
}
memcpy(recycle, &item[ilow], s);
if (d < 0) { /* Delete -d items */
memmove(&item[ihigh+d], &item[ihigh],
(Py_SIZE(a) - ihigh)*sizeof(PyObject *));
list_resize(a, Py_SIZE(a) + d);
item = a->ob_item;
}
else if (d > 0) { /* Insert d items */
k = Py_SIZE(a);
if (list_resize(a, k+d) < 0)
goto Error;
item = a->ob_item;
printf("关键点\n");
/*
把list对应切片后一位的值之后的所有内容向后移动所赋值的大小
按照上面的python代码这里就是
原理的t:
|1|2|3|
后移一位,因为len([7]) = 1
|1|空|2|3|把后两个移位
*/
memmove(&item[ihigh+d], &item[ihigh],
(k - ihigh)*sizeof(PyObject *));
}
/*
赋值操作,即把[7]赋值到t里的对应位置上
ilow是1, n是1
*/
for (k = 0; k < n; k++, ilow++) {
PyObject *w = vitem[k];
Py_XINCREF(w);
item[ilow] = w;
}
for (k = norig - 1; k >= 0; --k)
Py_XDECREF(recycle[k]);
result = 0;
Error:
if (recycle != recycle_on_stack)
PyMem_FREE(recycle);
Py_XDECREF(v_as_SF);
return result;
#undef b
}
#马兰戈尼# 校园开放日|从时尚买手到香氛品牌创始人
1月7日下午3点,马兰戈尼校园开放日如约而至。
本次OPEN DAY 邀请到马兰戈尼(米兰)奢侈品管理硕士优秀毕业生,同时也是中国#艺术# 香氛品牌「Atypic Edition/返常」联合创始人之一的王群静JOE WANG,独家分享#时尚行业# 的工作经验与如何一步步推出「Atypic Edition/返常」的#创业# 历程。
JOE 从马兰戈尼#米兰# 校区毕业并获得奢侈品管理#硕士# 学位后加入10 Corso Como,负责#艺术策展# 项目。后又加入创意媒体团队UNDEF/NE,BROWNIE等担任PR&Maketing Manger,活跃于#创新# 、艺术、#设计# 与时尚领域。
2020年创立「Atypic Edition/返常」中国艺术香氛品牌,旨在以气味为线索探索生活中的“非比寻常(Atypic Moment)”,并将这些瞬间的质感「出版」在每一期#香氛# 系列中。
带上口罩之后,“口红经济”哑火,“香水经济”井喷。近年来,我国香水市场份额进一步扩大,香水消费增速明显。在前有Chanel Dior这种成功商业香氛后有配枪朱丽叶等海外小众香氛“前后夹击”的情况下,JOE是如何抓住新一代 Gen Z消费者,打造出香氛中的#艺术杂志# 的呢?
1月7日下午3点,点击图片,扫码报名参加马兰戈尼校园开放日,与JOE面对面,独家分享时尚行业的工作和创业经验。
#马兰戈尼##时装设计##时尚设计##奢侈品##香氛##生活方式# https://t.cn/A6Gkg048
1月7日下午3点,马兰戈尼校园开放日如约而至。
本次OPEN DAY 邀请到马兰戈尼(米兰)奢侈品管理硕士优秀毕业生,同时也是中国#艺术# 香氛品牌「Atypic Edition/返常」联合创始人之一的王群静JOE WANG,独家分享#时尚行业# 的工作经验与如何一步步推出「Atypic Edition/返常」的#创业# 历程。
JOE 从马兰戈尼#米兰# 校区毕业并获得奢侈品管理#硕士# 学位后加入10 Corso Como,负责#艺术策展# 项目。后又加入创意媒体团队UNDEF/NE,BROWNIE等担任PR&Maketing Manger,活跃于#创新# 、艺术、#设计# 与时尚领域。
2020年创立「Atypic Edition/返常」中国艺术香氛品牌,旨在以气味为线索探索生活中的“非比寻常(Atypic Moment)”,并将这些瞬间的质感「出版」在每一期#香氛# 系列中。
带上口罩之后,“口红经济”哑火,“香水经济”井喷。近年来,我国香水市场份额进一步扩大,香水消费增速明显。在前有Chanel Dior这种成功商业香氛后有配枪朱丽叶等海外小众香氛“前后夹击”的情况下,JOE是如何抓住新一代 Gen Z消费者,打造出香氛中的#艺术杂志# 的呢?
1月7日下午3点,点击图片,扫码报名参加马兰戈尼校园开放日,与JOE面对面,独家分享时尚行业的工作和创业经验。
#马兰戈尼##时装设计##时尚设计##奢侈品##香氛##生活方式# https://t.cn/A6Gkg048
✋热门推荐