`

python,也不错嘛

阅读更多
五一放假,难得有点空闲的时间,虽然工作中也有不少空闲时间,但是很难全心投入干些其它的事,现在终于有点空了。最近由于想做一个C/S软件,所以想学习一下其它的语言,因为JAVA在做C/S软件方面没有任何优势,尤其是在此windows平台,但是个人对VB、C#又没什么兴趣,delphi这个东西算是不错,但现在已经发展得不怎么样了,没必要花时间去学一门没什么前途的语言,VC也不错,但是开发效率并不能让人满意,当然本人也不是很熟悉VC,前些时间看了一下ruby,但是在做C/S方面一点都不成熟。虽然很久以前都听过python了,但是一直没有关注,它到底能做啥,仔细了解,python在各个方面都不错,平台、B/S、C/S都很不错,于是今天花了点时间试了一下,的确不错,不像ruby那样,规则有点乱,python的语言结构的确要清晰得多。
python是一门很简单的语言,如果认真一点,基本语法一天就能搞定,算了,搞个例子上来,做个纪念:

import sys

Zero = ["  ***  ",
        " *   * ",
        "*     *",
        "*     *",
        "*     *",
        " *   * ",
        "  ***  "]
One = [" * ", "** ", " * ", " * ", " * ", " * ", "***"]
Two = [" *** ", "*   *", "*  * ", "  *  ", " *   ", "*    ", "*****"]
Three = [" *** ", "*   *", "    *", "  ** ", "    *", "*   *", " *** "]
Four = ["   *  ", "  **  ", " * *  ", "*  *  ", "******", "   *  ",
        "   *  "]
Five = ["*****", "*    ", "*    ", " *** ", "    *", "*   *", " *** "]
Six = [" *** ", "*    ", "*    ", "**** ", "*   *", "*   *", " *** "]
Seven = ["*****", "    *", "   * ", "  *  ", " *   ", "*    ", "*    "]
Eight = [" *** ", "*   *", "*   *", " *** ", "*   *", "*   *", " *** "]
Nine = [" ****", "*   *", "*   *", " ****", "    *", "    *", "    *"]

Digits = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine]

try:
    digits = sys.argv[1]
    row = 0
    while row < 7:
        line = ""
        column = 0
        while column < len(digits):
            number = int(digits[column])
            digit = Digits[number]
            line += digit[row] + "  "
            column += 1
        print(line)
        row += 1
except IndexError:
    print("usage: bigdigits.py <number>")
except ValueError as err:
    print(err, "in", digits)


这个例子也是从书上抄的,上面的内容也很简单,有个IndexError错误相当 于java里面的IndexOutOfException之类的错误,代表数组溢出,ValueError用在上面的地方,就是表示转型错误。还有一些细节也是需要注意的,如代码块缩进,上面的例子中并没有{}、begin/end之类,但是怎么判断某个块的程序结束呢?如while子句到什么地方结束的呢?python里面有一种隐式的规则,那就是相当的代码缩进代表相同的代码块,而且缩进最好用4个空格来区分,而不要用tab来区分。而且python也没有i++这种用法,自加需用i+=1来操作,这与ruby差不多的。python里面也没有toString()之类的方法,而且不能直接使用a = 2+"23"操作,必须转换成相同的类型a=str(2)+"23"才可以。
上面例子的功能就是输出数字的*格式,如bigdigits.py 235,那么将打印输出235的*样式,从这个例子可以看出,其实编程结构与java类似(用java来实现大体也是这个流程),但没有java那么多约束。

随便写点,今天又看了一下,python里面比较对象用的是is或is not,由于对象之间的比较直接比较的内存地址,所以速度非常快,但是在一般不用它比较intS,strS类型,即整型与字符串类型,如果那样“==”应该好一些。空对象用None表示,个人觉得None还是没NULL直接。

python的数组算是个不错的东西,数组其实是有点面向过程的,尤其是在java里面,几乎都可以用collection替代,不过python还算是个不错的东西,主要有三种方式的遍历:
一、从前向后遍历,最基本的一种方式,下标从0开始。
二、从后往前遍历,见下图:


即,最后一个元素的下标为-1,依次递减。
三、遍历部分元素,如hair[:2]表示遍历下标为2前面的元素(不包括索引为2的元素),也可以使用hair[2:](包括索引为2的元素),这个与前面相反,遍历2及后面的元素。

数组里面还有个有意思的东西,那就是把数组里面的内容附给多个变量,如:
first, *rest = [9, 2, -4, 8, 7]
那么rest的数据为[2, -4, 8, 7],需要注意的是使用*时,左边的变量要有两个或两个以上。
*还是一个重复的功能,如a="123",b=a*2,那么b="123123"。

dict也是不错的东西,相对java的map,用法要灵活得多,定义map的方式有很多种,见下图:


上面列出总共定义dict的方法,关于dict的API设计也很好,遍历也很灵活,可以通过d.values、d.keys、d.items分别遍历值、键或者一起遍历。
帖一个关于dict的例子:

import string
import sys

words = {}
strip = string.whitespace + string.punctuation + string.digits + "\"'"
for filename in sys.argv[1:]:
    for line in open(filename):
        for word in line.lower().split():
            word = word.strip(strip)
            if len(word) > 2:
                words[word] = words.get(word, 0) + 1
for word in sorted(words):
    print("'{0}' occurs {1} times".format(word, words[word]))



这个例子的作用是统计某一个或多个文件的单词出现的次数,其实上面这个例子也是不完善的,在分离单词时并不准确,那个strip只是删除字符串前面与后面的空格,相当于执行了lstrip()与rstrip()方法。

搞个java的人就知道,有个prototype(原形设计模式)模式,如果写一个类,需要覆盖clone()这个方法,处理起来很不优雅,不过python在这方面做得就不错,如果是针对集合类,有几种很好的处理方式,怕翻译得不准确,贴图:


稍微解释一下,复制list可以用list(L)或L[:],复制set与dict可以用L.copy(),还有一个深度的方法,一般对象与集合都可以可以使用:
import copy
a=1
b=copy.copy(a)


x = [53, 68, ["A", "B", "C"]]
y = copy.deepcopy(x)

当a的值改变时,b的值并不会变。

当然python也有set,只是数组用()表示,list用[]表示,set则用{}表示,不过还有个不可修改的frozenset,如a=frozenset({8, 4, 7}),那么a的内部元素是不可变的,当然a还是可以指向其它可变对象的,因为a本身只是一个引用。

下面简单的介绍一下python的控制结构:

if boolean_expression1:
    suite1
elif boolean_expression2:
    suite2
...
elif boolean_expressionN:
    suiteN
else:
    else_suite

上面的elif也可以省略。
if还有一种比较有意思的用法:

offset = 20 if boolean_expression else 10


循环也有两种,while与for in:

while boolean_expression:
    while_suite
else:
    else_suite
......
for expression in iterable:
    for_suite
else:
    else_suite

如:

s="china"
for i,v in enumerate(s):
	print(i,v)

其中i为索引,v为遍历的值。

python的异常机制与java类似:

try:
    try_suite
except exception_group1 as variable1:
    except_suite1
...
except exception_groupN as variableN:
    except_suiteN
else:
    else_suite
finally:
    finally_suite


方法定义也很简单,与java差不多:

def functionName(parameters):
    suite

如:
def heron(a, b, c):
    s = (a + b + c) / 2
    return math.sqrt(s * (s - a) * (s - b) * (s - c))


上面这些结构理解起来很容易,但是功能依然很强大。

python还有一些特别的东西,比如del语句,此语句表示删除对象的意思,它可以删除某个对象或某个集合内的一个对象,如del a或del a[1]。boolean值也有奇怪,比如True与False的第一个字母都要大写,None也是。

web开发做久了,很少接触到算法之类的东西,就算叫自己做个像上面一样的例子也是不容易的,开发有空做做C/S也是不错的啊。
  • 大小: 6.9 KB
  • 大小: 4.3 KB
  • 大小: 19 KB
分享到:
评论

相关推荐

    20个Python源码项目下载

    20个很不错的Python项目源码,其中包括适合毕业设计的项目。这些资源中涵盖了Django 3版本的项目: Django+Mysql+Bulma实现的商场管理系统源码 Python+Django实现基于人脸识别的门禁管理系统 Python+Flask+MySQL实现...

    Python数据分析与挖掘实战.zip_Python 数据挖掘_python_python 案例_python数据分析_挖掘实战

    Python的数据分析和挖掘的案例,非常不错

    Python创意游戏动画集_990.zip_Python游戏_python 游戏_python 游戏集源码_python动画_w

    同时,这也可以作为一个不错的项目集,供教学或自我提升时使用。 总的来说,《Python创意游戏动画集》是一个宝贵的资源,它将理论与实践结合,为Python学习者提供了一个丰富的实践平台,有助于提升编程能力和创造力...

    Python 3.10.12 for Windows 自编译版

    Python 3.10.12 是 Python 编程语言的一个稳定版本,专为 Windows 操作系统设计。这个自编译版本是由个人或社区成员独立编译的,...对于测试和学习目的,自编译版则是一个不错的尝试,可以让你体验到最新特性的优势。

    解决yum对python依赖版本问题

    如果条件不允许升级`yum`,那么修改解释器设置也是一个不错的选择。不过需要注意的是,在修改之前最好备份原有文件,以便在出现问题时能够迅速恢复。希望这些解决方案能帮助大家顺利解决遇到的相关问题。

    python讲得比较好的视频-有没有推荐好的python教学视频?.pdf

    对于 python⼊门学习或提升来说,是⼀个⾮常不错的选择: B站 这也是⼀个⾮常不错的python学习⽹站,不仅仅只是娱乐、⼋卦,内部也包含有许多python教学视频,既有基础⼊门,也有项⽬⽰例,内 容丰富、浅显易懂,...

    python入门教程一篇不错的Python入门教[参考].pdf

    Python 入门教程 Python 是一种流行的设计语言,广泛应用于软件开发领域。本文档提供了一个简短的 Python 入门教程,涵盖了 Python 的基本概念、环境设置、编程基础等方面的知识点。 1. 运行环境 要使用 Python,...

    Functional_Python_Programming

    一本很不错的python功能书! Functional programming defines a computation using expressions and evaluation—often encapsulated in function definitions. It de-emphasizes or avoids the complexity of state...

    python视频教程大全_Let's python从入门到精通系列视频教程

    Python,是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。 如果你想走进Python行业,通过一些不错的视频开始学习是个不错建议 Let's ...

    python-2.7.2环境安装

    在这个版本中,Python已经发展成熟,具有丰富的标准库和社区支持,对于初学者和专业开发者都是一个不错的选择。在本文中,我们将详细介绍如何在各种操作系统上安装Python 2.7.2环境。 1. **Windows安装**: - 下载...

    Python3.5.1百度云链接下载

    2. **列表推导式**:列表推导式的性能也得到了提升,使得在创建列表时更加高效。 3. **内存管理**:对于内存管理进行了优化,减少了内存碎片,提高了程序运行效率。 #### 兼容性和稳定性改进 1. **Unicode 处理**:...

    A Byte of Python v1.90 (for Python 3.0)

    此外,本书还提到了使用mwlib工具包生成PDF文档的方法,对于希望自行制作类似文档的读者来说也是一个不错的参考。更多关于mwlib的信息可访问[http://code.pediapress.com/](http://code.pediapress.com/)获取。

    廖雪峰python实战(一).pdf

    对于数据库的学习,菜鸟教程被认为是一个不错的资源,足以满足基础需求。 在项目开始之前,建议创建一个工作目录结构,按照廖雪峰教程中的指导进行。这样做有助于保持项目组织有序,随着学习的深入,每个目录的作用...

    仿360界面的python代码

    描述中提到这是一个"参考学习不错"的例子,意味着它可能包含了良好的编码实践和设计模式,适合初学者学习如何在Python中构建UI。通过研究这个项目,你可以了解到如何组织代码,实现交互式控件,以及如何布局UI元素来...

    python3.11.3的64位安装包

    对于初学者,"Python Crash Course" 和 "Automate the Boring Stuff with Python" 是不错的入门书籍。 10. **编程实践**:实践是学习Python的关键,可以从简单的编程挑战开始,如LeetCode或HackerRank上的题目,...

    python基础教程(第三版)学习笔记.pdf

    当然,Python自带的集成开发环境IDLE也是一个不错的选择。 在Python中,数值和表达式是基础概念。Python支持多种进制,包括十进制、八进制(前缀0)、十六进制(前缀0x)和二进制(前缀0b)。变量用于存储值,如`x ...

    python开发总结——c程序员python之路

    2. **《Python核心编程》**:对于想要深入了解Python高级特性的读者来说,《Python核心编程》是一个不错的选择。书中不仅涵盖了Python的基础知识,还深入讲解了诸如装饰器、上下文管理器等高级概念。 3. **...

    python 实现svn文件下载

    python 实现svn的代码下载,解决了请求认证,字符编码,地址长度问题。非常不错的例子。

Global site tag (gtag.js) - Google Analytics