注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

fanhq666的博客

Fan-Fun

 
 
 

日志

 
 

和Python的第一次接触  

2011-04-30 23:27:41|  分类: 程序 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
嗯,不是我第一次被一条蟒蛇咬了,而是我第一次“比较正式”地尝试了一下Python这个语言。

另外,python的最新版本是3.2,某些讲Python 2的教程可能有些不适用的地方,只能自己尝试好了。

python给我的第一印象是:有点像visual basic,有点像javascript,有点像perl,有点像golang(谁像谁啊)……就是不太像C。
它作为一个脚本语言,可以用交互式的解释器运行,也可以作为可执行文件(真的,双击一下就运行)运行,十分小巧轻便
举个小例子:输出hello world
print('hello world')
是的,就一行,行尾没有分号,不用包含头文件,单引号双引号均可(注:在Python 2中,连小括号都不用)

if、while、for的语句不用大括号,缩进就是括号;结尾有个小冒号:
if a<10:
    print('a<',10)
else:
    for i in range(0,10):
        print(i,'<',a)
    else:
        print('done')
这个文风其实是我写C++时候的理想。不过,C++中的右大括号实在要单占一行,导致代码里充满了“零信息量”的行。
在for后面写else,没见过吧?
想计算2的1000次方是多少吗?
print(2**1000)
结果就出来了:
10715086071862673209484250490600018105614048117055336074437503883703510511249361
22493198378815695858127594672917553146825187145285692314043598457757469857480393
45677748242309854210746050623711418779541821530464749835819412673987675591655439
46077062914571196477686542167660429831652624386837205668069376
声明变量不用类型,直接赋值即可
x=1
像交换两个变量可以写成如下的飘逸形式:
a,b=b,a

定义函数也不用大括号,不用写返回值类型,不用写参数类型(有点像javascript)
def greater(a,b):
    if a>b:
        return a
    else:
        return 'a<b'
同一个函数,不同参数返回不同类型,震撼!

在python中,一切东西都是对象,例如:
print((37).bit_length())                 #   37是一个int对象,它的bit_length方法返回要用多少个二进制位表示它
print((0.25).as_integer_ratio())    #   输出(1,4),表示0.25=1/4
a=math.sin                                   #   函数也是个对象
a=math                                        #   模块(函数库)也是个对象
这个让写c++、java的人有些不习惯,尤其是当对象赋值以及函数传参数的时候,非要纠结一会儿才能搞明白

python的class的写法让C++程序员有点觉得别扭,不过细想起来也很有道理
class student:
  def __init__(self,name):          #构造函数
    self.name=name
  def talk(self):
    print(self.name)

a=student('haha')
a.talk()
嗯,没有成员变量声明,成员变量运行时赋予,self的写法着实让人纠结,不过,习惯了就不觉得的了。

脚本语言的执行效率一直是让人头疼的问题,那么,python如何呢?
我写了一个小程序:模拟“拉大车”纸牌游戏,计算期望要玩多长时间能玩完,用python写就30多行:
import random
def experiment():
'''play a game and return the time used'''
x=[i%13 for i in range(0,54)]
random.shuffle(x)
y=x[27:];x=x[:27]
cur=[]
cnt=0;player=0
while len(x)!=0 and len(y)!=0 and cnt<10000:
if player==0:
p=x
else:
p=y
player=1-player
while True:
t=p.pop()
if t in cur:
idx=cur.index(t)
p[:]=cur[idx:]+[t]+p
cur=cur[:idx]
else:
cur.append(t)
break
cnt+=1
return cnt
s=0;c=0
for i in range(0,10000):
t=experiment()
s+=t;c+=1
if c%100==0:
print('c=',c)
print('avg=%f'%(s/c))
各种有意思的语法
这个程序跑了20多秒,用C++写(各种stl)50行左右,跑了将近1秒,可以看出,python的常数比C++要多出几十倍到上百倍。不过,用在写代码上的时间节省能够补偿程序运行的缓慢。

python有着强大的类库,能够处理各种数据源(文件、数据库、网络……),所以在生产生活中,它是一种十分理想的脚本语言。

不过,在竞赛中,除了高精度恶心题以外,还是老老实实写#include <cstdio>……吧。毕竟,常数如同分数一般可贵。(此“分数”是score,不是fraction)
  评论这张
 
阅读(891)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017