python的redis操作(3)之set(集合)

󰃭 2016-04-13

导读 redis 的set(集合) 这种数据结构可以保存一个无序列表, 其中的元素不会重复,对其中的每个元素的add和remove的时间复杂度都是O(1), 即在常量时间内完成, 以下是python对redis的set的操作说明 准备 import redis r_con = redis.Redis("127.0.0.1",6379) sadd 像某个key的set中添加元素 r_con.sadd("names", "tony") #1 r_con.sadd("names", "tony") #0 r_con.sadd("names", "wang") #1 如果添加成功, 则返回1, 添加已存在的数据的时候返回0 smembers 返回key的集合列表 r_con.smembers("names") #{'tony', 'wang'} 返回的数据也是python的set的数据结构 scard 返回某个key的set的元素数量 r_con.scard("names") #2 r_con.scard("t") #0 sismember 返回value是否存在于key的set中 r_con.sismember("names", "Tony") #False r_con.sismember("names", "tony") #True spop 从key的set中随机移除一个value并返回该value r_con.sadd("names", "Yi_Zhi_Yu") #1 r_con.sadd("names", "one fisher") #1 r_con.smembers("names") #{'Yi_Zhi_Yu', 'one fisher', 'tony', 'wang'} r_con.spop("names") # wang r_con.spop("names") # Yi_Zhi_Yu r_con.smembers("names") #{'one fisher', 'tony'} r_con.

Continue reading 


python的redis操作(2)之set(集合)

󰃭 2016-04-13

导读 redis 的set(集合) 这种数据结构可以保存一个无序列表, 其中的元素不会重复,对其中的每个元素的add和remove的时间复杂度都是O(1), 即在常量时间内完成, 以下是python对redis的set的操作说明 准备 import redis r_con = redis.Redis("127.0.0.1",6379) sadd 像某个key的set中添加元素 r_con.sadd("names", "tony") #1 r_con.sadd("names", "tony") #0 r_con.sadd("names", "wang") #1 如果添加成功, 则返回1, 添加已存在的数据的时候返回0 smembers 返回key的集合列表 r_con.smembers("names") #{'tony', 'wang'} 返回的数据也是python的set的数据结构 scard 返回某个key的set的元素数量 r_con.scard("names") #2 r_con.scard("t") #0 sismember 返回value是否存在于key的set中 r_con.sismember("names", "Tony") #False r_con.sismember("names", "tony") #True spop 从key的set中随机移除一个value并返回该value r_con.sadd("names", "Yi_Zhi_Yu") #1 r_con.sadd("names", "one fisher") #1 r_con.smembers("names") #{'Yi_Zhi_Yu', 'one fisher', 'tony', 'wang'} r_con.spop("names") # wang r_con.spop("names") # Yi_Zhi_Yu r_con.smembers("names") #{'one fisher', 'tony'} r_con.

Continue reading 


造成第一杯水怎么喝?

󰃭 2016-04-13

#由来 早晨起床以后,空腹喝一杯水是许多养生专家和营养师都很推崇的健康生活方式。早晨起床后的第一杯水因此也被称为“排毒水”、“健康水”、“美容水”。不过,这第一杯水怎么喝,喝什么水,不同的人也会给出迥异的答案,仅对于喝什么水这个问题,蜂蜜水、白开水、淡盐水就都有各自的拥趸。至于其他有关第一杯水的说法更是五花八门。大家有时间的话可以阅读下《早晨第一杯水》,这本书不仅是改善病体重要指导书,也可以借此反省生活饮食的种种缺失,以第一杯水为起点,循序渐进,由简入繁,逐步体验自然养生的奥妙神奇。健康的肌体必须保持水分的平衡,人在一天中应该饮用7-8杯水。“一日之计在于晨”,清晨的第一杯水尤其显得重要。早上醒来时喝杯水是最好的了,既美容又补充了水分,大概一杯左右,温水,刚开始喝可能有些不适应,习惯就好,保持这个习惯对身体健康也有好处,长久喝下去,保证你的皮肤细腻亮白。 经过一夜的睡眠,人体会从呼吸、皮肤、尿液中消耗大量水分,处于缺水状态。因此,清晨第一杯水就显得尤为重要,不仅能有效补水,还可以调节肠胃、清扫体内环境。别看早起喝水是件小事,未必每个人都知道怎么喝才健康。 ##以下几种饮品就要谨慎选择 碳酸饮料 碳酸饮料除了不能提供早起人体所需要的水分,在代谢中还会加速钙的排出,以及增加机体对水分的需求,早晨最好不要喝,长期饮用会导致缺钙。 冰水 喝冰水的人很容易感冒、咳嗽、声哑,冰气一旦因「呛伤」而逼入肺经八卦或膻中大穴,那就麻烦了,全身的循环系统因而阻塞,所以,喝冰水可能引起百种以上的病症,您能不小心吗? 隔夜茶 冲泡好的绿茶等若放置时间过久,其中微量的氨基酸、糖类等物质会成为细菌、霉菌滋生的养分,茶水中所含的茶多酚、维生素等营养成分也会因放置时间过久,而发生氧化反应,导致茶水中所含的抗氧化成分下降,令其营养和保健价值大打折扣。因此,起床后,昨晚泡的茶不宜继续喝。 久置的开水 开水久置以后,其中含氮的有机物会不断被分解成亚硝酸盐。饮用这样的水后亚硝酸盐和血红蛋白结合,会影响血液的运氧功能。 盐水 淡盐水之所以被人们用作清晨第一杯水,主要因为其能缓解便秘,在首都医科大学附属北京友谊医院营养科主任洪忠新看来,治疗便秘光靠喝水是解决不了的,而是要通过饮食的合理调整。现代人钠摄入量本来就过多,在身体不缺少盐的情况下再喝淡盐水,会增加盐的摄入,反而让人觉得口干舌燥。有高血压、心脑血管疾病、肾功能异常的人更不要将淡盐水作为起床后的第一杯水,因为早晨是人体血压升高的第一个高峰,喝盐水会使血压更高。 蜂蜜水 有人认为早起喝一杯蜂蜜水有利于缓解便秘,但空腹喝并不适合。“蜂蜜中含有大量果糖和葡萄糖,会升高血糖,冲击食欲,影响早餐摄入。”洪忠新说。另外,蜂蜜中的果糖要经过代谢转化为葡萄糖才能被人体吸收利用,这样就失去了清晨第一杯水清扫体内废弃物的作用,蜂蜜的营养物质也不能被有效吸收。因此,起床后不要空腹喝蜂蜜水,可以先喝一杯温白开水,十分钟之后再喝蜂蜜水,也可以把蜂蜜作为早餐,抹在面包上一起吃。 果汁 不少女性喜欢晨起喝一杯鲜榨果汁养颜,这种做法并不可取。一是因为果汁偏甜,空腹喝会冲击食欲,吃不下早餐。二是人体喜欢温暖的环境,尤其是早晨,如果吃了凉东西,会刺激肠胃,影响消化吸收。 因此, “温白开水是清晨第一杯的最佳选择。”

