python之总体理解
作为脚本,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之总体理解的更多相关文章
- python源码学习(一)——python的总体架构
python源码学习(一)——python的总体架构 学习环境: 系统:ubuntu 12.04 STLpython版本:2.7既然要学习python的源码,首先我们要在电脑上安装python并且下载 ...
- Python的多线程理解,转自虫师https://www.cnblogs.com/fnng/p/3670789.html
多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...
- 对python变量的理解
#!/usr/bin/python class Person: '''some words content or descriptions!''' name='luomingchuan' _age = ...
- Python——五分钟理解函数式编程与闭包
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听 ...
- python描述符理解
Python中的描述符是一个相对底层的概念 descriptor Any object which defines the methods get(), set(), or delete(). Whe ...
- python decorator的理解
一.decorator的作用 装饰器本质上是一个Python函数,可以让其他函数在不做任何代码变动的前提下增加额外功能. 装饰器的返回值也是一个函数对象.python里函数也是对象. 它经常用于有切面 ...
- 关于python的__name__理解
Python中,每个模块有个__name__属性,当模块是在自己文件下执行的,那么它的__name__属性是__main__,而当它被引入到别的模块中,那么在别的模块下(import模块名 可以引入一 ...
- python 赋值,交换值理解
python里的赋值都是引用,第一次赋值就是定义. 看下面两个交换值的例子: 1. >>> a,b,c = 1,2,3 >>> a = b >>> ...
- Python单元测试——深入理解unittest (转)
单元测试的重要性就不多说了,可恶的是Python中 有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, no ...
随机推荐
- java基础-四种方法引用
实例 直接三角形,通过两边算第三边,目的是为了如何使用这几种方法引用.代码中多有些不合适,尽情原谅. 静态方法引用 接口的参数列表与类中的具体实现方法的参数列表一样,返回值一致. 调用 //静态引用 ...
- 包装FTPWebRequest类
上篇文章讨论了C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密.不过细心的朋友应该可以发现FTPWebRequest 每次都是新生成一个reques ...
- JavaBean自动生成get和set方法
用Myeclipse开发java web程序,写javabean的时候,如果字段很多的话,写get和set方法是一件很无语和浪费时间的事情,所以Myeclipse提供了一个自动生成这些方法的功能. ...
- lvs之 lvs原理架构介绍
一. 概念 lvs的术语: Router:GWIP vs:virtual server,director rs:real server CIP:client IP VIP:virtual server ...
- Dom 简介
HTML DOM 简介 DOM 教程 DOM 节点 HTML DOM 定义了访问和操作 HTML 文档的标准. 您应该具备的基础知识 在您继续学习之前,您需要对以下内容拥有基本的了解: HTML CS ...
- [0] JDK与JRE的区别
JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境.SDK是Software Development Kit 一般指软件 ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- Linux网络编程“惊群”问题总结
1.前言 我从事Linux系统下网络开发将近4年了,经常还是遇到一些问题,只是知其然而不知其所以然,有时候和其他人交流,搞得非常尴尬.如今计算机都是多核了,网络编程框架也逐步丰富多了,我所知道的有多进 ...
- 学习 ES6,一篇文章就够了
ES6 简介 ECMAScript 6 简称 ES6,是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了.它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程 ...
- Socket实现
网络实现架构 4.4BSD通过同时对多种通信协议的支持来提供通用的底层基础服务.4.4BSD支持四种不同的通信协议簇: TCP/IP(互联网协议簇) XNS(Xerox网络系统) OSI协议 Unix ...