为什么咸鱼的苹果键盘闲鱼苹果怎么这么便宜宜

博客访问: 429760
博文数量: 171
博客积分: 2998
博客等级: 少校
技术积分: 1642
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Python/Ruby
为什么使用Python假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200.&思路:用shell编程.(Linux通常是bash而Windows是脚本).例如,在Windows上用ping ip 的命令依次测试各个机器并得到控制台输出.由于ping通的时候控制台文本通常是"Reply from ... " 而不通的时候文本是"time out ... " ,所以,在结果中进行字符串查找,即可知道该机器是否连通.实现:Java代码如下:String cmd="cmd.exe ping&";String ipprefix="192.168.10.";int&begin=101;int&end=200;Process p=null;for(int&i=i&i++){p=&Runtime.getRuntime().exec(cmd+i);String line&=&null;BufferedReader reader&=&new&BufferedReader(new&InputStreamReader(p.getInputStream()));while((line&=&reader.readLine())&!=&null){//Handling line , may logs it.&}reader.close();p.destroy();}这段代码运行得很好,问题是为了运行这段代码,你还需要做一些额外的工作.这些额外的工作包括:编写一个类文件编写一个main方法将之编译成字节代码由于字节代码不能直接运行,你需要再写个小小的bat或者bash脚本来运行.当然,用C/C++同样能完成这项工作.但C/C++不是跨平台语言.在这个足够简单的例子中也许看不出C/C++和Java实现的区别,但在一些更为复杂的场景,比如要将连通与否的信息记录到网络数据库.由于Linux和Windows的网络接口实现方式不同,你不得不写两个函数的版本.用Java就没有这样的顾虑.同样的工作用Python实现如下:import subprocesscmd="cmd.exe"begin=101end=200while&begin&end:p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)p.stdin.write("ping 192.168.1."+str(begin)+"\n")p.stdin.close()p.wait()print&"execution result: %s"%p.stdout.read()对比Java,Python的实现更为简洁,你编写的时间更快.你不需要写main函数,并且这个程序保存之后可以直接运行.另外,和Java一样,Python也是跨平台的.有经验的C/Java程序员可能会争论说用C/Java写会比Python写得快.这个观点见仁见智.我的想法是当你同时掌握Java和Python之后,你会发现用Python写这类程序的速度会比Java快上许多.例如操作本地文件时你仅需要一行代码而不需要Java的许多流包装类.各种语言有其天然的适合的应用范围.用Python处理一些简短程序类似与操作系统的交互编程工作最省时省力.Python应用场合足够简单的任务,例如一些shell编程.如果你喜欢用Python设计大型商业网站或者设计复杂的游戏,悉听尊便.2 快速入门2.1 Hello world安装完Python之后(我本机的版本是2.5.4),打开IDLE(Python GUI) , 该程序是Python语言解释器,你写的语句能够立即运行.我们写下一句著名的程序语句:print&"Hello,world!"并按回车.你就能看到这句被K&R引入到程序世界的名言.在解释器中选择"File"--"New Window" 或快捷键 Ctrl+N , 打开一个新的编辑器.写下如下语句:print&"Hello,world!"raw_input("Press enter key to close this window");保存为a.py文件.按F5,你就可以看到程序的运行结果了.这是Python的第二种运行方式.找到你保存的a.py文件,双击.也可以看到程序结果.Python的程序能够直接运行,对比Java,这是一个优势.2.2 国际化支持我们换一种方式来问候世界.新建一个编辑器并写如下代码:print&"欢迎来到奥运中国!"raw_input("Press enter key to close this window");在你保存代码的时候,Python会提示你是否改变文件的字符集,结果如下:# -*- coding: cp936 -*-&print&"欢迎来到奥运中国!"raw_input("Press enter key to close this window");将该字符集改为我们更熟悉的形式:# -*- coding: GBK -*-&print&"欢迎来到奥运中国!" # 使用中文的例子raw_input("Press enter key to close this window");程序一样运行良好.2.3 方便易用的计算器用微软附带的计算器来计数实在太麻烦了.打开Python解释器,直接进行计算:a=100.0b=201.1c=2343print (a+b+c)/c2.4 字符串,ASCII和UNICODE可以如下打印出预定义输出格式的字符串:print&"""Usage: thingy [OPTIONS]-h Display&this&usage message-H hostname Hostname to connect to"""字符串是怎么访问的?请看这个例子:word="abcdefg"a=word[2]print&"a is:&"+ab=word[1:3]print&"b is:&"+b # index&1&and&2&elements of word.c=word[:2]print&"c is:&"+c # index&0&and&1&elements of word.d=word[0:]print&"d is:&"+d # All elements of word.e=word[:2]+word[2:]print&"e is:&"+e # All elements of word.f=word[-1]print&"f is:&"+f # The last elements of word.g=word[-4:-2]print&"g is:&"+g # index&3&and&4&elements of word.h=word[-2:]print&"h is:&"+h # The last two elements.i=word[:-2]print&"i is:&"+i # Everything except the last two charactersl=len(word)print&"Length of word is:&"+&str(l)请注意ASCII和UNICODE字符串的区别:print&"Input your Chinese name:"s=raw_input("Press enter to be continued");print&"Your name is&&:&"&+s;l=len(s)print&"Length of your Chinese name in asc codes is:"+str(l);a=unicode(s,"GBK")l=len(a)print&"I'm sorry we should use unicode char!Characters number of your Chinese \name&in&unicode&is:"+str(l);2.5 使用List类似Java里的List,这是一种方便易用的数据类型:word=['a','b','c','d','e','f','g']a=word[2]print&"a is:&"+ab=word[1:3]print&"b is:&"print b # index&1&and&2&elements of word.c=word[:2]print&"c is:&"print c # index&0&and&1&elements of word.d=word[0:]print&"d is:&"print d # All elements of word.e=word[:2]+word[2:]print&"e is:&"print e # All elements of word.f=word[-1]print&"f is:&"print f # The last elements of word.g=word[-4:-2]print&"g is:&"print g # index&3&and&4&elements of word.h=word[-2:]print&"h is:&"print h # The last two elements.i=word[:-2]print&"i is:&"print i # Everything except the last two charactersl=len(word)print&"Length of word is:&"+&str(l)print&"Adds new element"word.append('h')print word2.6 条件和循环语句# Multi-way decisionx=int(raw_input("Please enter an integer:"))if&x&0:x=0print&"Negative changed to zero"elif x==0:print&"Zero"else:print&"More"# Loops Lista&=&['cat',&'window',&'defenestrate']for&x&in&a:print x, len(x)2.7 如何定义函数# Define and invoke function.def sum(a,b):return&a+bfunc&=&sumr&=&func(5,6)print r# Defines function with&default&argumentdef add(a,b=2):return&a+br=add(1)print rr=add(1,5)print r并且,介绍一个方便好用的函数:# The range() functiona&=range(5,10)print aa&=&range(-2,-7)print aa&=&range(-7,-2)print aa&=&range(-2,-11,-3) # The 3rd parameter stands&for&stepprint a2.8 文件I/Ospath="D:/download/baa.txt"f=open(spath,"w") # Opens file&for&writing.Creates&this&file doesn't exist.f.write("First line 1.\n")f.writelines("First line 2.")f.close()f=open(spath,"r") # Opens file&for&readingfor&line&in&f:print linef.close()2.9 异常处理s=raw_input("Input your age:")if&s&=="":raise Exception("Input must no be empty.")try:i=int(s)except ValueError:print&"Could not convert data to an integer."except:print&"Unknown exception!"else: # It&is&useful&for&code that must be executed&if&the&try&clause does not raise an exceptionprint&"You are %d"&%&i,"&years old"finally: # Clean up actionprint&"Goodbye!"2.10 类和继承class&Base:def __init__(self):self.data&=&[]def add(self, x):self.data.append(x)def addtwice(self, x):self.add(x)self.add(x)# Child extends Baseclass&Child(Base):def plus(self,a,b):return&a+boChild&=Child()oChild.add("str1")print oChild.dataprint oChild.plus(2,3)2.11 包机制每一个.py文件称为一个module,module之间可以互相导入.请参看以下例子:# a.pydef add_func(a,b):return&a+b# b.pyfrom a import add_func # Also can be : import aprint&"Import add_func from module a"print&"Result of 1 plus 2 is:&"print add_func(1,2) # If&using&"import a"&, then here should be&"a.add_func"module可以定义在包里面.Python定义包的方式稍微有点古怪,假设我们有一个parent文件夹,该文件夹有一个child子文件夹.child中有一个module a.py . 如何让Python知道这个文件层次结构?很简单,每个目录都放一个名为_init_.py 的文件.该文件内容可以为空.这个层次结构如下所示:parent&--__init_.py--child--&__init_.py--a.pyb.py那么Python如何找到我们定义的module?在标准包sys中,path属性记录了Python的包路径.你可以将之打印出来:import sysprint sys.path通常我们可以将module的包路径放到环境变量PYTHONPATH中,该环境变量会自动添加到sys.path属性.另一种方便的方法是编程中直接指定我们的module路径到sys.path 中:import syssys.path.append('D:\\download')from parent.child.a import add_funcprint sys.pathprint&"Import add_func from module a"print&"Result of 1 plus 2 is:&"print add_func(1,2)总结你会发现这个教程相当的简单.许多Python特性在代码中以隐含方式提出,这些特性包括:Python不需要显式声明数据类型,关键字说明,字符串函数的解释等等.我认为一个熟练的程序员应该对这些概念相当了解,这样在你挤出宝贵的一小时阅读这篇短短的教程之后,你能够通过已有知识的迁移类比尽快熟悉Python,然后尽快能用它开始编程.当然,1小时学会Python颇有哗众取宠之嫌.确切的说,编程语言包括语法和标准库.语法相当于武术招式,而标准库应用实践经验则类似于内功,需要长期锻炼.Python学习了Java的长处,提供了大量极方便易用的标准库供程序员"拿来主义".(这也是Python成功的原因),在开篇我们看到了Python如何调用Windows cmd的例子,以后我会尽量写上各标准库的用法和一些,让大家真正掌握Python.但不管怎样,至少你现在会用Python代替繁琐的写程序了.希望那些真的能在一小时内读完本文并开始使用Python的程序员会喜欢这篇小文章,谢谢!
阅读(3294) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
为什么要选择Python语言实现机器学习算法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口您所在的位置: &
为什么要选Python(1)
为什么要选Python(1)
杨明华/谭励译
机械工业出版社
《Python在Unix和Linux系统管理中的应用》第1章为Python简介,本节为大家介绍为什么要选Python。
第1章 Python简介
为什么要选Python(1)
如果你是一位系统管理员,那么可能已对Perl、Bash、ksh或其他一些脚本语言有所了解,甚至已经使用了其中的一种或几种。我们通常利用脚本语言来完成一些重复、乏味的工作,使用后,工作完成的速度和准确性都远远高于不使用它们时的情况。实际上,所有的语言都是工具,它们为完成工作提供了便捷的手段,而这些工具的价值也正是体现在它们能够帮助人们把工作做得更好。我们有理由相信Python是一个非常有价值的工具,它会帮助你更为高效地完成工作。
选择Python是因为它比Perl、Bash、Ruby或其他语言更好么?事实上,我们很难对各种编程语言的优劣进行排序,因为这些工具与使用它们的程序员的思维习惯有着紧密联系。编程是一种主观性很强的活动,与程序员直接相关。一门优秀的编程语言,必须适合于使用它的人。因此,在这里我们不会争论Python是否比其他语言更好,但我们将给出理由说明为什么Python是个不错的选择,也将说明为什么Python尤其适合完成系统管理任务。
Python之所以是一门优秀的编程语言,第一个原因就在于Python十分容易学习。如果一门语言无法在很短的时间内帮助人们迅速提高工作效率,那么它作为语言的魅力也就消失了。想一想在使用一种程序语言去完成一些工作之前,需要花费几周甚至几个月的时间去学习这门语言,值得吗?答案恐怕是否定的,对于系统管理员尤其如此。如果你是一位系统管理员,就会感觉到总有处理不完的工作,花费大量时间学习一门语言,简直难以想象。而使用Python则不同,在几个小时内,你就可以写出规范的脚本程序,完全不用花上几天或是几周时间。的确如此,对于一门语言,如果人们不能很容易就掌握它,并很快地学会编写该语言的代码,那么就应该问一问是否有学习这门语言的必要了。
然而,如果一门语言过于简单,不具备完成复杂工作的能力,它同样也没有太高的价值。因此,Python之所以被称为一门非常优秀的编程语言,第二个原因就在于Python既简单易学,又可以完成你能够想象到的任何复杂任务。当需要一行一行地读取某个日志文件,然后输出其中一些基本信息时,Python可以胜任。或是当需要解析一个日志文件,提取出其中的信息,将其中的IP地址与过去三个月中每个日志文件里的IP地址相比较(这些日志文件都存储在关系数据库中),然后将比较的结果存储在关系数据库中时,Python同样也可以处理。实际上,Python正用于处理一些非常复杂的问题,如基因序列分析、多线程Web服务和繁重的统计分析任务。也许你并不会遇到上述那样复杂的工作任务,但是当我们需要去完成一些比较复杂的任务时,有Python这门语言相助终归是一件好事情。
此外,虽然你能够使用一门语言编写一些复杂的代码,但这些代码的维护却让你伤透脑筋,这同样不是一件好事。尽管Python也有代码维护问题,但是Python能够帮助我们用简单的语法结构来实现复杂的编程思想。在编写代码过程中,代码简化是一个极为重要的因素,因为简化的代码能够使后续的代码维护工作变得简单、轻松。Python在代码简化方面做得非常出色,即使我们需要维护几个月都没再看过的那些代码,也并非难事。甚至当我们使用之前从未见过的陌生Python代码时,也同样简单方便。由于其语法和通用词汇十分简洁、精练,Python语言很容易让人一经学习就能够长时间使用。
Python之所以是一门非常优秀的编程语言的另一个原因是其可读性非常好。Python使用空格(whitespace)来分隔代码块的开始和结尾。代码的缩进格式帮助人们很容易理解程序的流程。此外,Python可以说是“基于词”(word-based)的语言,也就意味着,Python语言在使用一些特殊字符的同时,特征经常是以关键词或词库的形式实现的。强调词而不是强调特殊字符,使得Python代码具有很好的可读性,并且十分易于理解。
以上,我们总结了Python的一些优点,接下来,我们将分别对Python、Perl和Bash编写的代码示例进行对比分析。通过对比,我们将可以更清楚地看到Python的优势。以下是一个简单的Bash示例程序,显示数字1、2与字母a、b的所有组合,代码如下所示:#!/bin/bash
for a in 1 2; do
echo "$a $b"
对比下面使用Perl完成的代码:#!/usr/bin/perl
foreach $a ('1', '2') {
foreach $b ('a', 'b') {
print "$a $b\n";
我们可以看到,这是一个非常简单的嵌套循环。以下是使用Python中的for循环完成同样循环嵌套机制的代码:#!/usr/bin/env python
for a in [1, 2]:
for b in ['a', 'b']:
print a, b
接下来,我们再对Bash、Perl和Python中条件语句的使用进行对比。以下代码是Bash中一个简单的if/else条件结构,用于检测指定的文件路径是否为一个目录。#!/bin/bash
if [ -d "/tmp" ] ; then
echo "/tmp is a directory"
echo "/tmp is not a directory"
下面是使用Perl编写的具有相同功能的代码:#!/usr/bin/perl
if (-d "/tmp") {
print "/tmp is a directory\n";
print "/tmp is not a directory\n";
最后是使用Python编写的代码,实现相同的检测功能:#!/usr/bin/env python
if os.path.isdir("/tmp"):
print "/tmp is a directory"
print "/tmp is not a directory"
Python语言的另一个优势是它对面向对象编程(OOP)的支持。事实上,如果你不想使用OOP来编写程序,完全可以不用,而如果你想使用OOP,就会发现,在Python中使用OOP编程是相当容易的。利用OOP技术,可以简单、清晰地将问题进行分解,将一系列功能模块组成独立的“事物”或“对象”。Bash不支持面向对象技术,Perl和Python则完全支持。下面的代码是采用Perl语言定义的一个类:package S
my $class = shift;
my $self = {};
$self-{IP} =
$self-{HOSTNAME} =
bless($self);
sub set_ip {
my $self = shift;
$self-{IP} =
return $self-{IP};
sub set_hostname {
my $self = shift;
$self-{HOSTNAME} =
return $self-{HOSTNAME};
sub ping {
my $self = shift;
my $external_ip = shift;
my $self_ip = $self-{IP};
my $self_host = $self-{HOSTNAME};
print "Pinging $external_ip from $self_ip ($self_host)\n";
在下面的Perl代码中,使用了上述定义的类:#!/usr/bin/perl
$server = Server-new('192.168.1.15', 'grumbly');
$server-ping('192.168.1.20');
【责任编辑: TEL:(010)】&&&&&&
关于&&&&&&的更多文章
Linux系统的魅力之一就是你可以直接从终端使用命令行来管理整个
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
讲师: 11人学习过讲师: 40人学习过讲师: 90人学习过
ES6(又名 ES2105)是 JavaScript 语言的新标准,2015
《21天学通Visual Basic(第4版)》是Visual Basic 6.
JavaScript 是Web 开发中应用最早、发展最成熟、用户
本书是对Java EE各种技术之间互相协作的概览和补充。
本书还展示了如何编写JavaServer Page(JSP)页面或者企业级JavaBean(EJ
51CTO旗下网站&&&您需要以后才能回答,未注册用户请先。

我要回帖

更多关于 苹果都市怎么这么便宜 的文章

 

随机推荐