Continue reading 


推荐给设计师的10个网站

󰃭 2016-04-13

#国内版 建筑学院(http://www.archcollege.com) 国内最大最受喜爱的建筑师移动垂直社区,拥有APP、网站、微信、微博四个入口,16万用户。目前APP的最新版本是3.0,体验方面都不错,用户定位很明确,值得推荐。 中国建筑报道网(http://www.archreport.com.cn) 隶属于《城市·环境·设计》(UED)杂志社,扎根中国本土文化、坚持国际视野,及时发布全球建筑行业资讯,着重关注优秀建筑师的作品与思想,高效传播富有创意的高品质项目案例,深度剖析建筑与城市、环境、人的复杂关系,积极引领建筑设计的新思潮,着力打造最具行业和国际影响力的建筑专业网站。现面向广大优秀青年建筑师、设计师广泛征稿,有意向的设计师小伙伴可以随时应征哦!!! 花瓣网(http://huaban.com) 到底什么是花瓣网呢?你可以把每一个喜欢的东西采集到花瓣,比如一张图片、一个视频或者整张网页截图。在需要的时候,随时随地查看它们。你可以根据自己的喜好创建不同种类的画板,然后把采集放进去。那些最棒的画板,都有一个明确的主题。尝试用琳琅满目的画板,分享不同的创意与兴趣等等。花瓣网的客户端有Android,iPhone,iPad三个版本,不同的用户大家都可以体验。第一次进入花瓣就感觉是一个设计师聚集的社交圈。 批给屋(http://www.pgive.com) 致力于建筑学生交流与建筑资料共享平台建设,逐渐成为国内建筑高校在校学生和各大建筑设计院建筑设计师每天必上的论坛。目前已经有11万用户正在转型为设计类图片社交平台。 旅设网(http://www.lvshedesign.com) 一个将帮助设计师朝着大神之路打怪升级,诚实设计,设计成实。在保持最初使命的同时,调整方式,完成“以设计影响社会”到“以作品、产品、商品影响社会”的升级。 #海外版 Pinterest(https://www.pinterest.com) 堪称图片版的Twitter,网民可以将感兴趣的图片在Pinterest保存,其他网友可以关注,也可以转发图片。索尼等许多公司也在Pinterest建立了主页,用图片营销旗下的产品和服务。听说还有APP(⊙o⊙)哦。 The Stocks(http://thestocks.im) 一个高清大图图库,不用翻墙(⊙o⊙)哦。 TinEye(http://tineye.com) 一个图片搜索引擎。 500px(https://500px.com) 最出色的摄影社区,在这里能发现全球最好的风景照。 topicimages(http://www.topicimages.com) 韩国TopicImages摄影图库平台是韩国的一个优秀的摄影图供应商,成立于1992年;拥有数十万的世界各地摄影师为其提供高质量的摄影图片素材,用户可以购买中意的图片也可以为其提供优秀的图片资源。

Continue reading 


日本夏普新机型AQUOS ZETA SH-01H

󰃭 2016-04-13

##简介 目前SoftBank和DoCoMo都已经发布了冬春季的新机阵容,而au by KDDI目前仅仅公布了一款冬季机型,先来聊聊DoCoMo冬春新品中已经上市发售的夏普AQUOZ ZETA SH-01H,此机型一共有三种亚瑟。先来看下SH-01H的整体配置,这一机型采用了5.3英寸1080p显示屏,屏幕当然还是夏普自家的IGZO。IGZO面板技术则是铟(Indium)、镓(Gallium)、锌(Zinc)、氧(Oxygen)四种化学元素的英文首字母缩写,也就是“铟镓锌氧化物”的的意思,是用于新一代薄膜晶体管技术中的沟道层材料。利用IGZO技术可以使显示屏功耗接近OLED,但成本更低,厚度也只比OLED只高出25%,且分辨率可以达到全高清(full HD)乃至超高清(Ultra Definition,分辨率4k*2k)级别程度。但是当夏普跟富士康完成合并之后,郭台铭表示未来夏普的显示屏幕产量中,OLED将会占到四成,IGZO屏幕将会占到四成。郭台铭还表示,从个人角度更加青睐IGZO技术,而不是目前风靡一时的OLED。 ###相关配置 SH-01H机内搭载骁龙808六核处理器,辅以3GB RAM及32GB ROM,预装Android 5.1系统。夏普这一次在前置摄像头方面进行了全新的尝试,终于将其提升至800万像素。而后置摄像头则仍旧是1300万像素的常见配置,可以拍摄4K视频。SH-01H有几个亮点,首先其搭载了120Hz驱动的高速IGZO显示屏,结合色彩表现出众的S-PureLED,能够给用户带来顺畅艳丽的视觉观感。同时,原本就非常省电的IGZO屏幕搭配手机自身的省电模式,也能保证SH-01H拥有不错的续航表现。而作为DoCoMo的合约机型,SH-01H也能够支持DoCoMo的PREMIUM 4G网络,最大下行速率柯达300Mbps。系统运行Android 5.1,有兴趣的小伙伴可以去淘宝逛逛。

Continue reading 


日语单词之日本药妆相关

󰃭 2016-04-13

##概要 随着现在日元兑换人民币史上最低期,去日本旅游购物更合算了。现在大家去日本购物少不了买化妆品,买给女朋友,买给老婆。。。如今很多MM都非常热衷去日本购物,对大家来说,药妆店是必定不能错过的购物地点。日本的药妆店遍布大街小巷,甚至有超过便利店的趋势。那到了药妆店如果会几个日语单词那买起东西来更能准确得找到想要东西,因为你可以问店员,他们会第一时间带你到你想要的东西的面前,日本服务真的只有靠你自己去体会了。从今天开始我们就来学习吧: シャンプー (洗发水) リンス (护发素) 洗顔料 (洗面乳) ローション (化妆水) けしょうすい (化妆水) フレッシュナー;収れん化粧水(爽肤水) クリーム (乳霜) にゅうえき (乳液) ナイトクリム (晚霜) エッセンス (精华液) エクスフォリエイター(去角质) デイクリーム (隔离霜) パック;マスク (面膜) ルージュ (口红) グロス (液态的唇彩) くちべに (唇膏是固态的那种) リップグロス (唇冻) あぶらとり紙 (吸油面纸) ファンデーション (粉底) 日やけ止め乳液 (防晒乳)

Continue reading 


浅谈如何提高精准查找资料的能力

󰃭 2016-04-13

