作为脚本,python具备了弱类型语言的灵活性,便捷性。这在日常的开发使用中能够大幅度的减轻开发人员的编码负担,开发者也能够将精力集中在程序的逻辑管理和总体构架设计上。一般而言,随着经验的积累,开发人员都能使用python写出漂亮的代码,简洁而美观。

python也是严谨的,从对各类预定义错误的设定我们就可以发现python具备着编译语言具备的严密的逻辑结构。可以这么讲,随着对python的深入理解,就越能感受到python在提供各类便捷操作的同时依然保持了编译语言具有的严密逻辑,只是很多“隐藏”了。

那么,python具有着哪些值得称道的特性呢?

(一) python具有着强有力的粘连性,能够同c,c++,java等一同工作。

这是其他大多数语言所不具备的强有力的功能,这使得python能够同其他语言的功能代码以更好、更便捷的方式联合。将需要大量计算的部分通过编译语言来完成来提高程序的运行速度。

(二)python具备着跨平台的特性,并支持各类通用操作

python的强大与他的跨平台有着密不可分的联系。可以这么讲,现如今除了底层开发,如果一门语言或工具无法跨平台是很难在当下环境中获得普及与扩展的。python的优秀后台处理能力,将各类不同的平台,各类不同的工具以一致的接口方式实现了一次编写到处运行的目标(当然,部分需要适配各平台的注明)。

(三)也可以说,python是一款优秀的软件工具!

python通过c语言实现了核心语言,这部分包括着python的解释器。解释器起到的作用是将符合python语法规则的文本文件解释成python这款语言能够识别的指令,然后这类指令通过python这款软件实现目标功能。python的核心功能就是一个软件主体,而软件的各类功能以python规定的文本格式呈现。在大型的软件中,我们将很多关于界面配置等功能通过文本配置文件来控制,而python无疑在这方面做的更好。

(四)python的语法设计上的优势

python在语法设计上做了其他语言不具有的大胆开拓。

1.python的作用于不是通过花括号和结尾的分号,而是通过缩进,这使得整体代码变得简洁而小巧。

2.python通过字典和类实现了很多语法功能,这使得很多操作变得统一,虽然开始理解上有些别扭,但在操作上却是变得异常的简单。

  比如命名空间的实现就是通过字典来实现的

#命名空间scope
scope ={}
#在命名空间中预设变量 code ,值为namespace
scope['code'] = 'namespace' #字符串中为可执行的python脚本
pass
#设定代码
Sstring = """ a =12
b = 'new'
print('hello,world')
"""
pass
#执行那段字符串代码,并放入命名空间scope中
exec(Sstring,scope)

在没有执行exec(Sstring,scope)这行代码之前,变量scope就是一个普通的字典,但是经过这行代码之后,scope虽然仍然是字典,但是具备有很多额外的键值,很显然已经被python格式化为python的命名空间了。

python通过字典实现命名空间从而实现了变量名污染问题解决的一种方式,并且通过字典这类基础结构和通用的字典方法,初级开发人员能够很容易驾驭它。

当然,另一些其他语言不具备的变量名污染解决方法是globals(),locals(),nonlocals()函数。这类函数分别以字典的形式提供了所有全局变量,局部变量,外部局部变量。看到这里,你相比也已经被python强大的能力所折服了吧。

  python基本的序列和字典结构其实都是python的类。

python的列表[],元组(),字典{}其实都是类。

 >>> list.__bases__
(<class 'object'>,)
>>> tuple.__bases__
(<class 'object'>,)
>>> dict.__bases__
(<class 'object'>,)
>>> object
<class 'object'>
>>> object.__bases__
()
>>> help(object)
Help on class object in module builtins: class object
| The most base type

通过上面我们会发现,其实在python中,很多基本都东西在python底层都是通过类的形式来实现的。所以很多类可以使用list,tuple,dict作为基类。而object是没有基类的类,也是pythond顶级超类。

我们那list列表来说,他作为类存在通过__dict__可以获得所含有的变量

 >>> list.__dict__
>>>{'__add__': <slot wrapper '__add__' of 'list' objects>,
'__contains__': <slot wrapper '__contains__' of 'list' objects>,
'__delitem__': <slot wrapper '__delitem__' of 'list' objects>,
'__doc__': 'list() -> new empty list\n'
'list(iterable) -> new list initialized from '
"iterable's items",
'__eq__': <slot wrapper '__eq__' of 'list' objects>,
'__ge__': <slot wrapper '__ge__' of 'list' objects>,
'__getattribute__': <slot wrapper '__getattribute__' of 'list' objects>,
'__getitem__': <method '__getitem__' of 'list' objects>,
'__gt__': <slot wrapper '__gt__' of 'list' objects>,
'__hash__': None,
'__iadd__': <slot wrapper '__iadd__' of 'list' objects>,
'__imul__': <slot wrapper '__imul__' of 'list' objects>,
'__init__': <slot wrapper '__init__' of 'list' objects>,
'__iter__': <slot wrapper '__iter__' of 'list' objects>,
'__le__': <slot wrapper '__le__' of 'list' objects>,
'__len__': <slot wrapper '__len__' of 'list' objects>,
'__lt__': <slot wrapper '__lt__' of 'list' objects>,
'__mul__': <slot wrapper '__mul__' of 'list' objects>,
'__ne__': <slot wrapper '__ne__' of 'list' objects>,
'__new__': <built-in method __new__ of type object at 0x000000005BAFF530>,
'__repr__': <slot wrapper '__repr__' of 'list' objects>,
'__reversed__': <method '__reversed__' of 'list' objects>,
'__rmul__': <slot wrapper '__rmul__' of 'list' objects>,
'__setitem__': <slot wrapper '__setitem__' of 'list' objects>,
'__sizeof__': <method '__sizeof__' of 'list' objects>,
'append': <method 'append' of 'list' objects>,
'clear': <method 'clear' of 'list' objects>,
'copy': <method 'copy' of 'list' objects>,
'count': <method 'count' of 'list' objects>,
'extend': <method 'extend' of 'list' objects>,
'index': <method 'index' of 'list' objects>,
'insert': <method 'insert' of 'list' objects>,
'pop': <method 'pop' of 'list' objects>,
'remove': <method 'remove' of 'list' objects>,
'reverse': <method 'reverse' of 'list' objects>,
'sort': <method 'sort' of 'list' objects>}

