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的列表[],元组(),字典{}其实都是类。

 1 >>> list.__bases__
 2 (<class ‘object‘>,)
 3 >>> tuple.__bases__
 4 (<class ‘object‘>,)
 5 >>> dict.__bases__
 6 (<class ‘object‘>,)
 7 >>> object
 8 <class ‘object‘>
 9 >>> object.__bases__
10 ()
11 >>> help(object)
12 Help on class object in module builtins:
13
14 class object
15  |  The most base type

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

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

 1 >>> list.__dict__
 2 >>>{‘__add__‘: <slot wrapper ‘__add__‘ of ‘list‘ objects>,
 3 ‘__contains__‘: <slot wrapper ‘__contains__‘ of ‘list‘ objects>,
 4 ‘__delitem__‘: <slot wrapper ‘__delitem__‘ of ‘list‘ objects>,
 5 ‘__doc__‘: ‘list() -> new empty list\n‘
 6          ‘list(iterable) -> new list initialized from ‘
 7          "iterable‘s items",
 8 ‘__eq__‘: <slot wrapper ‘__eq__‘ of ‘list‘ objects>,
 9 ‘__ge__‘: <slot wrapper ‘__ge__‘ of ‘list‘ objects>,
10 ‘__getattribute__‘: <slot wrapper ‘__getattribute__‘ of ‘list‘ objects>,
11 ‘__getitem__‘: <method ‘__getitem__‘ of ‘list‘ objects>,
12 ‘__gt__‘: <slot wrapper ‘__gt__‘ of ‘list‘ objects>,
13 ‘__hash__‘: None,
14 ‘__iadd__‘: <slot wrapper ‘__iadd__‘ of ‘list‘ objects>,
15 ‘__imul__‘: <slot wrapper ‘__imul__‘ of ‘list‘ objects>,
16 ‘__init__‘: <slot wrapper ‘__init__‘ of ‘list‘ objects>,
17 ‘__iter__‘: <slot wrapper ‘__iter__‘ of ‘list‘ objects>,
18 ‘__le__‘: <slot wrapper ‘__le__‘ of ‘list‘ objects>,
19 ‘__len__‘: <slot wrapper ‘__len__‘ of ‘list‘ objects>,
20 ‘__lt__‘: <slot wrapper ‘__lt__‘ of ‘list‘ objects>,
21 ‘__mul__‘: <slot wrapper ‘__mul__‘ of ‘list‘ objects>,
22 ‘__ne__‘: <slot wrapper ‘__ne__‘ of ‘list‘ objects>,
23 ‘__new__‘: <built-in method __new__ of type object at 0x000000005BAFF530>,
24 ‘__repr__‘: <slot wrapper ‘__repr__‘ of ‘list‘ objects>,
25 ‘__reversed__‘: <method ‘__reversed__‘ of ‘list‘ objects>,
26 ‘__rmul__‘: <slot wrapper ‘__rmul__‘ of ‘list‘ objects>,
27 ‘__setitem__‘: <slot wrapper ‘__setitem__‘ of ‘list‘ objects>,
28 ‘__sizeof__‘: <method ‘__sizeof__‘ of ‘list‘ objects>,
29 ‘append‘: <method ‘append‘ of ‘list‘ objects>,
30 ‘clear‘: <method ‘clear‘ of ‘list‘ objects>,
31 ‘copy‘: <method ‘copy‘ of ‘list‘ objects>,
32 ‘count‘: <method ‘count‘ of ‘list‘ objects>,
33 ‘extend‘: <method ‘extend‘ of ‘list‘ objects>,
34 ‘index‘: <method ‘index‘ of ‘list‘ objects>,
35 ‘insert‘: <method ‘insert‘ of ‘list‘ objects>,
36 ‘pop‘: <method ‘pop‘ of ‘list‘ objects>,
37 ‘remove‘: <method ‘remove‘ of ‘list‘ objects>,
38 ‘reverse‘: <method ‘reverse‘ of ‘list‘ objects>,
39 ‘sort‘: <method ‘sort‘ of ‘list‘ objects>}

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