###背景 以前做外包都是封闭式的工作,需要在工作中多问以及回家后上网查各种资料,一般加班到半夜已经没有心思再做任何和工作有关的事情。现在进入互联网公司,也在不知不觉中提高了查找资料的能力,几乎可以说:只有你想不到,没有你找不到的;如果你真的找不到,那是你还不够好不够专业。如果能快速找到你想要的资料那你的工作效率也大大提升。在这个互联网时代,效率就是关键,时间不等人,老板也不要任何你开发专研的过程,他要的只是 结果 。所以对于一名不输在起跑线上的你,如果却硬是输在查找资料的能力上那真是太亏了。 ####一些建议 先用百度,如果不行就通过VPN上Google。(这边包含搜到的论坛以及博客) 关于搜索,一般用比较精准的词和语言,不要用白话。不需要整句整句地问,一般尝试地拆开用关键词,有时一些搜索引擎也会有一些suggest之类的提示。如果搜索一次不够好,那就2次,3次,4次地重新组织关键词组合直到搜索到满意内容为止。特别是一些编程类等学术内容一定要用一些专业词必须是电脑明白的语言这样搜到的内容才精确多样。 通过微信公众号,QQ群。比如关注微信某订阅号他们会每天推送一些专业相关的信息还是蛮有参考和学习价值的,这边也推荐几个常用订阅号:“前端早读课”;“程序猿”;“光荣之路”。还有在QQ群,群主以及一些热心组员也会定时发送一些参考文件以及视频,有的是工作和学习中总结的思维导图,我觉得在QQ群里提问是最好的选择,真的会有个别小伙伴很认真的回答你的问题。 提高英语水平,我觉得现在很多资料,比如在github上基本上都是英语,如果你是纯中文,搜出来的内容也肯定有限。一些小语种,比如日语也是不错的选择。 多看书,提高自己的语言表达能力,理解能力,开阔自己的眼界。你的语言表达能力强,词汇丰富,自然而然用的关键字就精准有效。 有些资料可能会收费,你可以找淘宝,一些专业资料他们都会帮你收集好放在网盘。虽然要收一点费用,但是我觉得比你自己花时间到处找要来的方便,有的还要收费注册比较麻烦。时间就是金钱。但是这些资料比较偏基础入门,对专业的工程师以及设计师就不是太适用。

Continue reading 


绝对吊炸天的上海设计餐厅之一

󰃭 2016-04-13

#简介 “上海是我长大成人的所在,带着我所有的情怀,第一次干杯,头一回恋爱,在永远的纯真年代……”这首广告歌是70,80后小时候最爱的一首,唱出了很多在上海土生土长的小孩的心声。事实上,每一个在上海的人都有一个喜欢上海的理由,今天就开始介绍一家有上海特色的餐厅。 ##特色: 创新中餐,精致,美味,又不失传统。老牌饭店尝试做创新菜,开在锦江饭店旁,毗邻淮海路商业圈,距新天地步行仅10分钟,地理优越,环境优雅。吸引很多外国客人。当然也很适合约着家人朋友去怀旧,环境和隔壁老锦江很搭,低调的经典。 ###推荐菜: 锦庐甜品;龙虾三部曲;黄焖鱼翅;黑椒汁牛肋骨等。

Continue reading 


建筑设计奇迹之上海深坑酒店(全球人工海拔最低五星级酒店)

󰃭 2016-04-13

##建筑设计奇迹 随着建筑技术工艺的发展,设计师们的一些疯狂创意真的有机会从稿纸上走入现实世界。近日,位于上海市松江区的“深坑酒店”正在进行钢结构施工,将于7月底实现主体结构封顶。建设方预计,2017年底酒店可实现工程竣工并试营业。“深坑酒店”选址在旧矿场形成的深坑,世界上第一个建在废石坑里的,建成后酒店将拥有370间客房,包括地上两层、地下17层和水下两层。 ##简介 此建筑成为人类建筑设计理念的革命性创举,也成为当代最新科技与工程技术的结晶。美国国家地理频道《伟大工程巡礼》摄制组曾还在此举行隆重的开机仪式。从照片可以看出,“深坑酒店”所在之处犹如一个大型的断崖,但并非为全封闭地貌,不过还是有人担忧酒店的采光和通风环境。根据规划,酒店的370间客房都设有观景露台,可直接看到对面西北侧坑壁落差近百米、宽数十米的瀑布。瀑布旁,还有一个悬空玻璃观景平台,可俯瞰深坑全貌,体验人在景中游、人在画中走的奇妙感觉。对极限运动感兴趣者,还可玩一把蹦极等刺激的游乐项目,大家就尽情期待吧。

Continue reading 


独树一帜的酒吧(LONGJING)

󰃭 2016-04-13

#简介 在北京三里屯最少不了的就是喝酒的地方,但是“明月几时有,把酒问青天”,“花间一壶酒,独酌无相亲。举杯邀明月,对影成三人”的诗句不一定完全匹配这个地方,因为从他的酒吧名字我们大概可以看出一二。 “LONGJING”中文就是龙井,那显而易见就是和茶有关,说到茶就应该有中国茶的元素。老板是由四个志向道合,懂吃懂喝懂茶懂玩的合伙人组成,这边白天是茶馆,晚上是Lounge吧,每个合伙人都有自己负责的领域。工作人员都穿着中式对襟马褂,吧台上有放着各种紫砂的茶具,听说酒吧里面所有的餐具茶具都是他们自己找专人定做并且标有他们的LOGO并可以零售。听一位老外合伙人介绍他们的构思就是想让大家快乐,”服务第一钱第二“,作为一名有日本工作经验的人来说,日本是别人怎么方便自己就怎么做,中国是自己怎么方便自己就怎么做。所以现在有那么强服务意识地方还是历历可数的。 ###推荐: 金酒(日本烧酒)+顶级龙井

Continue reading 


程序员鼓励师您了解多少?

󰃭 2016-04-13

#程序员鼓励师的由来 目前程序员鼓励师成为越来越多互联网以及创业公司的热门急需职位,作为标准“颜值对程序员有足够的震撼力”是最主要的要素。据相关专业人士称:太漂亮的女孩子并不适宜担任程序员鼓励师,甚至会产生负作用。 之前在知乎上看到类似的招聘,好像是魅族的,原来还以为是一个笑话http://www.zhihu.com/question/29532078 ##程序员鼓励师到底是什么鬼 ##程序员鼓励师de月薪yiji条件 程序员初级鼓舞老师(5K~10K) 能卖萌,颜值高,善于倾听(听不听的懂没关系)。 程序员中级鼓舞老师(10K~20K) 能卖萌,颜值高,会沟通,善于倾听(听不听的懂没关系),帮忙跑腿(早餐,午餐,外卖帮忙跑腿等),懂科技。 程序员高级鼓舞老师(20K~40K) 能卖萌,颜值高,会沟通,帮忙跑腿(早餐,午餐,外卖帮忙跑腿等),气场强,心理辅导上有一定造诣,心淫而不荡。

Continue reading 


2015全球最佳餐厅之上海餐厅

󰃭 2016-04-13

