作为脚本,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. leetcode算法题(JavaScript实现)

    题外话 刷了一段时间的codewars的JavaScript题目之后,它给我最大的感受就是,会帮助你迅速的提升你希望练习的语言的API的熟悉程度,Array对象.String对象等原生方法,构造函数. ...

  2. Java代码编写规范(不是标准规范,自行整理,无须纠结)

    最近回过头来给以前的项目增加功能,发现之前写的注释非常不全,代码也非常的不整洁,有些地方写的''窝七八烂的,看着很不舒服:又恰好经理最近也经常跟我提起代码规范,我们就讨论了一下代码规范的重要性和必要性 ...

  3. Promise,Async,await简介

    Promise 对象 转载:http://wiki.jikexueyuan.com/project/es6/promise.html 基本用法 ES6 原生提供了 Promise 对象.所谓 Prom ...

  4. homebrew & brew cask使用技巧及Mac软件安装

    homebrew 安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/m ...

  5. CSDN删除上传资源的办法

    转自网友:http://blog.csdn.net/ssergsw/article/details/12489101 我按照下面的方法一试,果然成功了. 昨天晚上进行测试,上传了一个压缩包和大家分享, ...

  6. KVM之Live Migration

    1.安装KVM必要的软件包 #sudo apt-get install qemu-kvm bridge-utilus 2.制作虚拟机映像ubuntu-12.04.qcow2 $qemu-img cre ...

  7. Oracle Job定时任务的使用详解

    oracle中的job能为你做的就是在你规定的时间格式里执行存储过程,定时执行一个任务 .下面是一个小案例,定时每15分钟向一张表插入一条数据 一 1.创建一张测试表 -- Create table ...

  8. Linux网络服务10——远程访问及控制

    Linux网络服务10--远程访问及控制 一.SSH概述 1.SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数 ...

  9. 几种MQ消息队列对比与消息队列之间的通信问题

    消息队列 开发语言 协议支持 设计模式 持久化支持 事务支持 负载均衡支持 功能特点 缺点 RabbitMQ Erlang AMQP,XMPP,SMTP,STOMP 代理(Broker)模式(消息在发 ...

  10. 框架基础:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码

    距离上一篇博客书写,又过去了大概几个月了,这段时间暂时离开了这个行业,让大脑休息一下.一个人旅行,一个人休息,正好也去完成一个目标 --- 拥有自己的驾照.当然,也把自己晒的黑漆马虎的.不过这一段时间 ...