1 >>> getattr(list,‘append‘,None)
2 <method ‘append‘ of ‘list‘ objects>

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

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

时间: 2024-10-08 00:11:58

python之总体理解的相关文章

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

python源码学习(一)——python的总体架构 学习环境: 系统:ubuntu 12.04 STLpython版本:2.7既然要学习python的源码,首先我们要在电脑上安装python并且下载python的源码,ubuntu 12.04 STL自带的python版本为2.7.3,这就可以了,接下来下载源码,下载python2.7.7的源代码,下载结束后解压文件,我们会看到如下文件结构:,接下来介绍一下,demo文件夹里放的是一些例子:Doc文件夹里放的是文档,Grammer是语法分析器,

python多进程的理解 multiprocessing Process join run

最近看了下多进程. 一种接近底层的实现方法是使用 os.fork()方法,fork出子进程.但是这样做事有局限性的.比如windows的os模块里面没有 fork() 方法. windows:.linux: 另外还有一个模块:subprocess.这个没整过,但从vamei的博客里看到说也同样有局限性. 所以直接说主角吧 --- multiprocessing模块. multiprocessing模块会在windows上时模拟出fork的效果,可以实现跨平台,所以大多数都使用multiproce

对于python WSGI的理解

首先看看WSGI的目的是什么? 是用来定义一个统一的接口. 这个接口是针对Web服务器和python Web应用之间的. 以增加Python web应用在不同Web 服务器之间的可移植性. 也就是说如果使用Apache是一种做法, 使用IIS是另外一种做法. 如果都支持的话,那么编写的Web application是通用的. 对于python WSGI的理解

Python——五分钟理解元类(metaclasses)

“元类的魔幻变化比 99% 的用户所担心的更多,当你搞不懂是否真的需要用它的时候,就是不需要.” —Tim Peters 本文源于在 PyCon UK 2008 上的一个快速演讲. 元类被称为 Python 中的“深奥的巫术”.尽管你需要用到它的地方极少(除非你基于zope 编程),可事实上它的基础理论其实令人惊讶地易懂. 一切皆对象 一切皆对象 一切都有类型 “class”和“type”之间本质上并无不同 类也是对象 它们的类型是 type 以前,术语 type 用于内置类型,而术语 clas

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

多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序. (好吧!我们不纠结在DOS时代是否有听音乐和看影的应用.^_^) from time import ctime,sleep def music(): for i in range(2): prin

(转)Python中如何理解if __name__ == &#39;__main__&#39;

摘要 通俗的理解 __name__ == '__main__' :假如你叫李凯.py,在朋友眼中,你是李凯( __name__ == '李凯' ):在你自己眼中,你是你自己( __name__ == '__main__' ). if __name__ == '__main__' 的意思是:当.py文件被直接运行时, if __name__ == '__main__' 之下的代码块将被运行:当.py文件以模块形式被导入时, if __name__ == '__main__' 之下的代码块不被运行.

关于python的__name__理解

Python中,每个模块有个__name__属性,当模块是在自己文件下执行的,那么它的__name__属性是__main__,而当它被引入到别的模块中,那么在别的模块下(import模块名 可以引入一个模块),他的__name__值是他的文件名,这样的设定其实不好理解其用处. 很多时候,我们在一个模块写了一段优美的程序,并且下面也用到了这一段优美的程序,然而,优美的程序在个个模块都是可以用的,但是我们又不想引入模块后,执行引入模块的程序,例子如下: #conding:urf-8 #Ppython

Python super初始化理解过程

Python中子类调用父类的方法有两种方法能够实现:调用父类构造方法,或者使用super函数(两者不要混用). 使用“super”时经常会出现代码“super(FooChild,self).__init__(xxx,xxx)”.那super().__init__()到底要怎么用呢? 为了方便理解,我写了如下例子验证用法: #-*- coding:utf-8 -*-class A(object): def __init__(self,xing,gender): #!#1 self.namea="a

python单元测试--深入理解unittest

单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试, 光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西.但是作为一个优秀的程序员,不仅要写好功能代码,写好测试代码一样的彰