#简介 英国权威美食杂志《餐厅(专题阅读)》刚刚在伦敦公布了《2015年全球最佳餐厅排行榜》,自2002年推出最佳餐厅评选以来,到2015年已经是第14年,虽然其在国内的知名度不如“米其林餐厅”, 但其由全球27个地区的食评家、厨师和餐饮行业专 家担任评委,其权威程度有过之而无不及。其中上海的上海的紫外光位列第24位,“福和慧”以及“福1015”分别位列榜单的第76位和第95位。 ###1.“紫外光” 感官餐厅紫外线”是保罗•派雷特在上海的第2家合资公司,其开业于2012年,甚至比Mr. and Mrs.Bund更加华丽。这里只有10个座位,餐厅周围是360度的电视屏幕,立体声的扬声器和头顶上高科技的灯光。 “紫外线”旨在提供给用餐者多感官的用餐体验。该餐厅坐落的很隐蔽,用餐者需在保罗•派雷特的官网上预定位置。 ###2.福和慧 它静静栖身于老洋房汇集的愚园路老街,名字来源于餐厅主人方元对福慧双修的理解。这家充满浓浓中式禅意,又简约时尚的素食餐厅,环境幽雅,又不造作,让人自然而然产生慢慢食素的愿望。 主厨卢怿明年纪虽轻,天赋极高,福和慧的烹饪手法,精彩程度不逊色米其林主厨套餐。 ###3.福1015 一家中西结合的本邦菜馆,餐厅位于上海长宁区愚园路1015号。中西结合的本邦菜,摆盘精致,口感留人,加上古式公馆建筑感觉确实不错,服务效率高。福1015,福系列继福1039、福1088后第三部巨作, 总投资过千万耗时一年有余打造出全上海最最牛的顶级会所,奢华的内装,精致的菜式,独一无二的品味,别具一格的细节。

Continue reading 


3大消脂水果强烈建议

󰃭 2016-04-13

#简介 互联网已成为名副其实的“富翁制造工厂”,网络人才将更加走俏,其中互联网工程师,设计师更是炙手可热,因此他们也十分忙碌,每天坐着敲代码该设计使他们都处于亚健康状态, 并且积压了一定的脂肪,经某互联网公司统计,公司里40%以上的85,90后员工都有轻度脂肪肝。 ###以下就介绍几种消脂水果: 1. 西红柿 番茄(Tomato),别名西红柿、洋柿子。古名六月柿、喜报三元。在秘鲁和墨西哥,最初称之为“狼桃”。全体生粘质腺毛,有强烈气味。茎易倒伏。 叶羽状复叶或羽状深裂,小叶极不规则,大小不等,卵形或矩圆形,边缘有不规则锯齿或裂片。 番茄是喜温、喜光性蔬菜,对土壤条件要求不太严格,但为获得丰产,促进根系良好发育,应选用土层深厚,排水良好,富含有机质的肥沃壤土。 原产南美洲,中国南北方广泛栽培。番茄营养丰富,具特殊风味,具有减肥瘦身、消除疲劳、增进食欲、提高对蛋白质的消化、减少胃胀食积等功效。番茄中含有丰富的维生素A、C及D,其酸性是由于柠檬酸及苹果酸所致。 番茄的营养价值极高,含多种维生素,比苹果、梨、香蕉、葡萄等都高出2—4倍。主要含维生素BI、维生素B2、磷和烟酸、胆碱、胡萝L素、苹果酸、柠檬酸、糖类、蛋白质、钙、铁和谷胱甘肽、番茄碱等。 番茄是番茄红素最丰富的食物来源,番茄红素具有很强的抗氧化活性。 番茄红素有以下药理作用。 2. 奇异果 奇异果(猕猴桃)含有丰富的维生素C、A、E以及钾、镁、纤维素之外,还含有其他水果比较少见的营养成分——叶酸、胡萝卜素、钙、黄体素、氨基酸、天然肌醇。 可强化免疫系统,促进伤口愈合和对铁质的吸收;它所富含的肌醇及氨基酸,可抑制抑郁症,补充脑力所消耗的营养;它的低钠高钾的完美比例,可补充熬夜加班所失去的体力。 对男性白领来说,奇异果更具有奇异的功效,它含有不少精氨酸,能促使血液循环顺畅,增进性能力。奇异果的钙含量是葡萄柚的2.7倍、苹果的17.5倍、香蕉的4倍,维生素C的含量是柳橙的2倍。 因此,它的营养价值远超过其他水果。对中老年人来说,几乎不含脂肪的奇异果所含的丰富果胶及维生素E,对心脏健康很有帮助,可降低胆固醇。对青少年和儿童来说,奇异果所含的精氨酸等氨基酸,能强化脑功能及促进生长激素的分泌。 最可贵的是,奇异果还含有其他水果中少见的镁。对爱美的女士来说,奇异果是最合适的减肥食品。因为它虽然营养丰富但热量极低,其特有的膳食纤维不但能够促进消化吸收,还可以令人产生饱腹感。 因此,奇异果是减肥与兼顾营养的最佳选择。尤其是最近刚刚上市的黄金奇异果,营养成分更胜从前,纤维素含量和水果纤维含量都很丰富,能增加分解脂肪酸素的速度,避免过剩脂肪让腿部变粗。 3 柠檬 别名:黎檬、黎檬子、黎朦子、宜母子、里木子、梨橡干、药果、檬子、梦子、宜蒙子、宜母果、柠果、黎檬干。禁忌人群:胃溃疡、胃酸分泌过多,患有龋齿者和糖尿病患者慎食。 适宜人群:一般人群均可食用。尤适宜暑热口干烦躁、消化不良者,维生素C缺乏者,胎动不安的孕妇,肾结石患者,高血压、心肌梗死者。 柠檬含有丰富的维生素,具有美容功效,能防止和消除皮肤色素沉着,起到美白的作用; 柠檬水能缓解钙离子促使血液凝固的作用,可预防和辅助治疗高血压和心肌梗死。由于柠檬pH值低达2.5,因此胃酸过多者和胃溃疡者不宜饮用柠檬或者柠檬水。

Continue reading 


第一弹:上海四大金刚-da饼

󰃭 2016-04-13

