您的位置:首页 > 其它

14.执行环境

2015-11-20 17:49 232 查看
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”

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

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

先写一个模块:

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

但是如果我们从另我一个模块导入该模块,并调用一次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、这章我表现的不怎么样,继续加油吧…………
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: