14.执行环境

原创 2015年11月20日 17:49:41

1、python可以运行操作系统的命令,这个嘛,确实厉害啊。


2、python的4种可调用分类:函数、方法、类、以及类的实例对象


a、函数:python主要分为3种类型的函数  (python中一样 everything is object,一切都是实例对象,所以函数的类型通过type()函数看到

第一种:内建函数或者叫内置函数(BIFs)builtin_function(你也可以理解成python自己写好的函数),内建函数在_bulitin_模块里哦

下面是内建函数(BIFs)的一些常见属性


__doc__ :代表的是内置函数的api文档吧,算,哈哈

__name__ : 内置函数名字,字符串类型哈

__self__ :  设置为None(保留给built-in 方法)

__module__ :存放内建函数的模块的名字, 必然是__builtin__


你还可以使用dir()函数,传入函数名字,会返回一个函数所拥有的所有属性的List

>>> dir(dir)
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
dir函数,再查看dir函数有哪些属性……,呵呵,别晕了


让我们再用type函数看看dir的类型

>>> type(dir)
<type 'builtin_function_or_method'>
……………………………………………………………………………………华丽丽的分割线…………………………………………………………………………………………………


第二种:是咱们自己写的函数(称为用户定义的函数 UDF,全称为:User-Defined Function) 

定义在模块的最高级里面(就是没有空格字符,没有缩进)

也有默认的属性哦亲(自己查去吧dir(函数名字)):

udf.__doc__
udf.__name__
udf.func_code
udf.func_defaults
udf.func_globals
udf.func_dict
udf.func_doc
udf.func_name
udf.func_closure 


让我们看看自己创建的函数,函数类型是个啥(注意别混淆成返回值类型)

>>> def fkMe():
	pass

>>> type(fkMe)
<type 'function'>
哈哈,是 function 



第三种:匿名函数,嘿嘿,自己看吧

<span style="font-size:12px;"> >>> lambdaFunc = lambda x: x * 2
    >>> lambdaFunc(100)
    200
     >>> type(lambdaFunc)
     <type 'function'></span>

匿名函数也是自己自定义的函数哦,只是没有名字而已,所以内建的属性都有哦 __name__啦 等等

>>> type(lambda:1)
<type 'function'>
我就fk了,lambda,我用的太少了,这是我的缺点……………………

>>> lambadaFu = lambda x: x * 100
>>> lambadaFu.__name__
'<lambda>'



b、方法:python中的方法有几种?内建方法(英文简称BIMs,也叫内置方法,名称呵呵)、用户自定义的方法,目前就这两种


第一种:内建方法,比如List、元组、字典中定义的方法

>>> type([].append)
<type 'builtin_function_or_method'>
>>> type([])
<type 'list'>


这句户有价值:此外,BIM 和BIF 两者也都享有相同属性。不同之处在于BIM 的__self__属性指向一个Python
对象,而BIF 指向None



第二种:咱们自己写在类里的方法,UDM(User-defined method,用户定义的方法)



内建方法与自己写的方法也一样拥有内建属性:__doc__、__name__等等



c、类:用类创建实例对象

书上说:利用类的可调用性创建实例。还强调了类有一个默认的构造函数(里面啥也没做,就写了pass),当然你也可以自定义构造函数 __init__(xx, xx)

关于类的调用,就先说到这里吧……哈哈


d、类的实例对象,重写__call__这个特别方法,具体看下面吧(这里要注意加深理解,一定要明白这个__call__()方法是干嘛用的

牛逼,大写的牛逼,谁曾想,作者还能想到把实例对象,当作一个函数来用,我cao,牛逼

<span style="font-family:SimSun;">class Person(object):
    def __init__(self, personName):
        self.name = personName

    def __call__(self):
        return self.name
    

if __name__ == '__main__':
    p = Person("wang yuan wai")
    print p()</span>
输出结果:

wang yuan wai

当你使用p()时,会调用对应的__call__方法


插曲:callable()、


3、执行

比如我f5运行这个脚本

<span style="font-size:12px;">def temp():
    print("temp()")


temp() #这个会被执行,因为它处于最高级别(即没有缩进的代码)
</span>


4、导入模块,即会执行最高级别的代码(即没有缩进的代码)
例子: 
首先:新建一个import2.py 文件 就只有这么一行代码
<span style="font-size:12px;">print('loaded import2')
</span>

然后:新建一个import1.py文件,代码如下
<span style="font-size:12px;">import import2

print("import 1")
</span>

接着:执行import1.py文件
结果:

<span style="font-size:12px;">>>> 
loaded import2 #这里就是 import import2带来的作用,我们看到它执行了import2模块的语句
import 1 
>>> </span>

总结:导入模块的副作用是会执行所有最高级别的代码

5、将模块作为脚本执行(2.4版本后加入的东东)
例如:在cmd下执行import1模块
D:\temp>python import1.py

6、转载:__name__ == '__main__'的作用

很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的?

有句话经典的概括了这段代码的意义:

“Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行

这句话,可能一开始听的还不是很懂。下面举例说明:

先写一个模块:

?
1
2
3
4
5
#module.py
defmain():
  print"we are in %s"%__name__
if__name__=='__main__':
  main()

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了main():

但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?

?
1
2
3
#anothermodle.py
frommoduleimportmain
main()

其执行的结果是:we are in module

但是没有显示”we are in __main__“,也就是说模块__name__ = '__main__' 下面的函数没有执行。

这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。

总结一下:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!



7、将模块作为脚本执行
windows下当然是以当前目录寻找这个【脚本文件名】
python 脚本文件名

8、结束执行
所有模块最高级的语句执行完毕后,python就结束执行了

9、这章我表现的不怎么样,继续加油吧…………








版权声明:本文为博主原创文章,未经博主允许不得转载。

javascript的执行环境及作用域概念总结与理解

一、关于JavaScript代码分类:在javascript中,可执行的JavaScript代码分三种类型: 1. Global Code:即全局的、不在任何函数里面的代码,例如:一个js文件...
  • javaloveiphone
  • javaloveiphone
  • 2015年12月14日 23:26
  • 574

javascript中的执行环境和作用域详解

执行环境(execution context)是js中最为重要的一个概念,执行环境定义了变量或者函数有权访问的其他数据,决定了他们各自的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变...
  • Tyro_java
  • Tyro_java
  • 2016年04月12日 23:37
  • 1231

原生JS执行环境与作用域深入理解

原生JS执行环境与作用域深入理解
  • liujie19901217
  • liujie19901217
  • 2016年08月18日 19:42
  • 3292

执行环境,作用域链、活动对象的关系

参考博文:JavaScript:理解执行环境、作用域链和活动对象
  • epitomizelu
  • epitomizelu
  • 2017年02月09日 20:45
  • 586

Python编程基础之十三Python执行环境

一、简介        在python中有多种运行外部程序的方法,比如运行操作系统命令,或另外的python脚本,或执行一个磁盘上的文件,或通过网络来运行文件,这完全取决于用户调用。有些特定的执行场...
  • taiyang1987912
  • taiyang1987912
  • 2015年03月26日 13:48
  • 2053

JavaScript核心原理(一)执行环境、执行环境栈、变量对象、活动对象

前言 之前在阅读《Javascript高级程序设计》「4.2执行环境及作用域的」时候,对相关的概念理解得并不是非常的透彻,只是懂了大概的意思。后来在看到「闭包」这一节时书中再一次提到...
  • thumd_lee
  • thumd_lee
  • 2016年12月08日 20:22
  • 707

javascript函数执行环境创建过程及解析

简单的代码: function say(msg,other){ var str = "nobody say:"; this.name = '笨蛋的座右铭'; ...
  • javaloveiphone
  • javaloveiphone
  • 2015年12月15日 10:31
  • 787

JavaScript中的执行环境

JavaScript中的执行环境 1)全局执行环境(全局作用域):在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。 2)...
  • A__17
  • A__17
  • 2016年08月22日 00:20
  • 259

14 - 二分查找

4.18 二分查找并不难,主要是要找到第一次出现的位置。 本来想的是,找到md值,然后一直向前递减1,但是这样时间复杂度一定会超的。还是得继续采用二分查找。 class Solution { ...
  • Missbubu
  • Missbubu
  • 2017年04月18日 10:53
  • 159

可信计算与可信执行环境TEE学习研究资源整理

想要学习和理解可信计算技术的入门者,经常不知道从哪里下手,本文根据可信计算研究者的经验总结了一些资源供参考...
  • biggoodbobo
  • biggoodbobo
  • 2016年04月22日 15:42
  • 2976
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:14.执行环境
举报原因:
原因补充:

(最多只允许输入30个字)