##简介 大饼,最早是由中国人命名的。这是一种由面粉,淀粉或小麦粉经过中国传统手艺炮制加工制成面饼,再由地方工艺加入独特原料制作而成的面饼。 大饼除可直接食用外也可与蔬菜一起烩着食用。 ##从童年的聊起 大饼对于上海吃货来说肯定知道,都是从小吃到大的食物,那我们就从我的童年说起。童年像一条船,装满了甜酸,装满了喜怒哀乐。 童年像一个五彩斑斓的梦,使人留恋,使人向往。童年生活中发生的一件件趣事常常把我带入美好的回忆里,比如童年每天必吃的早点:传说中的上海早餐四大金刚(大饼油条粢饭豆浆)。 ##大饼的吃法 今天我们先聊聊大饼。上海最地道的大饼应该是从炉子里烘烤出来的,一般分为咸甜两种口味。我比较喜欢吃甜的,甜大饼配咸豆浆是我的最爱。 甜大饼制作也相对比较简单,就是面粉里面ban点bai砂糖,White sugar就是馅心,再撒上几粒芝麻,讨好味觉的艺术得到了淋漓尽致的发挥;而咸味的大饼做起来颇为费力,一般抹多少盐花葱花,刷多少菜油等都非常考验师傅的手艺。 推荐上海最好吃的大饼:阿大葱油饼(卢湾区茂名南路159弄2号后门)

Continue reading 


如何使用 python 列表

󰃭 2016-04-13

Python 列表 把逗号分隔的不同的元素使用方括号括起来即可。 列表中的元素可以为任意数据类型。 >>> list1 = ['abc',100,200,[3,4,5]] >>> list2 = ['abc',"test",50,[1,2,3],(8,9,0)] list函数 主要用于生成一个列表。 例如: 把一个字符串转换为列表 把一个元组转换为列表 >>> list('hello') ['h', 'e', 'l', 'l', 'o'] >>> list((2,3,4,5)) [2, 3, 4, 5] ##列表常用操作 ###元素赋值 可以使用索引来为列表的某个元素赋值 >>> list1 ['abc', 100, 200, [3, 4, 5]] >>> list1[1] = 150 >>> list1 ['abc', 150, 200, [3, 4, 5]] ###删除元素 可用del语句来实现 >>> list1 ['abc', 150, 200, [3, 4, 5]] >>> del list1[2] >>> list1 ['abc', 150, [3, 4, 5]] 分片赋值 可以一次为多个元素赋值。

Continue reading 


同步/异步, 阻塞/非阻塞的理解

󰃭 2016-04-13

导读 对于同步、异步、阻塞、非阻塞这几个概念一直很模糊, 网上的很多人的理解也是模模糊糊, 看了半天, 并没啥太大的帮助, 在这里, 我也写一下我的理解, 尽量让自己和各位都能有更好更直观的理解 场景 这里所说的同步/异步, 阻塞/非阻塞都是针对网络io编程的 如何理解 对于同步/异步, 阻塞/非阻塞, 我一直都想不通前后者有多少区别, 同步不就阻塞了吗, 异步不是非阻塞的吗, 那为什么又出来两个概念呢。 其实, 我们要理解这几个概念, 首先要明白以下几个问题: 是谁阻塞/非阻塞的 为何阻塞/非阻塞 如何阻塞/非阻塞 是谁同步/异步操作的 为何同步/异步操作 如何同步/异步操作的 前三个是针对阻塞/非阻塞的认知, 后三个是针对同步/异步的认知, 如果能理解上面几个问题, 那么同步/异步,阻塞/非阻塞的问题就该很明了了 是谁阻塞/非阻塞 这就引入了网络编程中网络数据发送到服务器和服务器返回数据的过程了, 注意, 这里的过程仅仅是网络数据包被服务进程读取和服务进程将数据通过连接返回给客户端的过程, 服务进程处理数据的过程并不属于这里的阻塞/非阻塞, 同步/异步的讨论范畴, 这是很多入门的人学习的误区, 看了半天不知道是针对什么做的阻塞/非阻塞, 同步/异步的。 尤其是很多人做了阻塞/非阻塞, 同步/异步的各种比喻(买书, 烧水, 打电话等等), 却没有人针对这个做说明, 结果看了比喻也不能特别明白啥。 继续, 针对以上两个过程, 分别对应服务器进程从socket对数据的读和写, 详细说明如下 网络io 是通过客户端和服务端的socket连接实现的, 每个client和server 的连接都会有一个连接通道(socket),服务进程要从socket中读取数据和写入数据, 然而其并不是直接读取数据的, 二者之间有个读的buffer和写的buffer, 这个buffer在内核中, 服务器继承实际上是实际从内核直接读取/写入数据, 读: 读buffer copy internet =================》服务器内核===============》 服务器进程 写: 写buffer copy internet 《================ 服务器内核《=============== 服务器进程 更精细的说, 阻塞/非阻塞, 阻塞/非阻塞是针对网络(internet)到服务器内核这个阶段之间的读写过程

Continue reading 


python 装饰器的理解

󰃭 2016-04-13

Python的装饰器可以实现在代码运行期间修改函数的上下文, 即可以定义函数在执行之前进行何种操作和函数执行后进行何种操作, 而函数本身并没有任何的改变。 这个看起来很复杂, 实际上应用到了我之前说过的闭包的概念, 仔细看一看, 其实并不复杂。 首先, 我们先定义一个函数, 这个函数可以输出我的个人昵称: def my_name(): print "Yi_Zhi_Yu" my_name() # Yi_Zhi_Yu 那假如我需要在个人昵称输出前, 在输出我的个人uid呢, 当然, 要求是不改动现有的my_name函数, 这个时候就可以使用装饰器了 首先, 装饰器也是个函数, 其次, 他需要接受一个参数,该参数表示了要被装饰的函数(即my_name): def my_info(func): def wrapper(*args, **params): print 218 return func(*args, **params) return wrapper 然后与相应的被装饰函数关联起来的方法就是使用@my_info写在被装饰函数的前面 @my_info def my_name(): print "Yi_Zhi_Yu" 最后, 在执行my_name的时候, 就能既输出我的uid, 又能输出我的昵称了 my_name() #218 #Yi_Zhi_Yu 在上面, 最让我们疑惑的是装饰器函数定义里面的wrapper函数, 装饰器本身返回的是wrapper函数的定义, 而wrapper中则定义了对被装饰函数(my_name)的调用, func表示的就是被装饰函数, 说白了, 装饰器只是把某个不得改动的函数(a)放到另一个函数(b)中, 在b里面调用a, 在调用前后就可以做所谓的看起来像装饰的工作了。 my_info的最终返回的wrapper函数的定义, 并不是执行结果,只有当wrapper真正执行的时候, 才会真正的执行my_name方法, 这就是闭包时所说的内容。 wrapper中的参数, 实际上则是传递给func(实际上是my_name)的参数 因为装饰器也是个函数, 那么装饰器自己的能不能有参数传递呢。可以, 不过需要定义一个更高阶的函数, 也就是外面还要套一层函数, 比如, 我还要输出我的自定义的一个信息,需要传递参数

Continue reading 


python 加载模块的目录顺序

󰃭 2016-04-13

