如何理解这一段怎么学习pythonn代码

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!如何深入了解python原理? - 知乎505被浏览<strong class="NumberBoard-itemValue" title="5分享邀请回答8718 条评论分享收藏感谢收起332 条评论分享收藏感谢收起一张图认识python
一张图认识python
很多大学生对编程的热情却空前的高涨,有的是跨行业学编程,有的是在校生学编程,有的是程序员学习新的编程语言。那么今天,咱们就来说说学习编程语言的那些事儿。当然,今天的主角是python。
说其他编程语言之前,我们先说说编程语言的梗:
“PHP是世界上最好的语言”
“所有的程序都将用JavaScript重写”
“人生苦短,我用python”
只会JavaScript的前端程序员总是被后台欺负,只会php的程序员总是被全世界欺负,而python,短小精干、楚楚动人,即使我只会用python,也可以堂堂正正第说一句“人生苦短,我用python”,然后默念:“我就是不在鄙视链中混,爱咋地咋地!”(玩笑~高兴就好~)。
咱们今天就用一张图来让大家认识,什么是python。
看完这张图,您掌握python了吧,好,可以去撸代码了~
开个玩笑,哪有这么简单。
作为一个前端老鸟,python对我来说并不是主语言,我怎么忍心让大家在我没有充分准备的情况下听我讲python呢,但是作为一个程序员,我还是有一些经验可以分享给大家的,这些经验适用于任何编程语言,所有大家想学编程,不妨听听(这里我假设大家没有任何编程基础)。
很多朋友以为掌握了一门编程语言就可以当程序员了,其实并非如此(我入行之前就是这么想的,结果碰一鼻子灰),除了编程语言本身,还有框架、库、算法、计算机基础知识、操作系统知识、计算机网络知识。
就拿前段时间“跳一跳辅助工具”来说,并不是掌握了python就能写出来的,原作者并不是python程序员,而是做机器人的,主要与硬件和算法打交道,python只是实现自己想法的一个工具而已。
再说说“跳一跳辅助工具”程序本身,大家都知道是python写的,但是里面涉及道哪些是安卓的知识,哪些是操作系统的知识,哪些是需要算法的知识,这些都不是单单学会了python就能掌握的,所以路漫漫其修远兮,想写好程序,一定要有毅力、或乐趣、或学习环境、或工作环境,否则一定会在碰壁多次后主动放弃。
可惜没有python的图
我总是喜欢拿编程语言和自然语言比较,就说python,有的人写的是诗,有的人写的是屎,就像我们都会汉语,写出来的文章水平也是不一样的。
还有,我们再用汉语交流的,也不只是用汉语本身,汉语只是一个内容的载体,我们可以聊历史,聊宗教,聊数学,聊编程,不管聊什么,都不是掌握了汉语语法可以搞定的。编程也是一样,我用python做web开发就用web框架,用python做数据分析就用数据分析框架,编程语言同样是内容的载体,是我们要表达想法的一个工具,我们在掌握了语言的基本语法之后,才正式开始我们的编程之路。
当然,不管怎样还是要从基础学起,这里强烈推荐廖雪峰老师的python教程,百度搜搜就能找到。
最后,希望有兴趣成为程序员的朋友,可以克服层层阻碍,在2018年,心想事成。理解Python命名机制
引子 我热情地邀请大家猜测下面这段程序的输出: class A(object): def
__init__( self ): self .__private() self .public() def __private(
self ): print 'A.__private()' def public( self ): print
'A.public()' class B(A): def
我热情地邀请大家猜测下面这段程序的输出:&
class&A(object):
&&&&&&&def&__init__(self):
&&&&&&&&&&&&&&self.__private()
&&&&&&&&&&&&&&self.public()
&&&&&&&def&__private(self):
&&&&&&&&&&&&&&print&'A.__private()'&
&&&&&&&def&public(self):
&&&&&&&&&&&&&&print&'A.public()'&
class&B(A):
&&&&&&&def&__private(self):
&&&&&&&&&&&&&&print&'B.__private()'&
&&&&&&&def&public(self):
&&&&&&&&&&&&&&print&'B.public()'&
正确的答案是:
A.__private()
B.public()&
如果您已经猜对了,那么可以不看我这篇博文了。如果你没有猜对或者心里有所疑问,那我的这篇博文正是为您所准备的。
一切由为什么会输出“A.__private()”开始。但要讲清楚为什么,我们就有必要了解一下的命名机制。
manual,变量名(标识符)是Python的一种原子元素。当变量名被绑定到一个对象的时候,变量名就指代这个对象,就像人类社会一样,不是吗?当变量名出现在代码块中,那它就是本地变量;当变量名出现在模块中,它就是全局变量。模块相信大家都有很好的理解,但代码块可能让人费解些。在这里解释一下:
代码块就是可作为可执行单元的一段Python程序文本;模块、函数体和类定义都是代码块。不仅如此,每一个交互脚本命令也是一个代码块;一个脚本文件也是一个代码块;一个命令行脚本也是一个代码块。
接下来谈谈变量的可见性,我们引入一个范围的概念。范围就是变量名在代码块的可见性。如果一个代码块里定义本地变量,那范围就包括这个代码块。如果变量定义在一个功能代码块里,那范围就扩展到这个功能块里的任一代码块,除非其中定义了同名的另一变量。但定义在类中的变量的范围被限定在类代码块,而不会扩展到方法代码块中。
据上节的理论,我们可以把代码分为三个代码块:类A的定义、类B的定义和变量b的定义。根据类定义,我们知道代码给类A定义了三个成员变量(Python的函数也是对象,所以成员方法称为成员变量也行得通。);类B定义了两个成员变量。这可以通过以下代码验证:
'\n'.join(dir(A))
_A__private
'\n'.join(dir(B))
_A__private
_B__private
咦,为什么类A有个名为_A__private的 Attribute
呢?而且__private消失了!这就要谈谈Python的私有变量轧压了。
懂Python的朋友都知道Python把以两个或以上下划线字符开头且没有以两个或以上下划线结尾的变量当作私有变量。私有变量会在代码生成之前被转换为长格式(变为公有)。转换机制是这样的:在变量前端插入类名,再在前端加入一个下划线字符。这就是所谓的私有变量轧压(Private
mangling)。如类A里的__private标识符将被转换为_A__private,这就是上一节出现_A__private和__private消失的原因了。
再讲两点题外话:
一是因为轧压会使标识符变长,当超过255的时候,Python会切断,要注意因此引起的命名冲突。
二是当类名全部以下划线命名的时候,Python就不再执行轧压。如:
class ____(object):
def __init__(self):
&&&&&&&&&&&&&
self.__method()
def __method(self):
&&&&&&&&&&&&&
print '____.__method()'
'\n'.join(dir(____))
__delattr__
__getattribute__
__method&&&&&&&&&&&&&
# 没被轧压
__module__
__reduce__
__reduce_ex__
__setattr__
__weakref__
&&& obj = ____()
____.__method()
obj.__method()&&&&&
# 可以外部调用
____.__method()
现在我们回过头来看看为什么会输出“A.__private()”吧!
相信现在聪明的读者已经猜到答案了吧?如果你还没有想到,我给你个提示:真相跟C语言里的宏预处理差不多。
因为类A定义了一个私有成员函数(变量),所以在代码生成之前先执行私有变量轧压(注意到上一节标红的那行字没有?)。轧压之后,类A的代码就变成这样了:
class A(object):
def __init__(self):
self._A__private()&&&&&&&&&
# 这行变了
self.public()
_A__private(self):&&&&&&&&&&
# 这行也变了
print 'A.__private()'
def public(self):
print 'A.public()'&
是不是有点像C语言里的宏展开啊?
因为在类B定义的时候没有覆盖__init__方法,所以调用的仍然是A.__init__,即执行了self._A__private(),自然输出“A.__private()”了。
下面的两段代码可以增加说服力,增进理解:
class C(A):
__init__(self):&&&&&&&&&
# 重写__init__,不再调用self._A__private
&&&&&&&&&&&&&
self.__private()&&&&&&
# 这里绑定的是_C_private
&&&&&&&&&&&&&
self.public()
def __private(self):
&&&&&&&&&&&&&
print 'C.__private()'
def public(self):
&&&&&&&&&&&&&
print 'C.public()'
&&& c = C()
C.__private()
C.public()
############################
A(object):
def __init__(self):
&&&&&&&&&&&&&
self._A__private()&& #
调用一个没有定义的函数,Python会把它给我的 ^_^~
&&&&&&&&&&&&&
self.public()
def __private(self):
&&&&&&&&&&&&&
print 'A.__private()'
def public(self):
&&&&&&&&&&&&&
print 'A.public()'
&&&a = A()
A.__private()
A.public()
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。&Python 是一种解释性语言,解释性语言跟编译语言的区别,形象的比喻就是: 解释型语言是吃火锅,编译型语言是炒好菜,直接吃. 比喻二: 解释型是说一句翻译一句,编译型,说完所有的再翻译
&解释型语言: 执行一句代码生成一段字节码(与平台无关的中间码),代码在虚拟机(python解释器)里执行,转换成目标平台(cpu)上的指令, 再到cpu里执行.
&编译型语言: 是一次性将代码全部生成机器语言(目标平台上的指令),再到指定cpu里执行.所以编译型语言,要到其他cpu中运行,代码需要重新编译.
&两者区别: 一, 执行一句生成一段, 一次性. 二, 有虚拟机, 无虚拟机-à 解释型,可以在多平台运行, 编译型在指定平台运行.
Python是动态语言. 在创建新的变量时,不用去指定变量的类型,
Python是面向对象的语言. 通过组合(类里写类)和派生(继承)来定义类.
在python中,函数和类都是第一类对象. 什么是第一类对象:
第一类对象不一定是所指的物件,而可以指任何程序中的实体。一般第一类对象所特有的特性为:
可以被存入变量或其他结构
可以被作为参数传递给其他函数
可以被作为函数的返回值
可以在执行期创造,而无需完全在设计期全部写出
即使没有被系结至某一名称,也可以存在
Python将简单的事情变得容易,让程序眼可以将精力放在算法和数据结构的设计上,不用纠结底层的细节.
Python应用广泛, 比如网络应用, 数据建模,大数据应用,自动化.
Python编码快,但运行速度慢.但可以加入C语言写的扩展,
阅读(...) 评论()

我要回帖

更多关于 如何快速理解代码 的文章

 

随机推荐