<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_黄季冬</title><subtitle type="text">Making Beautiful Difference</subtitle><id>http://feed.cnblogs.com/blog/u/24981/rss</id><updated>2010-10-10T09:12:34Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24981/rss"/><entry><id>http://www.cnblogs.com/fox23/archive/2010/08/01/internet-tv.html</id><title type="text">Internet TV 影音娱乐新生活</title><summary type="text">用网络浏览器看在线视频，您需要分别打开视频网站，逐个浏览，在网页之间来回搜索想看的内容。现在，通过 Windows Media Center 中的互联网视频功能，您无需登陆多个网站，只要打开 Windows Media Center，就可以在一个统一的界面中轻松观看来自不同内容提供商的在线电影、电视剧和视频等节目。  您可以从&amp;#8220;指南&amp;#8221;中浏览和挑选要观看的内容，也可以按关键字...</summary><published>2010-08-01T04:42:00Z</published><updated>2010-08-01T04:42:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/08/01/internet-tv.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/08/01/internet-tv.html"/><content type="html">&lt;p&gt;用网络浏览器看在线视频，您需要分别打开视频网站，逐个浏览，在网页之间来回搜索想看的内容。现在，通过 Windows Media Center 中的互联网视频功能，您无需登陆多个网站，只要打开 Windows Media Center，就可以在一个统一的界面中轻松观看来自不同内容提供商的在线电影、电视剧和视频等节目。&lt;/p&gt;  &lt;p&gt;您可以从&amp;#8220;指南&amp;#8221;中浏览和挑选要观看的内容，也可以按关键字进行搜索。您可以直观地看到电影、电视剧或视频的缩略图和内容概要，只需单击便可立即观看。在观看的过程中您可以进行以下操作：播放、暂停、停止、快进、快退、向后跳过和向前跳过。使用&amp;#8220;定位栏&amp;#8221;，您可以跳到当前观看的电视节目、电影或视频剪辑的任意位置。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;Windows Media Center 中的互联网视频功能仅在 Windows 7 家庭高级版、专业版、旗舰版和企业版中包含。Windows Media Center 中的互联网视频支持 WMV、SilverLight 和 Flash。 &lt;/p&gt;  &lt;p&gt;目前互联网视频的所有内容都是免费提供的。&lt;/p&gt;  &lt;p&gt;&lt;a name="Access"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;自动配置互联网视频 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;在配置互联网视频之前，您需要满足以下前提：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;前提一：检查一下操作系统是否支持&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;互联网视频对运行平台有一定的要求：在 Windows 7 中，只有&lt;a href="http://windows.microsoft.com/zh-CN/windows7/products/compare"&gt;Windows 7 的家庭高级版、专业版、企业版和旗舰版 &lt;/a&gt;有 Windows Media Center 组件。如果需要升级系统，请访问&lt;a href="http://www.microsoft.com/china/windows/buy/retail.aspx"&gt;这里 &lt;/a&gt;。 &lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_win7_310.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;前提二：具有有效的宽带连接&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;满足以上前提后，您可以下载并运行微软所提供的一个&amp;#8220;Fix it&amp;#8221;小程序来自动配置互联网视频。步骤如下：点击下面的&amp;#8220;Fix it&amp;#8221;图标，然后在&amp;#8220;文件下载&amp;#8221;对话框中单击&amp;#8220;运行&amp;#8221;。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=9734118"&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_1.gif" /&gt; &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;阅读&amp;#8220;Fix it&amp;#8221;的软件许可条款，勾选&amp;#8220;我同意&amp;#8221;，点击&amp;#8220;下一步&amp;#8221;。&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_2.gif" /&gt;&lt;/p&gt;  &lt;p&gt;如果弹出用户帐户控制对话框，请点击&amp;#8220;是&amp;#8221;。&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_3.gif" /&gt;&lt;/p&gt;  &lt;p&gt;稍等一分钟左右，出现下面的对话框，就表示互联网视频所需的系统配置已经自动完成了。&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_4.gif" /&gt;&lt;/p&gt;  &lt;p&gt;下面，您只需要再进行一些&amp;#8220;初次使用之前的设置&amp;#8221;就可以观看互联网视频了,见后面的说明。&lt;/p&gt;  &lt;p&gt;如果您不是初次使用 Windows Media Center，在排除硬件方面的原因后，您也可以用此&amp;#8220;Fix it&amp;#8221;程序来尝试修复无法正常观看互联网视频的问题。&lt;/p&gt;  &lt;p&gt;注意：运行&amp;#8220;Fix it&amp;#8221;程序时，请确保计算机处于联网状态。&amp;#8220;Fix it&amp;#8221;运行完成后，Windows Media Center 将被重置为初始状态，原先所有的&lt;strong&gt;个人设置都将丢失&lt;/strong&gt;。此外，运行完&amp;#8220;Fix it&amp;#8221;以后，您还需要进行初次使用之前的设置来完成修复。&lt;/p&gt;  &lt;p&gt;&lt;a name="Discovery"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;初次使用之前的设置 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;第一次使用互联网视频时，除了以上配置操作，我们还需要进行一些安装设置。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;步骤一：快速设置&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;点击&lt;strong&gt;&amp;#8220;开始&amp;#8221;&lt;/strong&gt;按钮，猛击&lt;strong&gt;&amp;#8220;Windows Media Center&amp;#8221;&lt;/strong&gt;，或者在搜索结果中点击启动&lt;strong&gt;Windows Media Center&lt;/strong&gt;。（使用快捷键 &lt;strong&gt;Win+Alt+Enter&lt;/strong&gt; 也可以直接启动 Windows Media Center）&lt;/p&gt;  &lt;p&gt;第一次运行 Windows Media Center，会出现如下画面, 点击&lt;strong&gt;&amp;#8220;继续&amp;#8221;&lt;/strong&gt;：&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_11.gif" /&gt;&lt;/p&gt;  &lt;p&gt;点击按钮&lt;strong&gt;&amp;#8220;快速&amp;#8221;&lt;/strong&gt;：&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_12.gif" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;等待5分钟左右&lt;/strong&gt;，待到托盘处 Windows Media Center 更新图标消失，重启一下 Windows Media Center。&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_13.gif" /&gt;&lt;/p&gt;  &lt;p&gt;（方框内为 Windows Media Center 更新图标；配置过后，下次它就会自动运行，定期更新视频节目） &lt;/p&gt;  &lt;p&gt;重启后，会发现 Windows Media Center 中增加了&lt;strong&gt;&amp;#8220;互联网视频&amp;#8221;&lt;/strong&gt;一项：&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_14.gif" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;步骤二：安装 Windows Media Center 播放器组件&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;点击&lt;strong&gt;&amp;#8220;互联网视频项&amp;#8221;&lt;/strong&gt;，勾选&lt;strong&gt;&amp;#8220;我已阅读并了解服务条款和隐私声明&amp;#8221;&lt;/strong&gt;，点击&lt;strong&gt;&amp;#8220;安装&amp;#8221;&lt;/strong&gt;按钮。（此步骤仅在初次安装时出现，完成后不会再提示）&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_15.gif" /&gt;&lt;/p&gt;  &lt;p&gt;安装过程&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_16.gif" /&gt;&lt;/p&gt;  &lt;p&gt;安装完毕后就会进入内容提供商界面，目前有CRI 国际在线网络电视，搜狐和新浪三者可供选择。&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_17.gif" /&gt;&lt;/p&gt;  &lt;p&gt;需要注意的是，进入搜狐或者新浪视频时，点击&lt;strong&gt;&amp;#8220;播放&amp;#8221;&lt;/strong&gt;，系统会提示安装 Adobe Flash Player 插件（此步骤为初次安装，如已安装则不会再提示）。请勾选： &lt;strong&gt;&amp;#8220;我已阅读并了解服务条款和隐私声明&amp;#8221;&lt;/strong&gt;，并点击&lt;strong&gt;&amp;#8220;更新&amp;#8221;&lt;/strong&gt;按钮。&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="" src="http://www.microsoft.com/library/media/2052/china/windows/images/windows-media-center/learnmore/wmc_internettv_18.gif" /&gt;&lt;/p&gt;  &lt;p&gt;下载安装 Adobe Flash Player 插件之后，即可进行正常播放。并且只要搜狐或新浪其中之一安装了 Adobe Flash Player 插件，另一个就不会被要求安装。CRI 国际在线网络电视的播放器不基于 Adobe Flash Player，因此不会要求安装此插件。&lt;/p&gt;  &lt;p&gt;安装完毕以后就可以观看节目了：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/InternetTV_B183/wmcplay_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="wmcplay" border="0" alt="wmcplay" src="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/InternetTV_B183/wmcplay_thumb.png" width="466" height="293" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;还可以一边看一边浏览节目：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/InternetTV_B183/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/InternetTV_B183/image_thumb_2.png" width="286" height="190" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;桌面小工具&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Windows Media Center自劢更新互联网视频时，会出现添加小工具的提示，如果您错过更新时的提示，也可以通过在桌面右键—&amp;gt;&amp;#8221;小工具&amp;#8221;手动添加。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/InternetTV_B183/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/InternetTV_B183/image_thumb_3.png" width="111" height="328" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;have fun！&amp;#160; ;-)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/china/windows/windows-media-center/learn-more/internet-tv/default.aspx#Discovery" href="http://www.microsoft.com/china/windows/windows-media-center/learn-more/internet-tv/default.aspx"&gt;http://www.microsoft.com/china/windows/windows-media-center/learn-more/internet-tv/default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.cnbeta.com/articles/111555.htm" href="http://www.cnbeta.com/articles/111555.htm"&gt;http://www.cnbeta.com/articles/111555.htm&lt;/a&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/fox23/aggbug/1789869.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/08/01/internet-tv.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/03/16/windowsphone-dev-tools-ctp.html</id><title type="text">Windows Phone Developer Tools CTP 发布了！</title><summary type="text">当地时间3月15号，微软在MIX10上宣布Windows Phone Developer Tools CTP 可供开发者下载了。其中包含了:Visual Studio 2010 Express for Windows Phone CTPWindows Phone Emulator CTPSilverlight for Windows Phone CTPXNA 4.0 Game Studio CTP...</summary><published>2010-03-16T03:05:00Z</published><updated>2010-03-16T03:05:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/03/16/windowsphone-dev-tools-ctp.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/03/16/windowsphone-dev-tools-ctp.html"/><content type="html">&lt;p&gt;当地时间3月15号，微软在MIX10上宣布&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;amp;displaylang=en" target="_blank"&gt;Windows Phone Developer Tools CTP &lt;/a&gt;可供开发者下载了。&lt;/p&gt;&#xD;
&lt;p&gt;其中包含了:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Visual Studio 2010 Express for Windows Phone CTP&lt;br /&gt;Windows Phone Emulator CTP&lt;br /&gt;Silverlight for Windows Phone CTP&lt;br /&gt;XNA 4.0 Game Studio CTP&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下载地址：&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;amp;displaylang=en#filelist" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;amp;displaylang=en#filelist&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fox23/aggbug/1687029.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/03/16/windowsphone-dev-tools-ctp.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/03/07/python-default-args-onetime-evaluate.html</id><title type="text">Python - 默认参数的一次性求值</title><summary type="text">和很多高级编程语言一样，Python也有默认参数，当默认参数是数值类型时，一切都很美好：function(1)总是会返回1000001。但是默认参数是其他类型（如列表）时就没那么美好了： 这时你如果在一段代码中持续的调用该函数，将会发生或许令人意外的情况：第一次调用function(1)的时候，很正常，会打印出[1]，但是第二次再调用function(1)，将会打印出[1,1]。这是为什么呢？不要...</summary><published>2010-03-07T07:49:00Z</published><updated>2010-03-07T07:49:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/03/07/python-default-args-onetime-evaluate.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/03/07/python-default-args-onetime-evaluate.html"/><content type="html">&lt;p&gt;和很多高级编程语言一样，Python也有默认参数，当默认参数是数值类型时，一切都很美好：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#000000"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/font&gt; def&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(a, b = 1000000):&#xD;
&lt;/pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;b +=a&#xD;
&lt;/pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; b&lt;/pre&gt;&lt;/pre&gt;&lt;pre&gt;如果你喜欢，你可以在一段代码中无数次的调用这个函数，只要你参数一样，结果应该都一样。比如：&lt;/pre&gt;&#xD;
&lt;p&gt;function(1)总是会返回1000001。但是默认参数是其他类型（如列表）时就没那么美好了：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;span style="color: #0000ff"&gt;def&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(a, b = []):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;b.append(a)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;(b)&lt;/pre&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这时你如果在一段代码中持续的调用该函数，将会发生或许令人意外的情况：第一次调用function(1)的时候，很正常，会打印出[1]，但是第二次再调用function(1)，将会打印出[1,1]。这是为什么呢？不要紧，使用Python我们有办法检查一下是哪里出了毛病。这里我们可以在每一次调用函数的时候打印出b的ID。Python中一个对象的ID在其生命周期中是唯一的，和其他高级语言中所说的对象的地址一样。如果第二段代码中的b对象其ID一样，说明两次调用都使用的同一个对象，换句话说，Python函数对默认参数的求值操作在其生命周期中只发生一次（第一次）。可以使用以下的代码测试我们的想法：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;1(a,b=100000):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;b+=a&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;b = {0} with the id of {1}&lt;/span&gt;".format(b,id(b)))&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;2(a,b=[]):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;b.append(a)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;b = {0} with the id of {1}&lt;/span&gt;".format(b,id(b)))&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; test():&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;1(1)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;1(1)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;2(1)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;2(1)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; __name__ == '&lt;span style="color: #0000ff"&gt;__main__&lt;/span&gt;':&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;test()&#xD;
&lt;/pre&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;得到的输出如下：&lt;/p&gt;&#xD;
&lt;p&gt;b = 100001 with the id of 33384304 &lt;br /&gt;b = 100001 with the id of 33384304 &lt;br /&gt;b = [1] with the id of &lt;strong&gt;33341848&lt;/strong&gt; &lt;br /&gt;b = [1, 1] with the id of &lt;strong&gt;33341848&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;p&gt;果然，从后面两条结果中可以看到列表b在两次调用时都是使用的同一个对象，看来之前的猜想是正确的。对非数值类型的默认参数，只会在第一次调用时进行求值（取地址）操作。后面的所有调用都发生在同一个位置的对象上。只有字符串类型不受此限制，因为string本身是不可变的(immutable)的，每一次修改它都会创建一个新的对象。&lt;/p&gt;&#xD;
&lt;p&gt;Python的这个小陷阱和它的灵活性是分不开的，在其他的强类型语言如C#中，类似Python的情况是不会发生的，&lt;a href="http://www.cnblogs.com/fox23/archive/2009/12/02/named-optional-arguments-and-com-iterop-in-csharp-4.html" target="_blank"&gt;C#4.0严格将引用类型的默认参数值限定为Null&lt;/a&gt;（除了String类型），否则会在编译时报错：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/Python_135DE/cs4namedarg.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="cs4namedarg" border="0" alt="cs4namedarg" src="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/Python_135DE/cs4namedarg_thumb.png" width="616" height="147" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那么在Python中有办法使得每一次函数调用时都会使用最初设定的默认值么？办法有两种（有其他的办法欢迎在留言中告诉我），要么把默认值设为一个不可变（immutable）的值，比如string或者None，要么就每次调用的时候保留最初的默认值，并赋给调用函数。&lt;/p&gt;&#xD;
&lt;p&gt;第一种方法很简单，在此不再赘述，不过需要注意以字符串为默认值时，如果频繁的调用函数可能会导致性能问题，因为每一次发生在该默认值上的操作，会创建一个新的string对象。对于第二种办法，可以考虑用Python的装饰器(decorator)实现，下面的代码演示了一个每一次调用都保存默认参数的装饰器：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; keepDefault(f):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;defArgs = f.__defaults__&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; keeper(*args,**kwArgs):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;f.__defaults__ = deepcopy(defArgs)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; f(*args,**kwArgs)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;keeper.__name__ = f.__name__&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; keeper&lt;/pre&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;然后我们将该装饰器应用到之前定义的function2中:&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;@keepDefault&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;2(a,b=[]):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;b.append(a)&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;b = {0} with the id of {1}&lt;/span&gt;".format(b,id(b)))&lt;/pre&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;然后我们像先前一样连续的调用function2,结果输出如下:&lt;/p&gt;&#xD;
&lt;p&gt;b = [1] with the id of &lt;strong&gt;33892912&lt;/strong&gt; &lt;br /&gt;b = [1] with the id of &lt;strong&gt;33892592&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;哈~ 我们如愿得到了结果。而且注意这里两次b对象的的ID不一样，这是因为每一次调用时，函数的参数都被deepcopy完整的克隆一遍。重新构造了新对象b。&lt;/p&gt;&#xD;
&lt;p&gt;Enjoy python!&amp;nbsp;&amp;nbsp; ;-)&lt;/p&gt; &lt;img src="http://www.cnblogs.com/fox23/aggbug/1680209.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/03/07/python-default-args-onetime-evaluate.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/03/04/python-one-line-conditional-expression.html</id><title type="text">Python小技巧 – True or False</title><summary type="text">&amp;#160; 在昨天关于substring的blog中有如下一段代码： 也许你已经发现，在Python 3中其实有办法只用一行完成函数：  但是。。。还可以更简单吗？如何更简单使用Python表达条件语句呢，just for fun :)一种做法是使用列表索引：原理很简单，布尔值True被索引求值为1，而False就等于0. 还可以更简单么？留言给我吧 ;-)</summary><published>2010-03-04T11:30:00Z</published><updated>2010-03-04T11:30:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/03/04/python-one-line-conditional-expression.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/03/04/python-one-line-conditional-expression.html"/><content type="html">&lt;p&gt;&amp;#160; 在昨天&lt;a href="http://www.cnblogs.com/fox23/archive/2010/03/03/python-substring-search.html"&gt;关于substring的blog&lt;/a&gt;中有如下一段代码：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/PythonTrueorFalse_10ADB/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fox23/WindowsLiveWriter/PythonTrueorFalse_10ADB/image_thumb.png" width="216" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;也许你已经发现，在Python 3中其实有办法只用一行完成函数：&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;span style="color: #0000ff"&gt;def&lt;/span&gt; isSubstring2(s1,s2):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; True &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; s2.&lt;span style="color: #0000ff"&gt;find&lt;/span&gt;(s1)!=-1 &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; False&lt;/pre&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;但是。。。还可以更简单吗？&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如何更简单使用Python表达条件语句呢，just for fun :)&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;一种做法是使用列表索引：&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;span style="color: #0000ff"&gt;def&lt;/span&gt; isSubstring2(s1,s2):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; [False,True][s2.&lt;span style="color: #0000ff"&gt;find&lt;/span&gt;(s1)!=-1]&lt;/pre&gt;&lt;/pre&gt;&#xD;
原理很简单，布尔值True被索引求值为1，而False就等于0. 还可以更简单么？留言给我吧 ;-)  &lt;img src="http://www.cnblogs.com/fox23/aggbug/1678579.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/03/04/python-one-line-conditional-expression.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/03/03/python-substring-search.html</id><title type="text">Python小技巧 - 子串查找</title><summary type="text">惭愧啊，今天写了个查找子串的Python程序被BS了&amp;#8230;如果让你写一个程序检查字符串s2中是不是包含有s1。也许你会很直观的写下下面的代码：可是这是Python，我们可以利用字符串自带的find()方法，于是可以这样：悲情的事就在于此，原来Python中的关键字"in&amp;#8221;不仅可以用于列表、元祖等数据类型，还可以用于字符串。所以，这里只需要直接一行代码搞定：后知后觉了，惭愧;-)...</summary><published>2010-03-03T14:54:00Z</published><updated>2010-03-03T14:54:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/03/03/python-substring-search.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/03/03/python-substring-search.html"/><content type="html">&lt;p&gt;惭愧啊，今天写了个查找子串的Python程序被BS了&amp;#8230;&lt;/p&gt;&#xD;
&lt;p&gt;如果让你写一个程序检查字符串s2中是不是包含有s1。也许你会很直观的写下下面的代码：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;#determine whether s1 is a substring of s2 &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; isSubstring1(s1,s2): &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;tag = False &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;len1 = len(s1) &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;len2 = len(s2) &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;for i in range(0,len2): &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; s2[i] == s1[0]: &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;for j in range(0,len1): &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; s2[i]==s1[j]: &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;tag = True &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; tag&lt;/pre&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;可是这是Python，我们可以利用字符串自带的find()方法，于是可以这样：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; isSubstring2(s1,s2): &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;tag = False &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; s2.&lt;span style="color: #0000ff"&gt;find&lt;/span&gt;(s1) != -1: &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;tag = True &#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; tag&lt;/pre&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;悲情的事就在于此，原来Python中的关键字"in&amp;#8221;不仅可以用于列表、元祖等数据类型，还可以用于字符串。所以，这里只需要直接一行代码搞定：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; isSubstring3(s1,s2):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; s1 in s2&lt;/pre&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;后知后觉了，惭愧;-)&lt;/p&gt;&#xD;
&lt;p&gt;类似的，假设要在字符串中，查找多个子串是否存在，并打印出这些串和首次出现的位置：&lt;/p&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt; findSubstrings(substrings,destString):&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;res =  map(lambda x:str([destString.&lt;span style="color: #0000ff"&gt;index&lt;/span&gt;(x),x]),filter(lambda x:x in destString,substrings))&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; res:&#xD;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ', '.&lt;span style="color: #0000ff"&gt;join&lt;/span&gt;(list(res))&lt;/pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;;-)  very cool~&lt;/pre&gt;&lt;pre&gt;&lt;em&gt;UPDATE: 如果你不习惯最后面这种看起来很复杂的语法也没关系，可以使用列表解析，更加简洁：&lt;/em&gt;&lt;/pre&gt;&lt;pre&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;findSubstrings(substrings,destString):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;.join([str([destString.index(x),x])&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;substrings&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;destString])&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/fox23/aggbug/1677713.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/03/03/python-substring-search.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/02/26/welcom-to-thinkbot-dot-info.html</id><title type="text">新的个人博客@ http://thinkbot.info</title><summary type="text">hi,欢迎大家访问我新的个人博客ThinkBot.info，cnblogs这个博客也将继续保持更新，新博客的内容主要是关于人工智能，互联网数据挖掘，智能交通，移动智能设备以及其他一些我学习和工作中所感兴趣的方面。ThinkBot.info域名申请了有一段时间了但是一直没有正式的启用。从现在起我会积极更新的，欢迎大家关注和订阅;-)</summary><published>2010-02-26T07:10:00Z</published><updated>2010-02-26T07:10:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/02/26/welcom-to-thinkbot-dot-info.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/02/26/welcom-to-thinkbot-dot-info.html"/><content type="html">&lt;p&gt;hi,欢迎大家访问我新的个人博客&lt;a href="http://thinkbot.info/" target="_blank"&gt;ThinkBot.info&lt;/a&gt;，cnblogs这个博客也将继续保持更新，新博客的内容主要是关于人工智能，互联网数据挖掘，智能交通，移动智能设备以及其他一些我学习和工作中所感兴趣的方面。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://thinkbot.info/" target="_blank"&gt;ThinkBot.info&lt;/a&gt;域名申请了有一段时间了但是一直没有正式的启用。从现在起我会积极更新的，欢迎大家关注和&lt;a href="http://thinkbot.info/feed/" target="_blank"&gt;订阅&lt;/a&gt;;-)&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fox23/aggbug/1674281.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/02/26/welcom-to-thinkbot-dot-info.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/02/21/meego.html</id><title type="text">MeeGo：下一个Android？</title><summary type="text">在上周的移动世界大会（MWC）上，微软发布了新的智能手机操作系统Windows Phone 7 。而几乎就在同时，全球最大的手机生产商Nokia和全球最大的半导体芯片制造商Intel宣布将各自的开源智能手机平台Maemo和Moblin（二者均基于Linux内核）合并[1] ，联手打造新的智能手机平台MeeGo[2]。加上iPhone和Android的强劲表现，未来两年的智能手机市场将会是一个全新的...</summary><published>2010-02-21T08:11:00Z</published><updated>2010-02-21T08:11:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/02/21/meego.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/02/21/meego.html"/><content type="html">&lt;p&gt;在上周的移动世界大会（MWC）上，微软发布了新的智能手机操作系统&lt;a href="http://www.windowsphone7series.com/" target="_blank"&gt;Windows Phone 7&lt;/a&gt; 。而几乎就在同时，全球最大的手机生产商Nokia和全球最大的半导体芯片制造商Intel宣布将各自的开源智能手机平台Maemo和Moblin（二者均基于Linux内核）合并&lt;sup&gt;[1]&lt;/sup&gt; ，联手打造新的智能手机平台MeeGo&lt;sup&gt;[2]&lt;/sup&gt;。加上iPhone和Android的强劲表现，未来两年的智能手机市场将会是一个全新的局面，至少比此前的iPhone一枝独秀要好。值得一提的是，虽然此前宣称要把Maemo作为Symbian的替代版本，但Nokia表示并不会放弃对Symbian的开发和维护，Symbian将继续在中低端智能手机产品中担当重要角色。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" align="right" src="http://images.cnblogs.com/cnblogs_com/fox23/meego.png" width="213" height="85" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 至于Intel的Moblin，似乎国内的开发者们要更熟悉一点，因为此前Intel联合CSDN搞过几次开发大赛。但是之前Moblin并未真正进入过智能手机的圈子。它所活跃的领域是移动互联网设备（Mobile Internet Devices，MID）、车载信息系统、便携式媒体播放器（PMP）到个人导航设备（PND）、数码机顶盒（STB）到笔记本电脑等等。此次和Nokia的合作也是Intel对智能手机操作系统真正的第一次尝试。MeeGo强调的是快速的开发和良好的用户体验（"&lt;strong&gt;enables an open ecosystem for rapid development of exciting new user experiences&lt;/strong&gt;"）。&lt;/p&gt;&#xD;
&lt;p&gt;虽然是两个巨擘之间的合作，但我不认为MeeGo会对现有的智能手机市场有多大影响，原因很简单，Nokia和Intel都不属于智能手机的领跑军团，也没有横向的业务可以整合，不像google有互联网，微软有桌面软件。在这一领域Nokia的龟速发展已经让它快退化成一个Loser，落后者+落后者 = 两个落后者。而双方对MeeGo的期许是针对&amp;#8220;未来的计算设备&amp;#8221;（future computing devices），而不是单纯的智能手机。MeeGo的第一个release有望在今年第二季度发布，拭目以待。&lt;/p&gt;&#xD;
&lt;p&gt;相关资料&lt;/p&gt;&#xD;
&lt;p&gt;[1] &lt;a href="http://www.intel.com/pressroom/archive/releases/2010/20100215corp.htm" target="_blank"&gt;http://www.intel.com/pressroom/archive/releases/2010/20100215corp.htm&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[2] &lt;a href="http://www.meego.com/" target="_blank"&gt;http://www.meego.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://jinruhe.com/blog/archives/397" target="_blank"&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fox23/aggbug/1670585.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/02/21/meego.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/02/17/windows-mobile-653-dtk-released.html</id><title type="text">Windows Mobile 6.5.3 Developer Tool Kit 发布了</title><summary type="text">经历了上个月的&amp;#8220;早产门&amp;#8221;，windows mobile 6.5的DTK终于发布了，发布名称为Windows Mobile 6.5.3 Developer Tool Kit。下载地址如下：http://www.microsoft.com/downloads/details.aspx?FamilyID=c0213f68-2e01-4e5c-a8b2-35e081dcf1ca&amp;a...</summary><published>2010-02-17T09:13:00Z</published><updated>2010-02-17T09:13:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/02/17/windows-mobile-653-dtk-released.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/02/17/windows-mobile-653-dtk-released.html"/><content type="html">&lt;p&gt;经历了上个月的&amp;#8220;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/01/23/Windows-mobile-65-sdk-released.html" target="_blank"&gt;早产门&lt;/a&gt;&amp;#8221;，windows mobile 6.5的DTK终于发布了，发布名称为Windows Mobile 6.5.3 Developer Tool Kit。下载地址如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c0213f68-2e01-4e5c-a8b2-35e081dcf1ca&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c0213f68-2e01-4e5c-a8b2-35e081dcf1ca&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;立此存照：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/fox23/wm653dtk.png" width="589" height="378" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;注1：微软的下载的地址不一定会长期有效，下载从速。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;注2：谢谢Ken在回复中指出DTK和SDK的区别问题。详见：&lt;a href="http://windowsteamblog.com/blogs/windowsphone/pages/sdk-dtk-drk-wtf.aspx" target="_blank"&gt;http://windowsteamblog.com/blogs/windowsphone/pages/sdk-dtk-drk-wtf.aspx&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fox23/aggbug/1668954.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fox23/archive/2010/02/17/windows-mobile-653-dtk-released.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/02/05/symbian-open-source.html</id><title type="text">塞班（Symbian）开源了(包括Symbian 3和S60等)</title><summary type="text">今天早些时候，塞班基金会正式宣布，其智能手机操作系统Symbian OS的内核及中间件和大部分软件都将以不同的license开放源代码，用户可以下载和修改它们，这次开放的源代码超过4000万行。这次开源行动无疑会吸引更多的开发者到Symbian的marketplace中来，这让近来一直收到iphone和android打压的Symbian OS又找回了些许空间。全球现在约有3.3亿Symbian智能...</summary><published>2010-02-04T16:10:00Z</published><updated>2010-02-04T16:10:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/02/05/symbian-open-source.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/02/05/symbian-open-source.html"/></entry><entry><id>http://www.cnblogs.com/fox23/archive/2010/01/23/Windows-mobile-65-sdk-released.html</id><title type="text">Windows Mobile 6.5 SDK 发布了 (2月17日更新)</title><summary type="text">昨天微软终于（突然）发布了Windows Mobile SDK 6.5，有中文版可供下载，不过遗憾的是仍然不支持VS2010。详见：http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=c5241738-0fe6-4396-a4e5-5a516deb1bc5更新1：Waggener Edstrom,微...</summary><published>2010-01-23T09:13:00Z</published><updated>2010-01-23T09:13:00Z</updated><author><name>Freesc Huang</name><uri>http://www.cnblogs.com/fox23/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fox23/archive/2010/01/23/Windows-mobile-65-sdk-released.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fox23/archive/2010/01/23/Windows-mobile-65-sdk-released.html"/></entry></feed>