python的模块目录加载顺序 其加载顺序如下: 当前目录(代码的运行目录), PYTONPATH定义的目录,系统预定义的目录 验证场景 在path的内置模块中, 有一个test模块, 我们不管test的内容是什么, 自己实现一个这个模块test.py #!/usr/bin/env python #encoding=utf-8 test_name = "Yi_Zhi_Yu" 这是我们的test 模块(后面的代码默认不写开始两行的环境定义, 请自行补全) 我们再写一个c_test.py, 这个文件只是验证我们加载的test 是从哪里加载的 import test print test 首先,我们将c_test.py 放置在test.py所在的目录, 运行 python c_test.py 可以看到 <module 'test' from '/home/tony/test/python/modules/test.pyc'> 可以看到这个是加载我们自己写的test模块, 如果不信, 可以自己验证test_name 变量 然后我们再把c_test.py 放置到我们的用户根目录 ~, 运行之 <module 'test' from '/usr/lib/python2.7/test/__init__.pyc'> 这里加载的是系统的test模块, 而不是我们自定义的test模块 由上我们看出, python 会优先在当前的目录查找对应的模块, 找不到的话才去系统目录里查找 但如果我们指定了PYTHONPATH这个环境变量到我们自己的test模块, 用户目录下的c_test.py 会打印什么呢 PYTHONPATH=/home/tony/test/python/modules/ python ~/c_test.py 结果: <module 'test' from '/home/tony/test/python/modules/test.pyc'> 可以看到打印的是我们自定义的test模块,而非系统内置的test 模块 到这里可以说明, PYTHONPATH定义的路径要优于系统内置的模块加载路径 我们再将我们自定义的test.py copy 到用户根目录下, 这样我们就有两个自定义的test 模块了, 虽然内容一样。

Continue reading 


python 简单操作socket

󰃭 2016-04-13

socket 是什么 socket: 也叫套接字,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。 我也不懂这个定义说的什么鬼话。。。, 让我们通俗点吧。 当两个网络进程需要进行通信(比如client想向server端发送某些请求数据, 由server段进行处理)时, client需要知道server端的ip和port, 然后通过tcp/ip协议发送数据, 网络传输到server端, 由server接收数据, 进而处理。 那么, 客户端如何向tcp/ip 底层发送数据, tcp/ip 又怎么将数据打包(这是 tcp/ip 底层的内容, 实际上应用层是不管这部分的), 然后发送到server端的呢, server端又怎么接收数据,怎么解包, 然后处理呢? 如果我们要关心以上的种种内容, 那么对我们的编程来说, 实在是难啊。 要想能工完整的实现上面的步骤, 我们必须对tcp/ip 协议有完整的理解, 而大多数人都是只听过tcp/ip 这个东西, 并不能完整的理解, 像我也就一知半解。 这就引入了socket, 先人给我们造了这么一个轮子, 他将以上复杂的实现都封装了起来, 只对外暴露了一些简单的接口,然后我们就能跳过上面的种种过程,只需要关系我们业务本身的内容了。 事实上, socket 作为tcp/ip 协议中应用层和网络层之间的接口, 给我们的编程确实带来了极大的方便。给张图更容易理解, 如下: 下面, 我们就用python来简单实现一个server端, 一个client端, 通过client端发送某些数据给server, 并打印出来 server端 所谓的网络进程通信, 基本上就是client 和 server 的通信, 对server端来说, 需要通过ip+port 来定义网络进程, 因为网络中ip 标记主机唯一, 而port则标记了主机的进程的唯一, 两个加起来, 就表示了该进程在网络(大多数都是局域网)中的唯一。 以下是实现(server.py) sc = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) #TCP 网络服务 sc.bind(("127.0.0.1",8888)) sc.

Continue reading 


python的函数

󰃭 2016-04-13

定义 Python的函数定义使用def def func_name(x): return "hello world" //通过return 返回执行结果 #常用内置 常用内置函数(待补充): abs() // 绝对值计算 isinstance(v, (type list)) //判断是否是类型列表中的值 boolen return int() //强制int类型转换,小数时仅保留整数位 str() //强制string类型转换 unicode //unicode编码转换 bool() //强制bool 类型转换 return 多值 python的函数是可以返回多值的 //定义 def infos(): name = "Yi_Zhi_Yu" age = 25 return name, age //调用 infos() //('Yi_Zhi_Yu', 25) 可以看到, 返回的多值是以tuple形式输出的 参数 python的参数支持默认参数语法,但必须定义在函数参数的最后面的位置 注意: python的参数可以不需要严格按照定义的函数参数的位置传递进去, 作为代价,需要告诉函数传递的参数对应的是哪个,如下: def infos(input_name, input_age=18): //默认的参数定义age=18 name = input_name age = input_age return name, age infos("Yi_Zhi_Yu",25) // ('Yi_Zhi_Yu', 25) //默认参数传递顺序 infos(input_age=25, input_name="Yi_Zhi_Yu") //('Yi_Zhi_Yu', 25) 这里就没有按照默认的顺序传递参数 可变参数 当需要向函数传递参数,而又不知道参数的具体数量的时候, 可以使用如下定义方式:

Continue reading 


python的生成器和协程

󰃭 2016-04-13

python的生成器和协程都是用yield实现的 以下实践基于python2.7, 使用python3的小伙伴将print 和 next 调用改为python3的用法即可 生成器 在python中, 我们可以用列表表达式生成一个list, 很方便, 如下: m = [ x for x in range(0,10)] print m #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 这样我们就能很简单的获取生成一个list了, 但假如, 我们需要生成的list对象很大, 那这种生成方式就可能撑爆内存了,就直接内存溢出了 这时候,我们就可以用生成器了, 假如我们需要打印100000000000000 以内的所有偶数, 如下 def ou_output(): c = 0 while c < 100000000000000: if c % 2 == 0: yield c c += 1 m = out_output() print m#<generator object ou_output at 0x7f21f71a2eb0> 这里我们得到的m, 并不是函数的返回结果, 而是一个生成器(generator)类型的对象, 他保存了yield 的上下文关系, 在next的时候计算出结果, 然后返回, 如下

Continue reading 


python的redis操作(2)之hash数据

󰃭 2016-04-13

redis 的hash redis 的hash数据结构可用来存储对象类型的数据 应用场景 快速的存取用户信息, 而用户的信息包含了许多属性, 比如uname, age, sex, work 等等, 而且更容易进行属性的更新, 假如用string类型进行存取, 还需要进行序列化和反序列化的操作。 实践 存取用户信息 hset 设置某个用户信息 r_con.hset( "tony", "uname", "tony") #1L r_con.hset( "tony", "uname", "tony") #0L r_con.hset( "tony", "age", 27) #1L r_con.hset( "tony", "sex", "man") #1L hset 如果每次为key(“tony”) 创建了新的field(如uname, age), 就返回1, 否则返回0 hget 用于读取某个key的field的值 r_con.hget("tony", "uname") #'tony' hkeys 返回某个key的所有的fields r_con.hkeys("tony") #['uname', 'age', 'sex'] hvals 返回某个key的所有的fields的值 r_con.hvals("tony") #['tony', '27', 'man'] hgetall 返回某个key的所有键值对 r_con.hgetall("tony") #{'age': '27', 'sex': 'man', 'uname': 'tony'} hlen 返回某个key的fields的数量