我们发现我们list中所能用到的方法append,clear,copy,count,extend,index,insert等方法都是类list的对象方法,而前面添加了双下划线的__的方法都是类的“私有方法”,这类方法很多是在我们使用通用的操作setatter,getatter时python为我们自动连接并调用的方法。而对于自定义的类想改变这些自动的功能只需要重写这部分函数即可。通过方括号[]取值,分片取值等操作就是__getitem__在起作用

 >>> getattr(list,'append',None)
<method 'append' of 'list' objects>

  python中的类,模块,变量本质上将可以归结为内存中的功能化的地址块(指针)

这些是脚本语言的通用方式,弱语言的本质不是不对值做类型检查和限定,而是他们在设计上为了便捷使用,而将这部分类型转换和类型判断通过隐形转换和内存指针在我们背后默默做了大量工作。正是因为所有的所有在底层指针化,我们可以通过=符号能够进行赋值、函数引用(复制指针地址),创建对象(复制创建的对象地址)等等。所以,要想了解python内部的内存回收和底层功能需要对指针,内存有着足够的理解。

python之总体理解的更多相关文章

  1. python源码学习(一)——python的总体架构

    python源码学习(一)——python的总体架构 学习环境: 系统:ubuntu 12.04 STLpython版本:2.7既然要学习python的源码,首先我们要在电脑上安装python并且下载 ...

  2. Python的多线程理解,转自虫师https://www.cnblogs.com/fnng/p/3670789.html

    多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...

  3. 对python变量的理解

    #!/usr/bin/python class Person: '''some words content or descriptions!''' name='luomingchuan' _age = ...

  4. Python——五分钟理解函数式编程与闭包

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听 ...

  5. python描述符理解

    Python中的描述符是一个相对底层的概念 descriptor Any object which defines the methods get(), set(), or delete(). Whe ...

  6. python decorator的理解

    一.decorator的作用 装饰器本质上是一个Python函数,可以让其他函数在不做任何代码变动的前提下增加额外功能. 装饰器的返回值也是一个函数对象.python里函数也是对象. 它经常用于有切面 ...

  7. 关于python的__name__理解

    Python中,每个模块有个__name__属性,当模块是在自己文件下执行的,那么它的__name__属性是__main__,而当它被引入到别的模块中,那么在别的模块下(import模块名 可以引入一 ...

  8. python 赋值,交换值理解

    python里的赋值都是引用,第一次赋值就是定义. 看下面两个交换值的例子: 1. >>> a,b,c = 1,2,3 >>> a = b >>> ...

  9. Python单元测试——深入理解unittest (转)

    单元测试的重要性就不多说了,可恶的是Python中 有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, no ...

随机推荐

  1. JQuery--Ajax 异步操作 动态添加节点 (新人试水,求支持)

    异步操作动态添加节点,导致在代码中给添加的节点全局绑定事件或者获取元素无效,上代码: $(function () { var IP = '...'; // 页面中的默认编号起始值 和 公用IP前缀 s ...

  2. android 定时器(Handler Timer Thread AlarmManager CountDownTimer)

    Android实现定时任务一般会使用以上(Handler Timer Thread AlarmManager CountDownTimer)五种方式.当然还有很多组合使用(比如Handler+Thre ...

  3. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  4. [python标准库]XML模块

    1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词. ...

  5. 软件测试基础(软件测试分类和工具组)firebug、firepath的安装

    白盒测试:需要了解内部结构和代码 黑盒测试:不关心内部结构和代码 灰盒测试:介于白盒黑盒之间 静态测试:测试时不执行被测试软件 动态测试:测试时执行被测试软件 单元测试:测试软件的单元模块 集成测试: ...

  6. git rebase -i命令修改commit历史

    [TOC] 修改commit历史的前提 修改历史的提交是可能有风险的,是否有风险取决于commit是否已经推送远程分支,未推送,无风险,如果已推送,就千万不要修改commit了. 修改commit历史 ...

  7. Spring学习(19)--- Schema-based AOP(基于配置的AOP实现) --- 配置切面aspect

    Spring所有的切面和通知器都必须放在一个<aop:config>内(可以配置包含多个<aop:config>元素),每个<aop:config>包含pointc ...

  8. windows手动搭建Kotlin命令行环境

    kotlin官网:https://kotlinlang.org 我们可以从GitHub下载.目前最新版本是1.1.2-5 https://github.com/JetBrains/kotlin/rel ...

  9. 《Python编程从入门到实践》_第五章_if语句

    条件测试 每条if语句的核心都是一个值为Ture或False的表达式,这种表达式被称为为条件测试.Python根据条件测试的值为Ture还是False来决定是否执行if语句中的代码.如果条件测试的值为 ...

  10. 【翻译Autofac的帮助文档】1.入门指南

    [写在前面]尝试做完一件工作之外自我觉得有意义的一件事,那就从翻译Autofac的帮助文档吧. 入门指南 将Autofac集成你的应用程序的步骤通常很简单,一般是: 时刻以IOC(控制反转)的思想来规 ...