Continue reading 


python的redis操作(1)

󰃭 2016-04-13

redis server安装 我用的ubuntu sudo apt-get install redis-server 安装完成后就会启动一个redis 服务, 默认端口6379, 配置文件路径是/etc/redis/redis.conf,有必要的时候对服务的配置进行修改 比如, 默认的配置绑定了本地ip 127.0.0.1 即不允许远程连接redis-server, 我们将配置中的 bind 127.0.0.1 改成 bind 0.0.0.0 即可允许任意远程连接 安装python redis 模块 sudo pip install redis 如果无法安装成功, 可能是无法连接pipy的国外源, 可以指定国内的源, 比如douban, 就可以快速安装成功 sudo pip install redis -i http://pypi.douban.com/simple 实践 打开解释器终端, 这里我使用ipython import redis r_con = redis.Redis("127.0.0.1",6379) #连接redis 服务 key-value 存取 r_con.set("name", "Yi_Zhi_Yu") #True r_con.get("name") #'Yi_Zhi_Yu' 这是最近本的键值存取 r_con.append("name","Tony Wang") #18L r_con.get("name") # 'Yi_Zhi_YuTony Wang' append 会往一个已有key的value拼接字符串, 并返回新的value长度, 如果key不存在,则创建之, 并赋值value, 返回key的value长度

Continue reading 


python的面向对象学习

󰃭 2016-04-13

OOP(面向对象编程)的思想在很多语言中都已经很成熟了, 在Python里, 也支持这种编程方式 面向编程里面的几个概念: 类, 对象, 属性, 方法,下面就用例子看一下如何实现 类, 对象(实例) class Classname(object): 关键字class, 括号中的object表是Classname类继承的类, 默认都至少要继承一个叫object的类 比如要定义一个学生类: class Student(): pass 这里我们仅仅是定义了一个类, 并未做任何实际的工作 那如何使用一个类呢, 当然要实例化这个类了 s = Sutdent() print s #<__main__.Student object at 0x7fb60ad6c450> 那这个s 其实就是这个类的一个对象(实例), 属性 这个其实就是类中的一些变量, 可以外部赋值, 也可内部定义, 假设我们外部定义某个Student实例的名字 s.name = "Yi_Zhi_Yu" print s.name #Yi_Zhi_Yu 在类内部定义 class Student(): name = "Yi_Zhi_Yu" s = Sutdent() print s.name #Yi_Zhi_Yu 方法 类的方法, 表示类的对象可以进行的操作 class Student(): name = "Yi_Zhi_Yu" def set_name(self, name): self.name = name def get_name(self) return self.

Continue reading 


python的mysql数据库操作

󰃭 2016-04-13

使用Python 进行数据库的操作 前奏 为了能操作数据库, 首先我们要有一个数据库, 所以要首先安装Mysql, 然后创建一个测试数据库python_test用以后面的测试使用 CREATE DATABASE `python_test` CHARSET UTF8 导入数据库模块 import MySQLdb 连接数据库 con = MySQLdb.connect(host="localhost", user="root", passwd="******",db="python_test",port=3306) 在这里, 我们虽然拿到了python的数据库连接, 但是不能在这个对象上直接对数据库进行操作, 还需要获取对应的操作游标才能进行数据库的操作,所以还需要进行下面的操作 cur = con.cursor() 创建表格 cur.execute('create table stu_info (name char(128) not null default "", age tinyint(3) not null default 0, sex enum("man","femal") not null default "man") engine=innodb charset=utf8') #0L cur.execute 返回执行的sql 影响的行数, 因为这里是创建数据库, 所以是0L行 但到这里还并没有真正执行了sql语句, 必须使用MySQLdb.commit才是真正执行完毕 con.commit() 到这里, 我们的表格才算真正创建完成 同理, 往表中写数据, 也是一样的操作流程 execute ==> commit 不过, 写入数据的execute 稍有不同, 如下

Continue reading 


python之闭包的理解

󰃭 2016-04-13

Python中的闭包的概念, 在我看来, 就相当于在某个函数中又定义了一个或多个函数, 内层函数定义了具体的实现方式, 而外层返回的就是这个实现方式, 但并没有执行, 除非外层函数调用的内层的实现方法被执行了。至于这个怎么执行, 看下面的例子就知道了 比如: def sum_outer(x, y): def sum_in(z): return x + y - z; return sum_in #注意, 这里返回的不是sum_in() 只是sum_in的函数名 m = sum_outer(3, 4) #3, 4 分别对应x, y,这里的m返回的也只是函数sum_in的定义,<function __main__.sum_in> print m(5) # m对应z, 这个时候才是真正sum_in执行的时候 看起来就像通过sum_outer 调用了内层的sum_in函数, 多了层代理 其中一种应用场景就是可以根据不同的参数,使用相同的实现去返回对应不同的结果,比如, 根据不同的配置获取不同的数据库连接, 或者要求在验证字符串长度时, 可以根据不同的最大长度验证(外层传递最大长度, 内层传递验证的字符串)。 在抽象化一点, 外层定义了一个环境, 内层则是在该环境中的要做的事情, 但这个事情还没做, 只是要做。当真正需要做的时候到这个环境中去做了就好了(外层的返回结果(m)执行内层的函数sum_in) 实际上, 直接给函数传递需要的所有参数, 直接返回结果, 如上面的sum_outer和sum_in, 直接通过 def sum(x,y,z): return x + y - z 不就结了吗,为社么还要闭包这个实现呢? 到目前来说, 只能看出他们是两种不同的实现方式, 更多的区别, 还有待日后的学习体验

Continue reading 


mysql更新插入语句

󰃭 2016-04-13

导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作。 这种情况下,有三种方式执行: select,update 直接每条select, 判断, 然后insert,毫无疑问,这是最笨的方法了,不断的查询判断,有主键或索引冲突,执行update,否则执行insert. 数据量稍微大一点这种方式就不行了。 稍微高级一些的方式。 replace 这是mysql自身的一个语法,使用replace的时候。其语法为: replace into tablename (f1, f2, f3) values(vf1, vf2, vf3),(vvf1, vvf2, vvf3) 这中语法会自动查询主键或索引冲突,如有冲突,他会先删除原有的数据记录,然后执行插入新的数据。 insert on duplicate key. 这也是一种方式,mysql的insert操作中也给了一种方式,语法如下: INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; 在insert时判断是否已有主键或索引重复,如果有,一句update后面的表达式执行更新,否则,执行插入。 第一种方式不说了,replace和insert on duplicate key这两种方式,哪中效率更高一些呢,毕竟,我们的执行sql,追求的就是高效。 分析 在最终实践结果中,得到接过如下: 在数据库数据量很少的时候, 这两种方式都很快,无论是直接的插入还是有冲突时的更新,都不错,但在数据库表的内容数量比较大(如百万级)的时候,两种方式就不太一样了, 首先是直接的插入操作,两种的插入效率都略低, 比如直接向表里插入1000条数据(百万级的表(innodb引擎)),二者都差不多需要5,6甚至十几秒。究其原因,我的主机性能是一方面,但在向大数据表批量插入数据的时候,每次的插入都要维护索引的, 索引固然可以提高查询的效率,但在更新表尤其是大表的时候,索引就成了一个不得不考虑的问题了。 其次是更新表,这里的更新的时候是带主键值的(因为我是从另一个表获取数据再插入,要求主键不能变) 同样直接更新1000条数据, replace的操作要比insert on duplicate的操作低太多太多, 当insert瞬间完成(感觉)的时候,replace要7,8s, replace慢的原因我是知道的,在更新数据的时候,要先删除旧的,然后插入新的,在这个过程中,还要重新维护索引,所以速度慢,但为何insert on duplicate的更新却那么快呢。 在向老大请教后,终于知道,insert on duplicate 的更新操作虽然也会更新数据,但其对主键的索引却不会有改变,也就是说,insert on duplicate 更新对主键索引没有影响.因此对索引的维护成本就低了一些(如果更新的字段不包括主键,那就要另说了)。 题外话: 在向大数据的表里批量插入(纯插入,不更新)的时候, 随着插入的数量越来越多,会导致越来越慢,这中情况下,因为我们用的innodb表, 有的说使用事务可以增加效率,但执行变化一般,有待考证。

Continue reading 


PHP 之use类名的命名空间问题解析

󰃭 2016-04-13

(没想好title,见谅) 导读 PHP的类文件在被其他文件include的时候不能直接使用其他文件中的已定义的别名。 比如有三个文件。 test.php 一个简单的脚本运行文件 NameSpaceClass.php 一个类文件,定义了一个命名空间 UseNameSpace.php,一个类文件,使用了NameSpaceClass命名空间里的类方法 问题描述 如果在test.php文件中先定义了一个命名空间别名(use) ,且是NameSpaceClass的命名空间别名,然后直接include UseNameSpace.php,注意,先假设这里的UseNameSpace.php里不使用任何关于命名空间的东西。那么test.php代码能正常运行么。 实践 我们先来看看这三个文件内容 test.php use Util\NameSpaceClass; include("./NameSpaceClass.php"); include("./UseNameSpace.php"); UseNameSpace::out_put(); NameSpaceClass.php namespace Util; class NameSpaceClass { public static function out_put() { echo "This is a Utils namespace \n"; } } UseNameSpace.php: class UseNameSpace { public static function use_out_put() { echo NameSpaceClass::out_put(); } } 从上面可以看出, NameSpaceClass.php里定义了一个命名空间Util, 并定义了类NameSpaceClass, 以及一个静态方法out_put, 方法中只是输出了一行字符串 UseNameSpace.php 中暂时未定义命名空间,但他的类方法直接调用了NameSpaceClass的方法,我们知道直接这么做是错误的,因为两个根本不在一个命名空间内。 test.php 直接静态调用UseNameSpace的方法,最终希望输出NameSpaceClass.php中的内容 假设 如果就目前这种代码,直接运行test.php,会发生社么事情?? 按照惯性思维,这种方式test从上到下,一次定义命名空间别名,加载类文件,输出结果,虽然最终的UseNameSpace不在NameSpaceClass的命名空间内,但最开始已经定义命名空间别名(use Util\NameSpaceClass;)了, 应该会没问题的了。 实践结果 PHP Fatal error: Class 'NameSpaceClass' not found in /tmp/UseNameSpace.

Continue reading 


php的global全局变量小谈

󰃭 2016-04-13

php 的全局变量看起来很好用,但稍有不慎,很容易被套住。 比如: 如果一个简单的php配置文件如下: $name="Yi_Zhi_Yu"; 当我们想要使用这个$name的时候,都知道使用include就行了。没错,这样可以。但假如我想把这个$name作为一个全局变量使用,以方便统一修改呢 也容易: include("./config.inc"); global $name; echo $name; //Yi_Zhi_Yu 那么问题来了,假如某个函数里我要用这个全局变量呢,或许你会这么写 function test() { include("./config.inc"); //这里加载是错误的 global $name; var_dump($name); } test(); Sorry, 你这样是得不到这个变量值得,得到的仅仅是个null 这就是我在实际中遇到的一个坑,即文件加载的全局变量的初始化只能在整个脚本的最外层,我说的最外层是指不能被包含在任何的函数体或者类里面 include("./config.inc"); //最外层初始化全局变量 function test() { global $name; //使用的时候定义其全局属性 echo $name; //Yi_Zhi_Yu } test(); 那再来一个问题,一个在test里面被定义了全局属性的变量(假设$age=25),假如在外面被修改了值($age=27),然后这个变量($age)再在另一个函数中调用,这个时候的这个$age应该是哪个值呢,代码如下,是被初始化的时候值(25),还是在外面被修改了的值(27)呢。 function test() { global $age; $age=25; } function test2() { global $age; var_dump($age); //这个值应该是什么? } test(); var_dump($age); $age=27; test2(); 没错,这个值应该是27, 这就是全局变量,只不过这种定义和初始化都是在一个函数体内完成的(不过这种方式不推荐,一般都是在最上面我说的配置文件中初始化的,只在使用的时候定义其全局属性,但不会在代码中修改其值,仅仅作为配置项获取)。

Continue reading 


python的classmethod和staticmethod小谈

󰃭 2016-04-13

概念 python 的classmethod 与staticmethod 这两个有什么区别? 二者又有什么联系? 在google和baidu之后, 得到的大致的联系就是二者都是对类的方法的静态调用的装饰器, 即对类的方法的静态调用可以用这两种方式实现。 区别体现在classmethod 也可以用类的实例调用, 而staticmethod 则不能如此 原因 假设 class A 中 使用 classmethod 装饰函数 a, 如下: class A(): _info = "hello world" @classmethod def a(arg): print arg._info 那么对a的调用既可以直接类似静态调用 A.a() 也可以先实例化, 再调用: aaa = A() aaa.a() 但如果把classmethod 换成staticmehtod: class A(): _info = "hello world" @staticmethod def a(arg): print arg._info 就只能静态调用了(staticmethod 名字就已经看得出来了) 原因是, classmethod 是类(不是实例化的对象)作为第一个参数传递给了函数, 比如在第一个例子里的aaa.a()和A.a(), 都是直接将类或者对象的类(再一次, 不是实例)传递进去, 进而实现静态调用 而staticmethod 只是将函数声明为静态方法, 没有传递任何内容进去 静态变量范围 在实验过程中, 类的静态变量对类的实例产生了一些有趣的影响, 如下

Continue reading 